* ?' m( M' i1 T; ?, ?- / RevApp.cpp : Defines the class behaviors for the application.( k8 P, f% A' z6 _
- //" n# }& T4 W& H& T" f% T: _
- $ _" {5 |: L2 E# d! h
- #include "stdafx.h"
6 A b$ \! S A6 o: n9 ]
1 D) }- P& \7 D- //#define UNICODE6 m+ G3 H9 x: d% \, Z' B
- //#include <gdiplus.h>1 q( k) T, w& Z) ?/ ]7 N
- //using namespace Gdiplus;
6 {; h1 u9 L4 p j& s
- M& I' r6 V. ` c+ @4 D! N8 u- #include "RevApp.h"
! R: q0 v9 z9 i, j. Z& N. T6 ? - #include "RevAppDlg.h"7 A. @' b, g$ ~
! f( g' I9 v# P$ c( Z- #pragma warning(disable:4786)' h/ `, t# D$ ]& V8 L" \
- #include <map>
' j! d7 }. N5 F1 _ - #include <list>+ {/ S3 n+ F- A; K
- #include <direct.h>: n) F: |9 q& `& v' m+ r
- % ~5 _: n( l; D, a
- #ifdef _DEBUG( Q# d6 l* X! U' G: b
- #define new DEBUG_NEW
% n$ n1 _8 h+ J! O9 v7 l) }+ ] - #undef THIS_FILE
) s# X1 w1 i* f5 Y) t5 s - static char THIS_FILE[] = __FILE__;
0 D6 O. Q `) M) `9 l. t$ C, K - #endif
1 x, m& }* Y& F5 z$ I - #include "SkinResDef.h"
% v& R4 a2 v) x1 \; [9 t - #include "ChangeBG.h"
1 ]/ B, k: t4 g! B1 F5 E8 R* N2 r+ D - #include "AFXINET.H"
& ^9 a9 k- L% Y. `9 I
2 M* z# Y5 L' H: j+ k0 M, {3 @- #define TRADITIONAL_CHINESE 06 m, S$ i4 n3 d/ m2 S! }
- #define SIMPLIFY_CHINESE 1) s3 a+ _! I: m& e
- #define ENGLISH 2
% o" H4 B0 H+ H% C8 P - int m_iLanguage = ENGLISH;" }% [; a5 a' a% Q- B% [8 e
- /////////////////////////////////////////////////////////////////////////////) D1 o0 ~# O2 _7 {
- // CRevAppApp+ T4 O; ~! z7 V8 X% T; _
- & ]/ j/ ~- w+ P2 |# U
- BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
& h/ @* [1 t5 f: q! v* j - //{{AFX_MSG_MAP(CRevAppApp)
* U6 A( u- g0 P. D - // NOTE - the ClassWizard will add and remove mapping macros here.2 F2 [, o" N6 ~" d/ _
- // DO NOT EDIT what you see in these blocks of generated code!% c7 U- t4 t; r9 U0 l% {5 {0 e
- //}}AFX_MSG
' W! J! l ?8 }+ j+ B. k - //ON_COMMAND(ID_HELP, CWinApp::OnHelp). `6 W9 N2 m6 w8 j
- END_MESSAGE_MAP()
1 G+ }6 \) M) [: B1 D' E. h - + F; f1 S# e0 ~$ p6 Z, p5 c T1 R3 L3 B
- /////////////////////////////////////////////////////////////////////////////* \8 c# Q" k+ X5 d1 |& F" }
- // CRevAppApp construction+ T7 l- R9 @( Q' Z% c
- ' v1 `" x X: v+ D
- CRevAppApp::CRevAppApp(); U! v# ?* T5 c _; D2 D* K
- {4 g" ?, q6 a* c ^: F
- // TODO: add construction code here,
. B" _0 Z" I# P4 d% \1 f1 R - // Place all significant initialization in InitInstance
! }" j/ y1 { c5 `1 B4 G - bDisplayIsBig5=FALSE;
% M3 a$ {3 E+ O+ N( i - bRestartUpdater=FALSE;
5 J3 n6 O) Q2 A8 ^ - bFinishUpdated=FALSE;
% ?' Z l: ]. k! ? - if(GetACP()==950) bDisplayIsBig5=TRUE;
$ S2 Y) m8 k/ F7 n& ?5 M3 p - InitChangeDataBig52GBKS();" `3 ~. a" K( m
- InitChangeDataGBKS2Big5();
& ^3 Q# `" M* U' q - //3 B# e: |9 \. @' [% }* B3 @
- bClickRunExe = FALSE;; L+ x/ ?# r5 N6 @
- //
, ^, W; |4 g [0 M - }# }& }3 I$ W, l! ~# B
- 5 P2 K4 H# U S. Y6 h& Z( L. `- b
- CRevAppApp::~CRevAppApp()& M8 t% M5 H% o+ X" ^) E
- {# j- u- k2 e* _$ K0 p6 v& \8 J/ Y" K
- // TODO: add construction code here,
% r9 V* q' w5 L- O3 e; V - // Place all significant initialization in InitInstance: }( }, U3 C; C& B
- EndChangeData();+ d/ W! h3 ^% R
- }
7 R( h5 \. ~0 U1 u4 z
& @: Q! {8 {4 T- /////////////////////////////////////////////////////////////////////////////
5 k6 E# P- P% }( Y5 |- k - // The one and only CRevAppApp object
, C9 }" Z/ C! o7 Z( e - ! N, r* L, N8 ?8 z; Y" m3 A
- CRevAppApp theApp;' |8 ^, Q% K2 E& D* ^5 k% G
- ; F# R% K5 X. y
- char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
7 G# g' k _6 W1 P; J - {6 `; T5 c8 @* f- x5 Z' x' S! r. b8 W9 U
- int iEOF=0;/ L. M. c; Z5 L. h# }5 I- U' u
- char szTempName[MAX_PATH];
& n' U: N" |. Y. r) R! R! A9 W - *szFileName=0;
6 @4 B' A8 V. i# m; P0 J - iEOF=fscanf(fp,"%s",szTempName);7 }8 T6 T8 s8 f7 ]' ]% t
- if(strlen(szTempName)>=1&&szTempName[0]=='(')* O0 A8 D0 \7 D4 S) T
- {# q) d: f( f. d% p
- strcpy(szFileName,&szTempName[1]);' g" @2 w) c0 z$ V5 l0 o
- while(!strchr(szTempName,')')&&iEOF!=EOF)' K# x% Z2 ^* L5 E S
- {& e0 H; N0 h: j0 J/ E
- iEOF=fscanf(fp,"%s",szTempName);
7 W& ^& m; Z4 z# T - strcat(szFileName," ");5 m9 l6 h9 B: X) y- @( y5 m
- strcat(szFileName,szTempName);
+ V1 w# i% F: }( T2 g - }
. H, P( X7 O! U. i% K - if(strlen(szFileName)>=1)& e) s- o) l) W i' g! r- T
- {
3 k4 v( ?. A: b W& o2 W' T - szFileName[strlen(szFileName)-1]=0;
* |3 r) X' w, c% b9 C - }
& u' u. G4 M0 ~: Q' C; A - }
: Y0 Z i; G7 m* d - return szFileName;! a/ I2 L- k7 a; t' {9 ~, b4 g
- }
g& D+ R8 g1 P
- \/ x) Q; k4 O# y% m- bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( `# a* A# \5 e) w7 O. ?
- {% x* `! c) @# g6 j2 m4 t6 U
- FILE *fp;. {( _/ o5 l3 g5 U
- char *key=NULL;, a! B/ a. |$ u' \
- char version[MAX_PATH];% W0 {" ^! Q) G
- LPUPDATEFILE file,olds;
4 ?6 Z) ` {+ ~3 q" v# \ - std::map<CString,LPUPDATEFILE>::iterator p;) c' b% O) Z/ t M+ U
- L$ ^3 x7 `- H M# O: T0 W$ Z
- UpdateList.clear();
7 ]. d8 n0 {) O - UpdateFile.clear();9 c4 I: {+ H: o3 y- ?
- if(GetFileAttributes(filename)==-1) return false;1 O* U7 Z% b+ ]
- if(!(fp=fopen(filename,"r"))) return false; A! T, z3 q* y" S5 N7 ]# B! D
- fscanf(fp,"%s",version);* t" |: o/ I; u
- if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }2 s9 ~( A4 v1 q j8 V( v5 O
- while(fscanf(fp,"%s",version)!=EOF)$ E, N# J) c, l1 F i
- {/ A$ e0 H- I- s4 B% I6 R3 g: k
- file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* q1 E0 n5 s+ M& [' O+ O
- fscanf(fp,"%s",file->path);
* D8 b* ^5 n: y2 ^* B r# f - ReadFileNames(fp,file->file);) e1 n: z& `7 G( K; J( S/ ?
- strcpy(file->full,".");/ R' k2 T0 t* o' {; ?
- strcat(file->full,file->path);1 h- x) n# {8 v! Y$ r( r' Z& V
- strcat(file->full,file->file); t0 w5 d. |5 l
- if((p=UpdateFile.find(file->full))==UpdateFile.end())
) i4 O) V* y5 v; i# S5 c2 V% J e3 D - {; D5 H# j0 Y4 {
- file->vers=(float)atof(version);' X Y5 Y' }# d" Q3 V7 A7 q5 f
- UpdateList.push_back(file->full);8 w7 s% K' P- G+ K) B9 I" m
- UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));5 l! j6 V: H! i( E& c2 [& `9 F3 q
- }1 c9 e" o( R4 o/ _8 v1 p4 r' n2 Q
- else: b) H: s$ J# ^# x, ]
- {
' v( F$ a& Z/ f* H' {' R4 u - olds=(*p).second; G3 [) i) M' v. L
- if(olds->vers<(float)atof(version))
. g M0 S- m4 |1 y+ | - {
" Q |7 G7 t& R3 \( A8 \# N - olds->vers=(float)atof(version);
; Q+ r1 |5 J# i& Y& Z - }6 {9 e1 l5 x/ k( n% G4 T& \, h5 ^6 I
- free(file);
" F) B4 U% e* c3 M7 e0 Q - }
. T' K W+ {% o' {# G - }
5 W1 Y" {) N$ t% d - fclose(fp);
1 k0 C; {" n! r' I2 c/ h1 ^2 N - return true;
* n/ v" L! w$ f0 @: j - }+ i7 z- |$ g' \8 m' e
1 `5 n* X. \. G$ _. q. b3 K5 [3 Z- DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
3 m; T2 u! u; x$ M - {) u* z8 N2 E3 e3 t% |. p2 C' ^
- TCHAR szFull[MAX_PATH];
/ {, P( m; ]+ ^: `! t0 i& C2 K - TCHAR *token,*inter;
. l S0 N k6 X( j - *szPath=0;/ [6 k' n0 n( v
- strcpy(szFull,szFullPath);5 V) o: @) C& o
- token=strtok(szFull,"\\/");+ {# n8 A, j" l7 J! v' F
- inter=token;
; \: S0 K5 ~& D, V - while(token=strtok(NULL,"\\/"))
; r( O9 d4 }" x9 [+ J* R7 P I - {2 \* i' S3 D& J6 o! D1 p& O
- strcat(szPath,inter);
: F. ]! u4 B+ g3 p5 _/ p. { - strcat(szPath,"\");
+ G! H* z* c4 H6 J3 X - inter=token;* f' W5 |. u- m: a: J6 `" t
- }! C8 k9 Y6 N1 Y: s. f
- return strlen(szPath);$ t d2 p7 ^) J2 x
- }
1 e' D! N8 D3 l( h- Z/ g- y
1 Y; K* Y3 z/ t# c5 Z r- void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ a3 p* V$ t, D6 ?0 h: Z/ I
- {: x/ f1 e/ N0 s2 g4 P J* w
- DWORD attrib=GetFileAttributes(Target);' x7 F. I, ~7 b x
- if(attrib!=-1)( {* w% N7 `. J) [3 s. W" u$ v
- {$ Q B4 Y% _! _: p0 Y% ~
- if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ X! P5 V* G, R- N1 ^" [) O
- {1 ^3 B; `9 _* U; T2 ]; V
- attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
9 S) c* }7 K. @" l0 a7 J$ X - SetFileAttributes(Target,attrib);
/ D: {" `( K5 r - }
" ~4 ~9 \2 z5 R; O - }) c; X! X7 W( Y' t, J
- CopyFile(Source,Target,Erase);: {- f) K0 r' ?% a! `( z& a) o
- }3 N* [ Q/ _$ ?: b* n) _( v
, t/ S9 P( D6 u* Z/ i- }$ C: p- void CRevAppApp::Fprintf(char *FileName,char *message, ...)
& @2 H( ^$ ^5 d# C/ g# v - {
2 P* D/ C* l& _$ h) F% k1 k9 X4 z - FILE *fp;' ~1 \( h0 h0 D' V6 B. i
- char szBuffer[8192];2 L/ G6 J1 z9 d& L( y
- va_list argptr;
. u( Y' ]: |$ W
: T3 k4 j; I/ s2 T0 z1 \( f7 R& y T- va_start(argptr,message);# Z+ I$ d, R; S( u/ d
- vsprintf(szBuffer,message,argptr);
$ ~: J- l9 t3 V# F - va_end(argptr);5 ^: M8 {0 A2 ^0 ^# x
- fp=fopen(FileName,"a");
" U! T+ `; H* Q; i" `: j4 L - if(fp); j" z: n, B9 \* U* z7 P* a; A
- {
% }3 E9 x: Q2 Y; V+ u. K/ f - fprintf(fp,szBuffer);% C' L- y3 y$ R# A0 p
- fclose(fp);
]0 C+ W* w8 W% ^ - _flushall();6 g6 R2 O& \* y3 {; m! v
- }& f: i& i6 Q5 N- g* G. h
- }
3 N. `" r7 w( S1 d& `+ \8 l - 2 Q9 r+ c" B! D
- BOOL CRevAppApp::Fclearf(char *FileName)
" U# A- Z/ Q; }2 C- v - {5 ` d- Q) s3 B7 K1 t
- FILE *fp;% H! }# U4 p! b* M$ R
- DWORD attrib;
$ I0 R4 L7 {7 F$ @2 x8 J P - attrib=GetFileAttributes(FileName);
/ O7 U# l& @- D4 @; `( r$ k - if(attrib!=-1)
4 K/ P7 o1 j9 p4 | - {
2 k0 Y* q" j H- t$ `7 ~. Q - attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
( r5 w$ U7 P% c3 P9 ~ - if(!SetFileAttributes(FileName,attrib))% D1 i" ~. y; e' x# Q1 Z
- {0 x: D4 U4 {: x9 x) R
- return FALSE;
* V$ k( B' y+ C+ D+ Z - }
* ]" m# f6 Z( }' \2 T2 I% w, Q - }
% s" s/ u1 M0 e" v! J5 b& e3 r - fp=fopen(FileName,"wb");. a( ?) Y4 ]9 N+ J$ R7 e8 L' N
- if(fp)" A# Q# v u" f0 g% ~: c
- {
7 q# T0 i$ ^( a' h T- [ - fclose(fp);
1 P5 K4 b# s( ? - }2 W, K* g1 b% ]7 `, p: I9 m# O
- return TRUE;
9 j- w8 t( W/ k- ^ - }
6 z$ Q* m' l. v$ Q: A K - 7 U$ U' C9 m6 x# X I, m0 J+ D( \7 U( i
- BOOL CRevAppApp::UpdateLocalVersion(void)
$ E [0 \4 L0 p5 N @* Z3 S0 p - { y E; ]5 w9 z+ U& ^3 M) N/ ^
- char filename[MAX_PATH];4 X$ w' O! J" a- z B( J- l
- LPUPDATEFILE file,olds;
7 K+ B: f( e' c& ?: v( `: f) V - std::map<int,CString>::iterator i;
: J* [; X$ D8 V1 i - std::map<CString,LPUPDATEFILE>::iterator p;* `- X: v; S' q- a
- std::list<CString>::iterator l;+ {- s/ v5 h. i
+ F% ?2 \$ e# [& |/ j8 h- if(bFirstUpdate)
/ `6 b- f9 G! Q( E* ~ - {
) Y! V7 j, C/ _( B4 {9 @1 m - dwCurrFile=0;
3 C [/ n+ d9 X/ y- f - bFirstUpdate=FALSE;' ^* A& X; W, H, y
- if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& j5 p/ v: {2 a
- {
: ~0 E$ n$ k% k6 ]0 I. v - dwTotalFiles=UpdateLocal.size();8 _$ \+ G+ g, J. {. h0 |4 {. d
- dwDownLoaded=0;- {1 |! i2 \' ?9 V. u
- bSilentStep=FALSE;
' s5 k. x2 ? {1 |8 C1 f - bCompressed=TRUE;
# c1 \- Z b/ d - strExtLocal.Empty();
6 R# C/ v+ L, d" n/ o - strFullName=(*i).second;
# F" C2 N$ t. y6 H9 C - dwProgramState=AP_CONNECT;
5 `+ F9 k( f8 i7 |+ k - return TRUE;
/ {8 X2 \( H; c% }+ ^' x! O$ v - }
9 E2 U8 u9 i/ o6 U - }3 j, A4 F. I, [
- else if(bRestartUpdater==FALSE)+ l- ]: D9 E, K& X/ ~' d4 G: M$ M5 E4 |- S
- {
t* \% T4 g" T8 ]- t! J+ j - if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
8 {: \2 ?2 ^/ C - {( c+ z: |; X6 }; r# K" s9 m i% N1 y
- file=(*p).second;3 W9 R2 ^) e W, N
- if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& o V! ~" d& t1 {: S( g% _
- {
; {1 g# Q: t$ b" q9 w% R( k - olds=(*p).second;( k3 U4 R6 b$ R6 v" p6 Q2 D3 c
- olds->vers=file->vers;0 V9 N4 h# v, | i0 ?- f9 r; Y
- }, {! v4 s" j+ a! Z" @5 D# k2 |, z7 N
- else) z. P3 x- O- u4 u+ I Q/ o
- {" X2 V h0 i- T8 a( D
- olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 n2 S( G9 V# f/ J2 x
- memcpy(olds,file,sizeof(UPDATEFILE));; B0 O- C$ @2 `7 Y6 g
- UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* M6 w& p1 S6 V' D+ c
- }
1 N' M1 Q: T _( ^" p: { - if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% `5 y6 J+ }7 l
- sprintf(filename,"(%s)",file->file);
( a1 q! g0 ^4 t& e6 Y - Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
2 r+ w5 B6 X0 @5 Y2 S - if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; z, F% k: U& X4 [+ A7 [
- }) V) o t* c. D! w( z
- dwCurrFile++;
$ y* l9 ~2 _; g( P$ S - if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
3 U0 K+ {2 G g5 R1 V3 T+ B, H$ j - {- s9 M, _$ R9 o0 ~& q4 n @
- bSilentStep=FALSE;
+ c5 T( |' b z/ K9 o3 u) _5 d - bCompressed=TRUE;0 ]. h1 P0 R; m: X/ j! J
- strExtLocal.Empty();- b3 L* i3 S ~. H4 d. l6 x
- strFullName=(*i).second;( Y T0 |7 g. P) i/ B: B. e& m0 j
- dwProgramState=AP_CONNECT;. H5 L, o2 D( t9 ~4 O9 F( u
- return TRUE;
! i4 P# T; B ^) |$ F% R" C5 _. L2 A - }
9 O0 O& o7 }$ e/ g! u - if(!bRestartUpdater)2 M! d* b+ r9 o; _, w$ w9 O
- {
* j& E3 z5 o4 G- a; W9 o3 V - int iCurrSize,iFileSize;4 l* x% m) k7 R6 ? q4 Z
- iCurrSize=0;
& U; O' g' k- C5 u) L - iFileSize=UpdateList2.size();
. P5 E& q2 R+ l - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝戈い.....");
/ a/ t p7 c' M& x7 J5 y - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新资料列表回存中.....");
9 e p$ j3 X$ C- ]% C& b9 Z - else dlg->m_ListText.AddString("saving updated files.....");
: A3 U2 h9 e. u3 d) g3 D - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
8 C- ?1 H% f. h7 w% {* H$ }- \ - Fclearf(".\\update.dat");0 U5 A5 D! H9 X4 j5 T
- Fprintf(".\\update.dat","Bloodyf\n");
8 |2 z4 r- |7 r2 z2 L - for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) T" x7 t* v+ X {6 m
- {
4 ^0 K2 t Q. `5 U. A0 z/ I - if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
+ Y! f% }( Q, w, C' F! D: M - {
/ N8 y* n$ B y/ P5 F _( b, v; f6 Y% H - file=(*p).second;+ f" N) T0 ^0 ~, i# l k. Q( m# P9 m
- sprintf(filename,"(%s)",file->file);0 i( F% D \% @: n
- Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
$ Z: D7 v- o! g8 X9 D" t - iCurrSize++;: a6 q- o- _. k4 u! a4 C9 z
- dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
( Q6 Q* I& e: n* E5 a* Z+ t x - }$ Z! `+ B* o. [7 j: A8 d
- }
]; I% \# U; p$ I, U( j - unlink(".\\update.txt");
]3 S9 [- s" W2 Y - unlink(".\\update.tmp");
$ V7 S# ]% P* u4 I+ T - Fclearf(".\\checkversion.dat");' t Y6 r) C/ W/ A5 {8 D0 L ]6 x
- Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 _; l% F4 Y; O
- if(UpdateLocal.size())7 S( ~1 B5 d" v) e5 ?
- {
1 s, T2 q! C+ a1 n8 h J - UpdateLocal.clear();
" L0 i' O; b9 J+ v6 b6 a - }6 ]) B! r, ~8 T- g: f" X' m
- if(UpdateFile3.size())6 ^" s& r' K- z/ N+ ~6 y6 ^; L
- {
" E: @; o/ z# _* m+ w: u Y" S3 S. O - for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++) {6 W& V2 \- \9 x4 K) ^* o
- {6 @/ Z# F! [1 E/ @/ [/ R- Y0 O. ~
- file=(*p).second;7 c% Z' C5 l# a. h# t- Q: }
- free(file);. ~' G! H4 N$ d q7 y) U
- }# a! {: g" ?/ s6 a; ^3 O$ G
- UpdateFile3.clear();+ g) q$ v9 i3 j$ ]% H! E, N
- UpdateList3.clear();
. x0 |& o: J6 v& z" u - }2 @; G1 U! a. Q6 x
- if(UpdateFile2.size())6 Z" ~/ F2 y" M9 |& T# _
- {
1 ]* ]" G8 u4 l) i9 s, b2 _4 e0 F - for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
# v' i2 w' u1 J, E9 V9 w - {
X" K# D, n# l8 B8 r, N - file=(*p).second;9 Q& W$ [; {% |
- free(file);' [' Z6 n: @* ~% O, r
- }
. W1 ?8 t* E1 o1 h - UpdateFile2.clear();
8 \8 q. l% C) |: n2 i! ?4 k$ S - UpdateList2.clear();3 I& @! u3 P+ u5 H" g* S! A
- }1 U3 t# k& U# I6 B; Y
- if(UpdateFile1.size())8 G1 ], _; f+ L8 P7 H
- {
/ `3 z4 e- g3 y9 C$ }8 l: U - for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
2 g, [) T4 _% K3 b6 n - {
9 O4 b; @) s, Z! x - file=(*p).second;
- Y. s6 ^. P" Y - free(file);, D2 a, B' N# Y3 o
- }
k ?7 h7 ?% o9 { - UpdateFile1.clear();& g! s7 P7 b+ E: O
- UpdateList1.clear();
% t3 n/ O5 B: L4 i; E - }
! ?5 F @( f) b2 p3 m - dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ O! |% b5 g: _) n
- }: d; r2 ^) T5 D; F1 @& Y
- }
& ]2 y( s8 y% S% u9 y) s - return FALSE;
2 d2 i( r0 J+ e$ C$ M: F5 @& x - }
7 o/ u/ n' b9 e+ a) n# Q+ x
7 U: B& _8 T) s( K- void CRevAppApp::ClearAll(void)6 C0 X% N5 R4 c9 c& {
- {
3 V; b' G! `2 `+ o+ h5 |9 `8 [ - LPUPDATEFILE file;
9 {/ a% |1 E: y3 S - std::map<CString,LPUPDATEFILE>::iterator p;
' p2 F/ `: k, }. K. S7 g% T/ H
5 G3 w+ ]; z2 Y% J2 g! ]6 s- if(UpdateLocal.size())8 j( m# t1 {9 V) n. B
- {( v: J( L+ R4 R
- UpdateLocal.clear();
8 ]$ `+ C4 A1 H( @% e/ V7 B) k - }
" @0 Y+ B4 F) V6 X- r3 A8 s - if(UpdateFile3.size())
- H1 a; A( \) x$ M5 N - {9 _$ e5 R; G' o. }* Q
- for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). B: m: Y9 i, z4 P
- {3 q3 L2 N! z6 K4 o% ]
- file=(*p).second;
4 k- {( x; P8 h0 J" _! k& E$ ~% { - free(file);' a/ `2 F' r- A2 z# x$ c
- }" F9 U! G/ Z5 D
- UpdateFile3.clear();
; w; }8 \6 q L5 z: K - UpdateList3.clear();
/ m! B/ d) _ H5 r1 o1 r - } F) S1 a2 C- B) _7 R
- if(UpdateFile2.size())& q0 C0 X6 ^0 D
- {) D; l) m- j7 j" O8 C# s: b
- for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
8 ?- K' i' c- N. o0 z. z - {% H4 X; ~& @0 o' y
- file=(*p).second;
( P+ Q* a" z% \$ J; `: P; ? - free(file);
/ ^6 q: W) L3 J: P- `& U1 G8 ?/ _ - }
5 f4 l% E/ v H! O g9 P3 l: v - UpdateFile2.clear();. ~; s5 e9 @# S8 V2 V+ ]$ \7 {
- UpdateList2.clear();
( ~* a2 r- J- d! @: ?9 O - }4 D a H; D# {9 M: V5 q) V
- if(UpdateFile1.size())4 j; P' J& N6 ^2 r7 r$ e
- {
5 e& K W- E$ P9 a) H - for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), l3 ^- s7 v/ `" M3 v; C0 g
- {: x, Y' J1 }( `5 a: M/ `& c" [
- file=(*p).second;- B# \$ E7 s3 O- j1 Z
- free(file);
! `6 H8 J+ V- Z5 X+ \* s - }# @$ m+ {+ r; S _4 C: U& J, F
- UpdateFile1.clear();
D' [. W* f5 b$ ~0 _: I7 U# T - UpdateList1.clear();
4 q1 E( t0 X8 r. W# y - }: }; P! Y/ @3 e% K
- } / T! u$ l2 q8 D1 F w( K5 z
- 1 {% {! a2 i: M5 v. L3 T
- BOOL CRevAppApp::CheckLocalVersion(void)
! t1 C; M" r+ k0 I `( W - {
' l5 F' @7 |3 A5 w2 ^! l' | - int c;% e1 {: [) z5 W4 _3 f4 ]* a2 O8 p
- LPUPDATEFILE file1,file2;5 H) v8 K& }, S/ s8 L
- std::map<CString,LPUPDATEFILE>::iterator i,p;
5 {) D4 T S$ Q - std::list<CString>::iterator l;, t" k8 |; f* t3 W! Z- E
/ M) q# u; a" ~) S, G- UpdateLocal.clear();. H; i$ G- N8 d, c1 [8 _
- LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);' Q& j8 ]' N4 p J- z+ y
- LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2); b& t7 {0 i5 G9 J) G& |
- LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
; h5 m* m0 b/ R7 B - // if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 a$ m# l0 x. s7 x
- if(UpdateFile3.size())! w) U5 e* `$ e b# u, q! k
- {9 b- ` C% D' w- g- G
- for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
3 a" Q1 s$ x- a, J - {
5 g5 o! e; v/ K. n) r: M - file2=(LPUPDATEFILE)(*i).second;
' Q4 d5 T X9 Z. G' {) h8 Q - if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
0 \* m5 k9 `/ `/ }3 [7 S - {
5 }8 R6 b, Y+ u9 z - file1=(LPUPDATEFILE)(*p).second;
/ ~ v K% X& M; }# P - file1->vers=file2->vers;
+ j! _# O+ L( m* {. y$ t - }# p* @& g+ N1 o" O5 E; {' p
- else
: m5 f5 w" l6 e - {
6 |% a. w1 X- @8 S - file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
# I) {1 ^" y1 U' D) W" |) P& h - memcpy(file1,file2,sizeof(UPDATEFILE));
; B4 J( M# `$ T# x* O9 U! r - UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% T* P4 n6 e* k
- }! o& ^ Q# Q3 D6 ~4 G/ [# ~
- }1 J9 [ r/ ~4 [3 J3 Z, [
- }' U- a. P6 W6 ~0 l
- for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% O8 g" n/ ~% ]
- {
6 y' y( x6 n3 n5 K0 O; N4 n+ K! P; C - if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
6 o$ H/ s& d3 T6 A* v( b - {8 A" f- ^0 A( l* k8 r& R
- file2=(LPUPDATEFILE)(*i).second;6 y/ R3 K9 X' G; R3 C: }
- if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 b4 e5 P1 }/ c! W
- {( T* `: I$ N t8 V
- file1=(LPUPDATEFILE)(*p).second;- @3 p+ T5 W" V
- if(file1->vers!=file2->vers)
$ s0 b/ q/ c: l6 m: p - {
! `, d: O8 v* H - UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
! `: C9 a# v; l& z# u7 [ - c++;! J( L& s! Q% ]. ~
- }! Q7 Q1 f: [6 O+ S
- }
- `7 \0 Z% g9 r+ R9 G1 ] - else3 I, ^/ F; c5 `& g/ t
- {
' R" `' y- Y0 i% c/ n - UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
* n t5 N, @; \$ \! C - c++;
' j4 [6 X* ]. ]6 M4 r& l+ X - }/ V; o; x6 k- n, E$ ^. H
- }
$ J% O! g/ B9 ?2 a - }5 a+ p9 c$ n/ r
- unlink(".\\DownLoad\\update.txt");
; l) g5 S9 w, |/ }8 f0 W& o - if(UpdateLocal.size()) return TRUE;* \6 u1 U- j0 |+ c7 C
- else return FALSE;- [* S$ G( l8 F9 O
- }: r3 E9 k7 b) m& N1 {( |. {1 E
- ; E2 v3 r+ e' I" h, F
- #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
0 n+ C; n# U0 g5 f6 s - #define DEFAULT_REG_URL "www.wgs.com.cn" U( Q6 T4 A' R( y2 ]$ N! G
* e- i/ @3 Z: ~* V2 W- $ ]* m( s9 d, ~2 O
) G$ x7 L' s% n: y2 Y- BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
0 S5 Y9 T( L" Y9 ]7 m) G4 o/ n - {
9 V: ^" p$ s* l. H - DWORD dwType=AFX_INET_SERVICE_HTTP;5 O, Y, d0 q( I4 d4 o, Q1 t5 m; d
- if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& E& Q( ]3 m R+ C- {
- {# J- u3 l) \, m$ a! v3 e
- char szLanguage[50];, \- V4 K; f" y9 S# E
- GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
0 ~/ b+ q8 Z1 Q/ S1 p, O, v8 | - if(!strnicmp("BIG",szLanguage,3)) m_iLanguage=TRADITIONAL_CHINESE;. u/ h: m. T' K
- else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 O. a% y0 X3 E" F2 h! h6 s
- else m_iLanguage=ENGLISH;
% v( L; r& P: p. \- ?. s - char szRegister[100];
4 J, z7 z5 s: b0 e - GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
4 c! p) H# x+ Z - strRegsName=szRegister;
. {; f, F1 @* a- ?5 i - char szPatchURL[100];; V/ r& t0 p5 }. a, w7 N( j
- GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
1 q' F8 l% F4 E" g6 Y - AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( @1 Q+ ], `$ P( ^8 N! E9 h! d3 `
- }! G! o2 `0 S' B! ^7 D
- else
$ R* w$ q5 U! P0 I - {: y! [& X) R a: k) b0 y! |
- AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 Z* W3 k3 e3 E5 _
- strRegsName=DEFAULT_REG_URL;' `% E+ J0 L8 p
- }
' |! J- R- t( p& h - if(GetFileAttributes("hosts.ini")!=-1)
/ ]* h' r7 d' `% m/ l - {& \& B1 G& b9 W2 D
- char szIP[50];7 a' D" Y* b3 Z* P% ]7 O- s
- char szDIR[300]; N' z7 X' Y8 i' ~3 ]
- if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! N5 `( W$ c0 A
- {. G9 e, o0 v* p* S h( A+ I
- wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" j2 ~0 ^* d, W. `1 ?0 t/ b
- GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
9 S# y3 t$ d- Z) U - strHostName=szIP;/ G+ `6 q, i G
- strHostPath.Format("/%s",szDIR);
2 h0 A/ w) V! f% X9 ` - }2 Z: y! G5 W) o1 H
- else" b$ Y7 |! V6 H) s$ _8 Q
- {
9 G- A" R2 i( ~& H7 Y - if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
5 X! M, z9 {! U% T, l+ B$ \$ d - {
. J" v% i* b- l% N5 n6 ~ - char szLanguage[50];& v6 r" J& \: L/ B" C
- GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
1 v# h5 L/ q, N/ @ - if(!strnicmp("BIG",szLanguage,3)) m_iLanguage=TRADITIONAL_CHINESE;) s+ P$ Q4 w% z! [& H8 x
- else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! ?) ?% A+ c; R
- else m_iLanguage=ENGLISH;
" C e9 O3 i6 K4 i& z9 b) d3 x - char szRegister[100];
6 z' X5 X, C3 ]& I - GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
! d0 k, C( _8 M$ [ G - strRegsName=szRegister;
0 r" x4 y Z, t' V' | - char szPatchURL[100];
$ n: C0 h7 J1 v% } - GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
' v( Z) b* ]+ ^0 t- ` z - AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- \5 T6 d/ F6 D9 y
- }
4 E" d( ]6 z4 S- s* K6 g - else r7 N5 m" E/ v- y i, d
- {
# ], ]9 F' |8 K - AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- B* A! a' o$ u
- strRegsName=DEFAULT_REG_URL;
* j6 m3 z: c4 y0 O - }* H9 n9 v$ X t( E' g9 I+ Y
- }+ j% J) K, S& b" w: \' s, O
- }! j. \. V L+ O, l* x, z# E
- return true;, ~; {% [( _- @ m, X& h& V
- }
3 g9 C- r* z: A2 `2 l/ h2 S; a6 y4 C - & j" B$ x- ~" T T N2 }$ i. s
- #include ".\ZLib\unzip.h" @- k% {2 J" }& g
- extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
# U7 X- P' x- I- Q3 l8 d2 y - /////////////////////////////////////////////////////////////////////////////% r% E- Q, x# m3 C/ C' b0 {7 S
- // CRevAppApp initialization/ v: p/ {3 v& m, O- p3 Z
- 0 b0 p' a. f H- M
- BOOL CRevAppApp::InitInstance()
' u2 I$ x9 r7 N - {
2 R7 w7 s( v" U7 `+ c$ k - TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
( b5 X2 _6 {" n+ h - 6 T z( p( l: n2 b3 r
- GetModuleFileName(NULL,szPathSource,MAX_PATH);& I- O- w4 F) g% Z/ Z# `: D9 c! c
- if(GetCurrentDirectory(MAX_PATH,szPath))8 A8 k0 e- ~$ F F; f) z
- {: B6 J I1 o% S% C) N" w- H
- if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
5 D" v ?% m3 @( E8 z3 z/ { - GetPathFromFullPath(szPathTarget,szPathSource);$ e3 Y( x6 i' d6 ]
- if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( ^7 B4 S- N9 {& @, P! a
- {
( M& l/ L3 t0 g - strcpy(szPath,szPathTarget);! \* G: G6 _0 u% n
- SetCurrentDirectory(szPath);
" @: m6 [4 C; w6 P { - }5 ]. ?/ t: L( V& e) N/ {* M8 d5 V0 B" k
- }0 O. b9 E0 s/ U8 q. s+ Z# I
- #ifdef _DEBUG
1 A* X# _6 }4 h4 j& N6 x# S6 ^ - if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
5 J2 y' m* T( l3 v1 s - #else
- U4 u8 ~+ l" n, ^7 S9 ~4 H - if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
7 G9 F+ U3 z( K' O9 e, V. u - #endif
9 e# L% ?2 p {; n% Y5 `1 w - {
- w# Z# B5 V3 }( X+ e# U - char tempFileName[MAX_PATH];6 V. i: E* Z1 c+ E; D
- strcpy(tempFileName,szPathSource);
( F, @, a2 T) R X" v) {" e1 t3 x - tempFileName[strlen(szPathSource)-12]=0;
' b( v' a! u0 U; h: Y0 ^( D - strcat(tempFileName,"\\$CSUpdate.exe");; @8 q5 _8 z* ` {/ M; Y- y
- ForceCopyFile(szPathSource,tempFileName,FALSE);
6 ^' h2 w- _. e, g/ D - ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* V! t' f* w7 @, `$ E( a9 S
- return TRUE;" X7 a( D3 t3 n8 t. S
- }( ^! s! J: d9 D' c/ a1 j/ \
- // Nuke 0118: Delete run.exe: ]7 |8 `: _. L2 E2 ?: h% T: b
- if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! x4 W, h1 {8 ~ ^$ A% u2 i; f' H9 o
- if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 l6 x( D( S* L0 c1 b. q
- if(!ReadCfgFile("Config.ini"))& u9 I4 J! @6 p
- {5 l8 W9 p' m, N# j
- MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ X# R2 q; D, p; a0 @; e' k% Z0 k
- return TRUE;
8 T+ [7 V% o2 Q0 _ - }/ h. t2 b* ]; v: \& l
- HANDLE mutex;
' a) P) z7 m9 U4 @8 H - if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
- i8 E6 V5 b! u2 ~9 Q$ l - {
: ]) x* l7 P7 O# x3 X. ~ - if(GetLastError()==ERROR_ALREADY_EXISTS)
; C' L- E1 g+ L: [& J, o - {2 A9 m9 U' |( n+ G- J
- CloseHandle(mutex);! d1 C+ o# {$ [ f+ @+ A9 o
- MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& M+ e* B3 H- C- t& G [0 m
- return TRUE;4 [( [# o5 [ Y2 K2 ?
- }! M. S5 h3 k! t3 @
- }
( x z, R9 ]+ n8 m - CloseHandle(mutex);
/ ~: m. Z, R, H2 C- Y [ - ) C7 K7 K5 G2 y: f2 P, t- z
- if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: v4 f9 ^# R& X
- # Y/ h* r. _" B3 X
- AfxEnableControlContainer();
/ f% Z+ z+ G. c& h, I
9 x7 O4 b, f/ P! D4 N- bCanUpdate=FALSE;# p: o) q& o# t5 l# o
- dwStartUpSteps=1;; z. u; D j% _- A( w
- dwProgramState=AP_NOTHING;
. z1 Y. k6 L& z. e) v! T
4 H. S. G: U0 D7 u7 ^2 x, }4 A- InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
9 m% f( t* h+ K. n% x
/ t3 h$ o2 z3 A. b- Q- // Standard initialization
. R" {: [- c. _. R8 P* n - // If you are not using these features and wish to reduce the size% b1 o, y9 `" j5 ]
- // of your final executable, you should remove from the following
Z: P& R9 U! l- P% E. B - // the specific initialization routines you do not need.
) H2 ?* C9 Q% L8 ]. x* y, K
6 H; N" i5 t7 J1 i- #ifdef _AFXDLL; Q/ j1 d5 X9 Q
- Enable3dControls(); // Call this when using MFC in a shared DLL1 q# F" K2 G, p! m
- #else
' c0 g1 o* z p n* ` - Enable3dControlsStatic(); // Call this when linking to MFC statically
3 s" C7 G) G, W1 ?% R. J - #endif/ n7 @: y- j8 K
- & i, O9 f, C% Q6 D
- dlg=new CRevAppDlg;
; x. S3 M$ p1 t# m - dlg->Create(IDD_REVAPP_DIALOG);3 _5 [+ C3 m$ j$ v0 }( \( I
- dlg->ShowWindow(SW_SHOWNORMAL);
0 O$ H; J, m9 `, z0 C - m_pMainWnd=dlg;# v; h; E3 v. g+ _+ j' Z
- ; b/ v; ~$ D' _( {6 ]$ C
- SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
+ B1 b' ]& S' B - O0 s: t# Z/ I y3 d/ b
- // GdiplusStartupInput gdiplusStartupInput;* f6 E: q) A6 u3 H! B
- // ULONG_PTR gdiplusToken;
. c' e; Q; S" f) Z4 t - // GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
7 K) y$ P! q: d8 {8 N* e% H$ A; u) v
8 V; k6 ]9 m9 k; t& w$ W! D- // CRevAppDlg dlg;8 T4 I5 {& O( e% t
- // int nResponse = dlg.DoModal();" n4 p: e% e) N% ]4 U
- // if (nResponse == IDOK)
2 h8 i% w" s0 {! p4 e; b6 | - // {
" t1 G0 Z0 R. P9 W - // // TODO: Place code here to handle when the dialog is. _: j: | R: K
- // // dismissed with OK
. k! @. g- g! G( P6 z0 N. I - // }+ t! Y+ v; b) C* l1 |% o
- // else if (nResponse == IDCANCEL), s9 g0 q1 R" Q8 r0 p
- // {5 Q7 D3 S* @3 p
- // // TODO: Place code here to handle when the dialog is) Z" U- c2 \0 T& R' W
- // // dismissed with Cancel6 _' W0 \4 X9 B' |9 [
- // }
1 B9 G# B, e8 e" \4 [$ t$ i* G& |+ A
) E7 n: z2 l$ j3 {* @- // Since the dialog has been closed, return FALSE so that we exit the
]" P% s* t% z/ t2 \+ I& g: X - // application, rather than start the application's message pump., s1 v& s0 e; f' K
- return TRUE;
$ c8 i4 \) ` w8 E8 o - }4 E7 i0 h- n$ b. j
0 b3 U. E0 V) U( B% R' d- y3 {1 W- char *CRevAppApp::strtok3(char *pSource,char *token)
* y4 ^, Z, p6 B) b - {
1 F7 T/ Z4 d/ S5 o7 V0 ^ - int i;6 G. Q2 O9 F! U Q/ S
- char *szRet; ?' P2 C% B9 D1 j/ H1 |+ ~ j, f
- ' `$ i5 c1 {5 U `) O) N
- if(pSource) { itoken=0; sztoken=pSource; }
$ t2 m0 N/ H5 o: n1 m, f4 K" p- L - if(sztoken)
. h' O. H: T8 ?0 D0 { k - {
4 n: q+ _' X( M1 d5 P - szRet=&sztoken[itoken];
$ z/ I2 a5 \, D! X+ I - while(sztoken[itoken])
( B5 b8 h6 u7 a1 Q6 `0 A( ?, M. P - {5 ?% I0 p9 F; l# `9 p
- for(i=0;i<(int)strlen(token);i++)9 h+ Z- J6 r* Q% V, s6 V5 H/ l0 P$ x
- {
3 S1 J& [( b/ h8 G( K3 c! S N, G/ ~ - if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
( t3 c+ y7 m$ }( o, G& z$ e - {! F1 m5 ?. l* V7 Y
- sztoken[itoken++]=0;
; C6 i) x# E- ^# @5 t - sztoken[itoken++]=0;
1 `% ~2 |3 U& O, N5 U - return szRet;
. L) P4 T9 u: D0 Z6 {7 V - }
: C. i0 A" T0 g% C - }
; N+ }: |7 X% A - itoken++;4 r) |6 M$ t# s0 T8 I
- }3 X* v' y2 N$ W7 T
- }
+ l8 E; x( ]% ~/ ?' L+ F - return NULL;
0 I8 J; Y+ C. d0 X4 n) m' ? - }+ I, @# p0 d/ s9 [) O- s# G9 P
$ T4 { @ ? X3 L6 J6 \: `& s5 T- void ProcessProc(long Total,long Current)* _+ s9 S( }. A& V" n' R
- {
! A5 M9 ?$ e: x2 h8 V Q6 T - MSG msg;; |- S4 f/ C$ i: b0 y; X. b4 p
- if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 ^8 p) {' F+ D
- theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
4 p6 v2 t4 p2 ?0 L - if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
' x1 [& J+ Q" R; E* | - {$ W3 U: b4 b) P+ P# g/ V( g
- if(!GetMessage(&msg,NULL,0,0))
8 X, ~. ~( t1 ]# y" P& Y4 W - {
( F) Z: \0 e) @ - return;* z' f Y0 {1 h# L; S, U) N5 [
- }9 k1 F A3 K7 V3 f- k
- TranslateMessage(&msg);
6 t" S+ b+ Q0 [3 }& d: ^! G - DispatchMessage(&msg);
; u" \* `6 K5 E) d7 E/ x+ w! c - } ! M7 `$ Q: S; v, H- p
- }
- t% R1 K& x$ Q
7 |; s0 k2 g9 B- BOOL bFirstChar=TRUE;
. \7 Q7 U$ B9 j* \
0 W# \3 |" k/ X' N0 I9 j6 f, Z$ d- BOOL CRevAppApp::OnIdle(LONG lCount)
5 |! G% S: T( c - {1 B/ E+ U _8 {/ j: w
- // TODO: Add your specialized code here and/or call the base class
" q4 `# U' w Y, d - switch(dwProgramState)% M+ s$ L3 P- b) l' r9 z
- {" e* G, v6 q" u. s
- case AP_NOTHING:3 w, d+ i' n" O' n
- switch(dwStartUpSteps)
9 G; R$ a0 ~: g/ c- U1 V% z - {
4 V0 ^1 \" S3 d6 f$ Q4 l M - case 1:! v3 D& G: ~* c
- {+ @$ p& r! S9 k3 B
- int i;
X! P% a4 d) [( z+ d4 ~ - CDC *pCDC=dlg->GetDC();7 J, \% X( K! v# K/ V
- HDC hdcwnd=pCDC->m_hDC;
0 H% b8 m" Z1 X( c - // Graphics graphics(hdcwnd);" O$ q* Z* z* I; k! P
- // Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 Z+ ~4 O( W c( p7 A9 L
- // INT iWidth=bitmap.GetWidth();5 l; y- O, y" X5 J/ L M1 Q
- // INT iHeight=bitmap.GetHeight();
! B; W; V3 t* z! ~ - // Color color,colorTemp;
' J+ g3 H( @; m9 ^. p" T" R) k9 ]; | - // for(INT iRow=0;iRow<iHeight;iRow++)1 |2 f1 m7 h, x5 Z
- // {
) G3 A/ m5 s: A! \# T* i6 X - // for(INT iColumn=0;iColumn<iWidth;iColumn++)
0 z# a2 R* E3 h9 V u8 F/ J - // {
2 F% {% b8 _4 I( b( J - // bitmap.GetPixel(iColumn,iRow,&color);
7 d; g t/ G% d - // colorTemp.SetValue(color.MakeARGB(. c0 r! e+ v4 r" E7 u. a! }
- // (BYTE)(255*iColumn/iWidth),3 O2 T8 ^+ j/ ] |* l3 K
- // color.GetRed(),! O0 F+ c/ M7 a0 T! L* B" ~9 ^1 i! m/ u
- // color.GetGreen(),
! Q) r: E4 n8 n - // color.GetBlue()));
+ `/ S4 ]( r8 P- m+ @ - // bitmap.SetPixel(iColumn,iRow,colorTemp);
) m# Q& H' f. u) P - // } l8 v. T* _- H
- // }
. I, p+ R, a \' ?! ?$ E - // graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% @2 P2 d; _1 e# s: n
- HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 ]9 h, l. ]9 F: D4 Y" ?
- HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 p9 [+ V/ G& ?: @
- HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
: I- {3 Y: {* l6 M/ f# m - for(i=0;i<240;i+=8)
, w$ D c: u9 ^1 U0 k - {
% r. B& j. k, Y: \. P - BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% V' S7 I _1 v% f5 y
- DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
! K: L( M+ b9 C* G( s - BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
+ I; t j, n9 [& F; S - Sleep(33);0 [! Z( ]% W9 f% U4 q# @
- }
' |! d4 f& K1 G! W8 N, q" w: d - Sleep(1000);# `" s7 W+ J9 M" H" B# _& ^$ Z, n
- for(i=240;i>0;i-=8)7 m# w D- n0 u* E) p0 D) M6 n
- {
# y" l+ D+ z3 v) d6 x$ B0 R* q - BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" N: K$ ]# P W; i" l
- DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) n! \- c7 e4 j" d
- BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
' @* s2 e. \/ K3 l/ ^6 O% D - Sleep(33);
8 Q+ v2 h9 A( ?- V$ u - }4 Y) N9 E3 @' t5 u# V: ]7 W
- SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: c6 G0 i& A2 o, c& Q3 E
- dlg->ReleaseDC(pCDC);
$ b9 \3 b, j4 C - DeleteDC(hdctar);5 y! l$ C# L9 w: p) R6 I
- DeleteDC(hdcsrc);! t! H; A9 C7 }/ d, I( R
- DeleteDC(hdcorg);
6 G0 T8 z, e- K9 N/ \' k4 S, o" D - }
4 Z5 }5 o6 }$ y9 M9 E; B( t - // MessageBox(NULL,"Step 1","Elysium",MB_OK);. Q5 R: P+ R+ H- G# L0 }4 c
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝狝竟腹 :"); T+ [# W! P& \, p
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新伺服器代号 :");8 p, r6 n1 E7 I! H* b) Y$ d; w8 q
- else dlg->m_ListText.AddString("Updating the Server ID:");1 a. J- s9 s) h/ P5 W
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
/ W, j3 e, z. Q0 n7 u" l7 A - if(!Dn.Connected())
' c" _1 d0 H7 p5 U$ K% b0 M - {7 F N+ V8 J- N9 I
- dwTotalFiles=1;' b/ M. ]3 v7 Z/ B
- dwDownLoaded=0;
; m2 G1 V8 E8 b$ v4 u - bSilentStep=TRUE;
, ~6 C( `5 q# h) _9 J% {$ c - bCompressed=FALSE;
! G3 R' ]# e0 E% _1 d - strExtLocal.Empty();
$ K; g5 i2 k `) o* h2 D - strFullName="readme.txt";5 r$ {* F: G- h& p
- dwProgramState=AP_CONNECT;
! K) r: d! j, ?2 j. F5 c - }6 N! M0 ?; I6 V. X. B! g
- m_pMainWnd->GetActiveWindow()->Invalidate();: Z# ^- E, U: R, R p3 a1 P$ W4 t
- dwStartUpSteps=2;8 g7 y* j& H$ d
- break;
; ?2 |, B0 V3 m; p- I4 w" a - case 2:0 Z# ?& F; s* R: f( K& i1 V+ C7 ~
- {. w7 o) H; \& a5 N0 D" B
- int iEOF;% I: G1 w" T2 Z3 X( e H5 d
- FILE *fp;
# F$ v3 o; k8 {% q - char szString[512];! Z* Q* m8 a. Y9 f& M6 u
- fp=fopen(".\\DownLoad\\readme.txt","r");
, y) m$ ]" _: f0 S7 c - if(fp)
# ?0 u) y8 v4 d - {
- t3 Z; o4 A7 y P - do9 |! o0 K, @/ B, {7 E
- {1 f+ _& Q+ X/ Y$ ~6 i, P
- iEOF=fscanf(fp,"%s",szString);* y7 T: O4 V/ Q9 ? k" d
- if(strlen(szString))! e% J. T7 O! F2 w: H# u
- {
( M, f" {6 U2 G: N - if(bFirstChar)
8 U* @& L# r" y$ C6 r3 x, `( V - {
% w- W5 O2 z$ B - bFirstChar=FALSE;. o* B3 U- j& K; t+ u2 K4 J# [
- bConnectIsBig5=FALSE;
2 J: L& E+ q2 @! b# e2 b' B - if(*szString=='T') bConnectIsBig5=TRUE;
4 I2 E( j: m0 ^+ ~ G7 G - }( N9 N' A* i: c* A9 I
- if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ p1 q5 J* ^/ n# B4 b( y/ r
- if(!bDisplayIsBig5 && bConnectIsBig5) Big52GBKS(szString,strlen(szString));( C3 U. _. ?( l6 Y$ x. p
- dlg->m_ListText.AddString(szString);$ s1 I" Q' ]- T" w. w
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
+ B, Y3 v) {' ~, T - *szString=0;4 \5 H8 j' p% l6 r( D6 y
- }/ J6 c; C; t. ~+ ?9 e3 D
- } while(iEOF!=EOF);
; X, {! p3 E1 n9 Y - fclose(fp);: D& O6 V0 V9 m, Y$ _' ~9 i
- unlink(".\\DownLoad\\readme.txt");$ n, }8 O- r7 I& n9 S. Q |$ O/ y
- dwStartUpSteps=3;
; t0 ?2 G: x4 S( t - }
& G( F* t! H% w: u - }
! l6 x4 N Z Q: I* I0 G0 ` - break;
% z# J$ E1 C6 {4 X4 G8 v - case 3:" b; `- m' v2 Z( k% H5 [" E
- if(!Dn.Connected())
8 l3 X: N- Y4 `( I. R - {
; p# N/ H' q1 I - // MessageBox(NULL,"Step 2","Elysium",MB_OK); v- U/ ?' r" a7 n3 Q( v0 B
- dwTotalFiles=1;
y( K0 P# j5 t! }& ]! ]8 t+ U9 F - dwDownLoaded=0;
) ]- y: T- i% k$ z - bSilentStep=TRUE;
6 f6 v9 {$ v/ O9 ^ - bCompressed=FALSE;6 E' h3 P% p$ T0 g- a- J5 g. [ Q- R
- strExtLocal.Empty();. Z n" d" N4 i2 W! k) V
- strFullName="checkversion.txt";7 C8 K* q1 }1 [/ ^$ `
- dwProgramState=AP_CONNECT;1 _1 L5 u' y6 ]0 w. N1 T
- }. q w4 `2 f4 v: y7 |5 \
- dwStartUpSteps=4;) Y4 n' H& |9 S" F
- break;
/ }( g% U6 ^1 N1 @: x& W - case 4:
7 K" [) f" T% F8 C+ e9 \6 m - {
3 |- q1 J3 {1 n; ^ v# i - FILE *fp;
% [6 Z. N" X% s - char szString1[128];
# ^: Y5 z- V4 R; h - char szString2[128];) P, w1 S s; x$ m
- fp=fopen(".\\DownLoad\\checkversion.txt","r");
" g* H& U# `/ n" h) B6 ` - if(fp); x% g; v- C" G( q6 [/ {: S9 T
- {2 h4 i) ?9 c! Q5 x
- fscanf(fp,"%s",szString1);
% d3 l' z+ z- J, U' f/ I - fclose(fp);
6 a2 \3 ?- K7 M4 {# i! k+ L- E - fCheckVersion=atof(szString1);
. W; {8 k8 @0 P - fp=fopen(".\\checkversion.dat","r"); z$ G: v# l, i. {
- if(fp)
+ f4 J+ Z) E% [' S; O) d - {2 p$ U2 C$ _1 k1 N3 r4 ?; Y
- fscanf(fp,"%s",szString2);
: `: @9 R$ V0 M6 ~: M - fclose(fp);
3 n! O6 K& i: j1 r& g" g' r - if(atof(szString1)!=atof(szString2))
) d: ]* t* ?- Z; P; o0 u+ v - {8 x9 _6 P/ ~7 {# ^$ R
- if(!Dn.Connected())/ V% g. W t' l! u" ~6 j' d% w
- {( g% L5 z2 \% h# ?4 }3 s0 h7 f: }: j
- bFirstUpdate=TRUE;8 y9 x. ~; }7 a, ^
- dwTotalFiles=1;
% `+ t o, S% p2 Z - dwDownLoaded=0;8 z& _1 g% X4 A, c+ h# t6 p+ d n
- bSilentStep=FALSE;$ M' F% Y3 W; k. @" U4 g
- bCompressed=TRUE;" z/ y1 C! I" B8 {- v' e
- strExtLocal=".\\DownLoad\";
, k6 R$ N0 j- P; R8 W' ]5 G - strFullName="update.txt";
2 a# d/ N6 ^0 k" Q; P1 h+ a3 h$ y - dwProgramState=AP_CONNECT;+ C- M+ ~3 `" _3 ?8 r, Z
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝更い, 叫祔.....");
; m6 @' _& K& g, \0 L - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" O1 T8 N3 }! X, N. F, _! E
- else dlg->m_ListText.AddString("downloading update list.....");5 W9 p. o# y5 b
5 y6 z1 n% a- m0 h9 ?/ f3 |- ?- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 `9 r7 Z* [5 M. |* a
- unlink(".\\DownLoad\\checkversion.txt");
+ ^ k9 L& }" C7 J, l \& a - if( GetFileAttributes("Wsa.zip" )!=-1)# l/ l) T5 H$ H
- {8 A9 d# [5 a+ W* j2 S
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
/ O# B5 n6 j2 J: i1 v4 Q8 x - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
+ m6 r# I; c4 O, p - else dlg->m_ListText.AddString("Unzip Files, Maybe cost 10 minutes");
: a9 y4 G6 d! U. o/ N - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 J/ [: f& C p& x% P
- ; `5 n! r" d0 a" v7 a; L( V1 D
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫瑻み单..........");
# q& z4 v) t( M+ ]: X3 j - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请耐心等待..........");
: P; l/ g' }! b6 ] - else dlg->m_ListText.AddString("Waiting..........");4 J5 T1 x' D* Z, ]1 p3 J
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
3 l9 s- o; F- G9 T" m - }" Q; e5 f1 q4 k2 |. e: ~
- dwStartUpSteps=5;/ G1 O3 r* e; p e1 _8 A+ ?: H
- } \2 s8 X* i" q
- }* k5 }2 [3 j# K; j$ J7 p
- else
. ^0 j/ F$ _0 f - {
% X$ m! u* F+ t0 P - unlink(".\\DownLoad\\checkversion.txt");' a: N2 r' ]' l* a7 p( k+ y
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 `: y5 n- H% ^3 i e) L9 l4 P$ g
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("没有需要更新的资料.....");
% r2 _; \4 {/ _: j; i5 [3 ^ - else dlg->m_ListText.AddString("no new file update.....");; x2 v/ E+ S) F: d d9 G! q/ G7 K
- h* Z0 r& K- o) L9 t a' X' Q
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! [4 F/ D1 G- J3 ?1 l
- dwStartUpSteps=99;
j# X8 r, ?0 ]+ ~8 e7 H _4 j - bFinishUpdated=TRUE;# e* F6 P; n6 ~
- bCanUpdate=TRUE;, C9 h, p! J C ~
- }5 g$ ], l* ]0 `7 I% m+ S2 k+ r% g
- }
; E+ N( {/ g- u4 T- V3 b! w$ ? - else- P# a, u# ?' a1 R% u( s
- {$ {( V9 I6 B. |. W Z2 C% V' D# Z/ o
- if(!Dn.Connected())8 Q% q X) S- Y% @6 c: Z$ g3 c
- {
+ {' E8 f5 h# m# d/ c& {! N - bFirstUpdate=TRUE;' W m- n. o& K4 n" t& I
- dwTotalFiles=1;
. o" ^3 J. a- ~" n2 _ @* a# k - dwDownLoaded=0;
$ B7 y8 K& [; ]. L* Y3 Q& t: |) E( m - bSilentStep=FALSE;
4 |. `2 J# |/ n! |& \3 _$ D - bCompressed=TRUE;2 W% ^3 x) U o/ a" U- ~+ c+ M- Q) K
- strExtLocal=".\\DownLoad\";
0 D9 c# E; m+ T2 z) U g. L - strFullName="update.txt";
5 J/ v: R8 S% A+ A( Z - dwProgramState=AP_CONNECT;/ F2 ?: E) s8 I: ~" Q
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝更い, 叫祔.....");' Z# u: {- O: c9 N
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
$ v M9 L/ b' x5 r5 o& F - else dlg->m_ListText.AddString("downloading update list.....");
. v: o3 i+ S! S - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" h* ?# j( p" Q9 F2 B% ]
- unlink(".\\DownLoad\\checkversion.txt");3 [* o9 b" K% t \
- if(GetFileAttributes("Wsa.zip" )!=-1)
% Z7 L2 i2 b4 E. j/ A4 G1 L3 k - {
% v9 d% n! g9 F& c; [4 M - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃......");! A, p$ ^! C# C9 G. r# y& n" z
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压.....");; ?: n* _$ }8 O
- else dlg->m_ListText.AddString("Unzip Files.....");
. T8 P! x- N( R - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 a" ~; T( T, j- W$ Q1 H% I
- - {1 `6 T) z& |
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫瑻み单..........");
) m9 a- u' Q4 q3 W/ ] - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请耐心等待..........");! [0 H/ B3 q: B
- else dlg->m_ListText.AddString("Waiting..........");: o4 H" E4 q \3 `$ |; v Y f- M6 Z% B
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
I2 \% W( I4 ~- v& L! M* s8 s - }
, v/ @* k7 y$ j( { - dwStartUpSteps=5;
. f" R0 D$ i% \# j$ F1 ~% D- D) u - }5 A5 R; ~% k; P0 Y9 r& W6 }/ O
- }# v. {5 Q0 [9 I8 ]
- }
1 G$ R# `% E0 h2 L: U8 p - else0 H. s5 |7 m5 n! y6 H
- {6 X8 V; [- h# Y7 ], j1 Q4 Z
- dwStartUpSteps=3;4 J% o( I) z; r7 H
- }
. m+ } z* W4 d0 n/ l% d; o - }+ J! |( _; X7 B" R& d$ r$ X
- break;, l* E) c6 [5 L K
- case 5:
+ K* v1 {* R$ Q0 q - {
/ B2 O; x) \3 H) z' W1 i2 p( H - if(GetFileAttributes("Wsa.zip" )!=-1)4 n) |6 \: X; m7 o
- {
/ x8 b- U$ A; Q; g1 j; ^ - int opt_overwrite=1;
/ T. S$ q' s. c3 ^2 k; o5 D - int opt_do_extract_withoutpath=0;; G+ R6 ]/ r K1 x4 `3 m8 i0 \4 @ o
- unzFile uf=NULL;6 S6 W; i* ?' g3 l2 U. p. [4 S: V: Z
- $ z: A2 ?1 ]3 g
- uf=unzOpen("Wsa.zip");; j6 g' r4 t& s0 @! \/ m3 p
- if(uf)% A8 z; p3 Z$ b5 r% b ]
- {
7 x9 `5 P3 p3 N8 X - do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 h( r; \4 @8 k6 {
- unzClose(uf);
6 b W0 f3 l g5 L' V7 e - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 r" ?* f- q& v! h! c6 t6 g T. r. f/ t
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压完成.....");) }0 u! @; T1 o. O
- else dlg->m_ListText.AddString("Unzip OK.....");
% n1 o/ ?- T; Y. R' s8 z, ^9 P* D - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 F1 K: P4 P" u5 T% X/ ~
- }: r3 r* U, B4 W2 @( `; {1 l
- DeleteFile("Wsa.zip" );
; d% N3 B4 J; d1 X: }& L: x - }
* m% Q8 r" S8 }% Q6 u9 `, I
4 x3 h2 c' G0 [- if(CheckLocalVersion())
% D8 A( l7 d) v; A9 k% a( m - {
& ~! `- d; F; f. t! b1 y - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫磅︽絬穝戈.....");; }& I$ n; B8 z- M7 r
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请执行线上更新资料.....");
H% M0 c5 z- d3 G& b - else dlg->m_ListText.AddString("Please update.....");
4 [' x# a3 D. I - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ V* d. I: m5 A2 W5 [# o
- SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% x, E* U7 \+ k$ ~
- dwStartUpSteps=99;) q6 A! K! o. D K7 `3 P3 P
- }8 K" B# U) W1 A3 z+ {1 c
- else( E C8 X4 H4 h7 W. X; v% O' q
- {. C, g7 }* W3 `/ y6 Y2 ]* l
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 ^/ n- m2 S) A- o1 I" _7 z
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("没有需要更新的资料.....");
- `1 ~$ d- ^ Y1 p9 M - else dlg->m_ListText.AddString("no new file update.....");5 j7 s4 U! S, P3 D& t
% y$ f H: S9 _: A- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
9 p+ I% S4 \& q6 d6 x8 V( V4 e - dwStartUpSteps=99;1 t$ \. H! p3 G" k/ L. K& L) x
- bFinishUpdated=TRUE;
: o" q# A8 s% |9 a9 d# D - }
# r+ [" a5 |4 d) i0 Z8 f6 R5 [ - bCanUpdate=TRUE;
$ l% _- b- J2 E2 _% I" a% R - }- ^' O9 g5 s5 D0 y
- break;
0 I! z+ F5 H) |( o) G - case 6:
+ P) y; [2 v- l' Y9 f ~, a - {
; F! B5 J/ b+ d0 p& k- S6 B2 v - if(!UpdateLocalVersion())
% t5 I- ^0 g" p& c! K& N - {
A; B7 H. z6 v - if(bRestartUpdater)0 o* q3 j! q9 P- e, f! H/ S
- {. ] W2 d) J# M2 w, ^2 S
- if ( m_iLanguage == TRADITIONAL_CHINESE ) MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
6 U- c' u F& u& F! i$ ~. L5 l2 L5 q - else if( m_iLanguage == SIMPLIFY_CHINESE ) MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
- r- y3 }& a# n; N: Y, s - else MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
7 u% @$ |- l9 U- R1 R' d$ ^ - DestroyWindow(m_pMainWnd->GetSafeHwnd());. p; C0 U/ K2 c3 r
- dwStartUpSteps=99;
; {8 [# z3 D D1 H2 j - }
/ K! F" p1 A& j5 P% ~ - else6 u' } c/ D8 Y- C. J/ i
- {
' K# o6 g1 |- F3 X, S2 A - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝戈竒ЧΘ.....");
: L: V5 X6 I' L1 Y1 Q1 Z - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新的资料已经完成.....");
7 b6 v% a$ I' a+ K, \. j. l - else dlg->m_ListText.AddString("updated file ok.....");
$ D1 [7 B0 ?" ~, _6 T' ] - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
' P3 U4 D$ Y$ c3 `4 }7 [ - SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);. H3 e- f: j9 e5 Z* ~$ Q* ^
- dwStartUpSteps=7;; C* | Y/ r9 J; Y0 G
- bFinishUpdated=TRUE;
8 v9 M/ |, p0 A5 a - }
- M; V) c1 W. c6 U - }
+ x8 L9 z3 d H1 L: q- }6 A- W6 m - else
# N- N& J( X' B& x5 R8 C* @ - {
, i( i$ i' {. a& { - if(bRestartUpdater): _1 J* _2 ]9 b: d
- {
8 f- o# l# u+ Y - if ( m_iLanguage == TRADITIONAL_CHINESE ) MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);# [3 T! {6 m% B- ?
- else if( m_iLanguage == SIMPLIFY_CHINESE ) MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);0 F0 @& E4 ?0 i+ Z' h
- else MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
+ T& n7 e) v' e- r |8 l - DestroyWindow(m_pMainWnd->GetSafeHwnd());
5 N7 r" M3 n3 f: T" m! l - dwStartUpSteps=99;
+ o% A: `, L0 y& ? - }
' }; v4 q: a y' }% W# k0 y - }
, y2 [) w+ j" |/ ?! X - }
; ]1 K/ a3 w5 q - break;
5 H( u4 }- a6 X! v8 G - case 7:
1 v# M# X/ w) h - {
3 _( y: Y+ q, ~- U$ K) C, O - char szExecuteFile[14]="Bf_Client.exe";" h$ @ {0 H9 A* c8 ^, x5 u
- if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");8 N7 m. ^' b/ e. k% ~# {
- if(m_iLanguage==TRADITIONAL_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
! ?" J" w, _1 L; Q6 ~& w: v - else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);
8 W5 [8 w9 s% g* D - else ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);7 G" t: |& ?8 m- y% e5 l4 }
- DestroyWindow(m_pMainWnd->GetSafeHwnd());& Y: f- E4 s( t7 T; O- o
- dwStartUpSteps=99;2 E) O3 [7 E( j
- }
- W- G! F) f3 R) r6 t - break;9 u0 z, F6 g2 e
- //add by cece
- ?: B& l$ S1 q" b) @8 S8 e' O - case 8:; I& I* k" [( g( j$ x# Q# D
- {
- y; k0 i9 G" b* ?' e1 p! ~6 a - if(!Dn.Connected())
* e' _1 S* e/ q( T3 O - {( F: @, G6 X: { B6 Y
- dwTotalFiles=1;
) C4 Z6 z0 A1 c* U( ^: _ - dwDownLoaded=0;
" S0 A3 Q p# I. B/ _ - bSilentStep=TRUE;
0 D- ~( d( P( g. S - bCompressed=TRUE;
7 o" O0 [ A4 K N% q - strExtLocal.Empty();5 P3 I+ I; y3 k! j' N% M, s
- strFullName="download/CRCTable.txt";( U- A3 O; V) v" ]1 e# ?
- dwProgramState=AP_CONNECT;- K( Y2 \$ u/ o& N
- }; _+ d) B$ \9 W+ }* J
- //4 \& x% S$ ^: i. N( d
- dwStartUpSteps = 9;
" g3 e" ?! Y. C - }
: Y6 U7 n" |2 b - break;- i' ^ _/ A S' V
- case 9:7 |) @4 Q) d. x0 F7 r/ a. m
- {
8 }; i) F" c( ] - if(!Dn.Connected())& k+ U" r$ |+ M3 j" h: y
- {/ Q% p0 [; G9 ~, ]" P! E1 m
- dwTotalFiles=1;9 B. j n" Y) p/ _2 f
- dwDownLoaded=0;& X% V. \, s* b* k
- bSilentStep=TRUE;
1 `& U. q* F+ `* e! D* R - bCompressed=TRUE;
6 O" X2 |& {1 c - strExtLocal.Empty();8 X. `$ h; i8 w
- strFullName="Run.exe";
$ L% @5 v- `4 }+ R: F5 O. @% S2 o Z - dwProgramState=AP_CONNECT;5 `+ i0 \* M7 g1 m6 r8 j/ ]* E
- }
' X4 i, h6 h) ~- F; A& r( s - //
9 s5 f- M% t8 e- t4 L9 q - dwStartUpSteps = 10;
6 ~5 T& R. f. O1 n1 K: e - }/ O1 K4 [( E. F! B$ m1 n
- break;8 ?2 g; q$ V% v9 G7 W- J* d" ^ F
- case 10:+ T# f7 S. \6 y! l
- { R* L% G9 g2 u, C/ u
- if(m_iLanguage==TRADITIONAL_CHINESE) ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);# n) j0 j) A9 Z% F& d, s
- else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);' R0 k$ ~) v/ y2 {
- else ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);1 f9 s" n7 v6 L @ @
- DestroyWindow(m_pMainWnd->GetSafeHwnd());
* `5 _: L" x( ~# t2 }( S - theApp.bClickRunExe = FALSE;6 ]/ U8 e% R1 V- { O# j
- dwStartUpSteps = 99;" z9 h$ u% W& j9 q
- //
! f. D e" W! p4 k# | - }7 U2 u" b) \$ j5 a- T
- break;
' S h7 P1 D6 @' V3 O0 C' m - //
+ P N% Q# U9 ?4 a! n - }# D$ c& J' r; y0 z% i
- break;
% n2 ]8 y, K( `( H% N9 U5 C0 x* E7 |) ^ - case AP_CONNECT:; h1 ^# ~- Z5 O1 T
- if(Dn.InitNWSSock(4096,4096))4 b4 T' L, ]& ~1 E) I$ g
- {/ E9 L% k9 Y& I1 r# H8 `
- char szPathName[MAX_PATH];' `* b* F0 H; \: ~/ y- N6 B) Q) R/ `
- dwLastSize=0;* U, t/ R7 Z. O/ L$ p2 P. P
- GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);- t9 Z9 |# ~8 B# H. {% }7 r
- strFilePath=strExtLocal+szPathName;
. B- k; m2 s9 W& m0 h. }" f - strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));
. | @. C% U! Y - dwResumeNums=0;
) w* X) y0 b8 K5 I; C @6 ` - CString strTempName;, m: V1 n3 W% P7 K8 G0 m8 W. d
- if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);, B& Y5 v$ G- d, z8 [
- CString strCountData;
; N" D5 b0 G! O# t( n% ] - strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);, R9 u. P/ C. _, k. P7 ^9 q+ P
- dlg->m_FileNumber.SetWindowText(strCountData);4 W" M* s) `" `; @
- dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));# S ^# e* l$ g: [
- if(bCompressed)
% g+ _) |/ [6 y9 N - {
# I( \. S" n: x - strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);2 b; H" x+ g2 p1 x
- }
$ ~; S8 H. h8 L" e: `. X5 l0 A- X - else
# O- U: ?/ O6 ^* V: B6 D7 r t! g# L - {# q, h1 V, n( V" i( _( D( z5 n, e
- strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
9 L. v6 c' ^+ h& e3 D- u( D+ O9 r: [ - }
D8 H5 k4 D; s8 S" U - Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
" m! x( y9 Z* W! T - Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());& n( Q \- V* G% f# @" z$ {
- LastTickCount=GetTickCount();
+ Z7 \- D) z3 v) C' V8 s+ d7 N6 t/ a - dwProgramState=AP_SENDING;: J& [6 E7 r' g7 o. @% p
- }1 p3 i; q- \1 S1 I( P* P) Y/ c
- else1 M6 L7 O0 V2 F0 d7 C
- {
0 o+ T" Q8 a4 @- k* B( }5 R0 I0 { - Dn.QuitNWSSock();* U9 N6 Q' n3 Z2 P# F" a
- dwProgramState=AP_NOTHING;
& O' v& [. C& t+ G4 |5 {* g - }" J- f5 r6 V: v' Q2 P
- break;
2 O+ g$ ^) q2 k" x4 x8 c# Q' @ - case AP_RESUMED:
. f4 c" y, ^2 Y% k - if(Dn.InitNWSSock(4096,4096))
- z6 s. T2 S$ d6 j' } - {
! z/ G4 {+ W* Z4 T& t - dwResumeNums++; _8 A; x/ Z0 ^' S5 \
- CString strTempName;
' Q/ Q" C7 T' Y, @% f - if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);) U) g1 |1 v1 L5 @5 _* ]
- CString strCountData;* x/ l, \- v9 I8 s$ U5 k+ z
- strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);
$ h5 w) N8 @2 x" r - dlg->m_FileNumber.SetWindowText(strCountData);
% n/ S5 r$ E& {6 u W - dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
* B8 F' C/ ?& O - if(bCompressed)
) ~- [) A' H. A2 d" N# n - { ^: K0 u) U! |( R2 P
- strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);: Y# a, Y% T3 H& e* [( c9 n
- }; ?* |4 M- S1 e
- else. K% r ~7 D6 ?. c
- {
' |) W1 c$ I: S: }0 [' D - strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);
# P% B5 Q# U# R5 W- X! g# t0 W1 i - }
5 i' U6 ]; Q. N6 t- b" H3 v d% X - Dn.Connect((char*)(LPCTSTR)strHostName,wPort);' M5 L3 H) b, k
- Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());; ?) Y# o! r: m: y1 X
- LastTickCount=GetTickCount();
: |( R+ {% o! y4 ] - dwProgramState=AP_SENDING;9 G S- X9 x5 W. Z4 d
- }
6 p6 d! Y1 G& }9 t - else% [8 b1 e- Q# u8 |# u
- {
& @# \3 I5 R: b# ~' y- D" q# M8 W - Dn.QuitNWSSock();, z" i& i* J( M, o: @& `# Z0 O
- dwProgramState=AP_NOTHING;
3 ^! ] V6 p9 T' ~. A$ `4 h - }
5 U; @2 [$ b- l0 t - break;
1 V8 y- a. |6 D( Q; t3 o - case AP_SENDING:
. a& w$ c2 g+ K( `( U - {* N- T1 R6 P7 ^% @2 e7 c* S# W
- DWORD RecvLen,SendLen;
9 G7 s- c* r( s1 b - if(Dn.NetworkLoop(RecvLen,SendLen))" r( M+ h& a0 }; K' k! `0 j
- {
" Y7 Y. x w/ O8 Z' ~0 F - LastTickCount=GetTickCount();
0 v( w7 n5 f# t2 a* }9 e2 a - if(SendLen)
' M2 P- n5 I; z9 j* P - {$ M1 b/ |1 v& e% P) R
- bReadHeaders=FALSE; P+ ~1 g, y5 a* O) q; X1 A
- dwProgramState=AP_RECEIVE;
, v i6 w7 S) A. \; ] - }
0 W; f' F) b. t# ]7 }2 Q9 ? - }3 @$ R. {/ L. O
- else6 e# p( Z6 p5 C0 j+ Y- p8 ~
- {. w* `- [ z8 Q; X4 u
- if(GetTickCount()-LastTickCount>3000)
6 y. Y# A; `+ [. m* y7 u) w& w - {
3 R1 A9 Q9 Y# V - Dn.QuitNWSSock();. T0 f- k( @3 D8 s5 B. T5 [
- dwProgramState=AP_CONNECT;1 k+ f) E. |+ u! V( |3 d7 e' r, i
- //
! W* K, q2 C; r" E - static DWORD s_dwCount = 0;8 \7 O4 h2 C% b* Y& |# h
- s_dwCount++;4 g& _, S5 J2 |: U6 {3 i
- if( s_dwCount > 10 )/ o0 s! B, T I L8 L8 A
- {# g; v+ u; V% e+ [( [8 t
- if(m_iLanguage==TRADITIONAL_CHINESE) MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚 ","Error",MB_OK|MB_ICONERROR);0 {$ p I0 z) J- [0 }# _
- else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置 ","Error",MB_OK|MB_ICONERROR);
4 G9 x6 J, _& [6 ? - else MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status ","Error",MB_OK|MB_ICONERROR);8 u0 p U9 {/ t& K# d/ Z( G
- DestroyWindow(m_pMainWnd->GetSafeHwnd());$ V1 [+ g. K- F0 z$ D o
- }
! K+ j/ V) c$ D( r2 ? - }1 _5 q9 X1 W7 a: \ ?3 E+ b2 u
- }
" D6 F8 U, G4 }1 F. n/ M+ w - }
1 X# E( S# ?3 g$ W2 E" D) X" I. p8 F* n - break;, P. {$ W n- f/ [2 F
- case AP_RECEIVE:* O/ k7 p5 O4 Y1 p4 W8 w, g
- {
% U/ E/ y( ?$ I, m6 i3 ]( e - int Count;/ R s: Y- ]! @
- DWORD RecvLen,SendLen;
3 e/ T) ]! V2 G- Q - if(Dn.NetworkLoop(RecvLen,SendLen))8 J, G# G! b* z7 F! e$ W
- {/ H4 g, c/ u% g* U; E
- LastTickCount=GetTickCount();
! g" X5 a' N3 k8 g) |: T1 U - if(RecvLen)7 U$ k0 n1 r) G. b4 P. d1 _* d
- {4 V* ` z$ n' \, o$ x( |7 y5 \. X
- if(!bReadHeaders)+ M7 }9 ?8 \. z: O0 p7 K2 U7 W
- {
+ l* z9 k7 A* n* y - char *token=strtok3(Dn.szRecvBuff,"\r\n");
- }% n8 {) c% T( S8 w/ U8 B* x; E - if(token)0 K' r3 I1 G0 u& C* a4 J; L
- {+ V2 E' z& T5 w5 B
- dwFileSize=0;; v! e4 V+ ?% }% T
- for(int i=0;i<(int)strlen(token)-3;i++)
/ \; a) |: a) F: |3 ^5 _ - {+ L6 T+ Y! h3 T8 T7 O! E; g% Q! L
- if(!strnicmp(&token[i],"206",3))
) Y1 C% w( O- b7 ?& a/ \5 q - {
- x3 I6 a9 P) c% o( z$ z( X4 D - if(!bSilentStep)) `& @0 S J+ U" v, G2 X x& o$ o6 i
- {
" J# P4 d% W( |) H: k# k - CString strTempName;* A# p1 S. \3 s
- strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);. R5 o9 i4 P7 r3 W3 v w
- if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);, |! z+ C }& j2 W
- dlg->m_ListText.AddString(strTempName);9 T; {4 U, n, d7 w; G+ T" r& A$ H
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; J; J' r+ X8 e; Y+ @
- }
5 t2 D8 C2 r5 g+ J+ P/ j/ M - bReadHeaders=TRUE;. ^4 } T& x: O3 p" [
- while(token=strtok3(NULL,"\r\n")), X3 j) g8 j) I# q5 B4 N2 v2 m" f) A7 r
- {7 x2 b6 D1 U. m" N" P, _4 ?
- if(!strlen(token)&&dwFileSize)# o6 q6 [* N. C! K( \0 r7 F
- {
, @' h! w6 p4 m) b' Q8 P - Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;' c+ I5 }( Y# N9 `
- if((int)Dn.dwRecvLeft>0)' r/ C" ~; w) q( |0 ]3 D& k' T
- {
) Z" l( g; B$ t# d/ l - if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)! z: B2 O; n& ]4 C4 `
- {
8 n* l) U4 Z. t4 g# y$ p3 { - dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;, L! x7 g" Q' v+ k5 A& p
- Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);* {; f6 ~8 ~( {' _7 P* Y1 u7 I
- }
$ R' Q5 X* H0 E9 U I$ N7 x - memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
* z) g9 z4 _& z$ `1 P/ D - dwCurrSize+=Dn.dwRecvLeft;
1 [8 o, `; Q8 l - Dn.dwRecvLeft-=Dn.dwRecvLeft;8 X; x" F5 a% f) k) G8 D- {7 a) I0 G
- if(dwCurrSize>=dwFileSize) goto SaveFileJump;
1 M4 Z0 U J, G9 ^ - }
* X* U( O) w$ G; N% z; w, c. N' ] - break;
& I. l4 D4 [- O - }& }, F, J0 J% {( J3 V
- else* r" D- X& m5 O7 S+ U/ v
- {, p4 }6 G' r t3 i9 j) ^2 L- e( r
- if(!strnicmp(token,"Content-Length",14))
0 E2 R; e+ i a+ Y8 h" B - {
" [9 a. \1 H% e/ p4 L9 n P; k5 Z9 g - if(!Dn.szCompBuff)
/ W- V' s3 D) M$ m/ n2 c4 c - {1 f0 F1 }. W2 v
- dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
, O- T! l+ f9 m - Dn.szCompBuff=(LPSTR)malloc(dwFileSize);9 N8 `! E2 y- z& ^+ w6 T
- }. I, Q6 u: n9 a4 P( n+ {
- else if(dwFileSize!=dwLastSize)6 r9 F# V" n- N; b; ^, P0 X
- {5 F1 H. v( w6 o" p3 l3 d6 D
- dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;/ @9 N5 B* T1 j
- Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
$ j/ R1 c' q0 t9 m" k0 l) K6 u0 I - }
+ L5 z/ t) k/ Y" @ i - }
d- B+ {2 v. |2 F5 j0 w - }
5 N# @% L, O2 ? - }
1 ^/ G& m9 T# k. Q - break;( E9 G) H: f5 {% Q0 v
- }/ @% k3 v$ i3 [* F- s! g+ p
- if(!strnicmp(&token[i],"200",3))
0 S# h- I( [4 v$ J7 E- k6 K - {/ e, T. N5 G$ I4 ]4 t0 W: u
- if(!bSilentStep)
2 _) d: }" \1 v3 U) }6 j; u - { U2 X: C; X: v/ g
- dlg->m_ListText.AddString(strFileName+".....downloading");' z1 W$ x1 w1 G7 Q4 z+ P
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
% y- W! l E8 }- V8 e1 X' Q1 m - }( y, y7 E, _- [( T3 ~9 ?" {! Q
- dwCurrSize=0;0 U) W# r) y: g0 f, r
- bReadHeaders=TRUE;
- T! U( L" T4 C( J- @- Y8 `- N/ I" n# ~ - while(token=strtok3(NULL,"\r\n"))
! l, K) `2 ~! Z - {, T+ { a* h8 K: q7 V. m
- if(!strlen(token)&&dwFileSize)
: |: ^/ V9 D( ^; e6 A6 { - {% V$ u: P) U1 s/ }
- Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;4 K" Y4 {" }, J" j# ?
- if((int)Dn.dwRecvLeft>0)
- h2 Y" p/ p: j/ x) W6 ? - {2 @8 X7 n) _" f
- if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)7 ]# T K/ v) L6 `) V7 M, Z
- {
. p" v" i' Q) l - dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
; ^; S. G2 l" d: ?, O - Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
2 Z8 _+ s7 U& ]& L - }: a7 }9 V+ h4 Q/ p# s
- memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);+ E% M/ H* {' P+ e! U
- dwCurrSize+=Dn.dwRecvLeft;
* c' v9 O$ h% [0 F - Dn.dwRecvLeft-=Dn.dwRecvLeft;
9 @) X- p2 {, e% L( j) w+ u# X - if(dwCurrSize>=dwFileSize) goto SaveFileJump;/ x- c) ]4 L. X: {) o" [6 V
- }
+ T1 s$ @; o- j3 H2 n% j - break;
9 N3 h1 T/ \& A: e - }
- C0 b' S) I8 G1 W: E - else- r$ x- O5 P ]1 n. w
- {
4 H- [; ~0 _* ~( c - if(!strnicmp(token,"Content-Length",14))
: L5 T4 `7 W/ V& K( H, G( \ - {
* Z6 Y% Y$ f. L* B - if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }8 `4 z. W2 p, z5 o
- dwLastSize=dwFileSize=atoi(&token[16]); W, q3 M+ }, E$ c4 }6 |, ` t
- Dn.szCompBuff=(LPSTR)malloc(dwFileSize);% W$ k# b. U3 K+ l. l! g! @8 g
- }% }3 S- y( T4 M- H( e
- }- U& d; r: r4 ~/ q
- }2 t. S! T* t9 D' e7 L9 X0 r6 |
- break;
, d j5 l3 e8 P- k- _ - }
. @& N( f" x% p! a* w% S/ N4 k - }# Q+ Q+ f6 f9 t' L
- if(!bReadHeaders||!dwFileSize)$ \1 t5 ?6 `5 N
- {
9 [, s: t) q" ^ e8 U - // Wrong Header or Reading File Size Error
8 ~2 P8 W, H, B* i# V& M; T - Dn.QuitNWSSock();
2 C1 R) a) ~2 m5 r& |1 L# F - dwProgramState=AP_NOTHING;
' E$ z. Q5 [& | - CString strTempName;# T& M: r4 {: w' g& i" p& l- H
- strTempName.Format("Navigate %s File Error !",strFullName);! B `( J( h g3 b- s
- MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);5 h) Y- ^' A0 R+ G% H
- bRestartUpdater=TRUE;- r, s; f7 g7 u9 x' i5 U
- }
3 ^( W j5 K$ k: \1 N3 H, o6 b- Y - } A1 @- c, t. e5 S$ n0 x; ~4 T
- else0 s) |( H, z7 E6 [' x v0 W4 R& D
- {
# b" q' d- a* @( C6 e* f - // Have No Header
4 E. P0 J& U) t9 b% e - Dn.QuitNWSSock();
1 J* R( @9 E9 {1 [% A& L# D - dwProgramState=AP_CONNECT;
9 ~; M5 Q; }: y' z - }
B2 i! W' F5 z' h+ l - }7 D" M5 P# ?% w
- else" H+ Z+ Z, h# E# F0 U
- {/ e! M% h$ n, k0 Q' _4 _ k2 [0 g
- // Reading File From Web
# a) B! [& |8 `" N" |% { - if((int)Dn.dwRecvLeft>0)6 X7 V9 j8 f# x3 q/ p: e
- {- w8 ~( Q5 j7 O: q9 j. J
- if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
: c) d) O6 ]. s5 E& w - {
/ _% C2 t- [8 z, T2 I& h0 y - dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;$ u' Q ]9 `: t
- Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
# z/ y5 s- F7 i7 I9 G! [ - }& J+ b- i) b4 R( |6 J
- memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);5 K8 @3 a8 e) a+ M# S V
- dwCurrSize+=RecvLen;+ Q4 A/ a) M) o3 P/ C5 H
- Dn.dwRecvLeft-=RecvLen;) Q" E/ [6 @9 X$ p: r- k
- }1 y6 v* j8 d r% J5 F1 ^
- dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));, @: u2 ^. B' d+ H
- // int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);! V1 @ P8 F% g2 r
- // dlg->m_Process2.SetPos(iRate);
4 e4 `0 e& u" L+ p9 |: a f( M - // if(iRate < 0) iRate = 0;5 j* P* u( |/ x4 f
- // if(iRate > 100) iRate = 100;
! H; Z8 D `) M - // char szShow[5];
( w1 |8 G* D$ D/ r! K& H5 ]* x - // sprintf(szShow,"%d%%",iRate);% _1 p2 p7 D9 ~4 R/ G/ Z& g* ?& e1 _' N
- // dlg->m_SingleRate.SetWindowText(szShow);4 O6 l/ w! ~* D( x, E" j& G/ I* F
- if(dwCurrSize>=dwFileSize) goto SaveFileJump;
m4 d [/ w. R' F( C - }
( g) V) m! _, \9 q - }5 b1 {" z" t0 P6 H# z
- else if(dwCurrSize<dwFileSize)
. G& N0 N# @$ F - {
% |, I$ |* Q0 M! w& Z3 F$ y - // Disconnection But Size Error9 f4 v! l& _. n& [* y( _( U
- Dn.QuitNWSSock(); U. b7 }/ w( t+ r# S0 d
- if(dwCurrSize) dwProgramState=AP_RESUMED;
2 D# o% [% T9 v8 e/ y( Y( v5 U - else dwProgramState=AP_CONNECT;5 e% r5 l. P* b4 R! c
- }
4 S7 F; P. I6 m0 a2 u; x$ Y - else- ?8 o, a: V# c$ l2 j" p/ p* L# ?
- {
& B5 Q# [7 K- J8 v - SaveFileJump: K" `- P; ]4 a# ]1 L
- // End of File and Disconnect
( H4 N9 l$ s+ L; b/ a, ?. a' ] - FILE *Fp;
' }; }! B+ `: c: N - char szTempName[MAX_PATH];
3 K2 S3 F4 ?$ d3 I/ o. a - strcpy(szTempName,".\\DownLoad\");
?& |* K5 \7 P. k* o% h - strcat(szTempName,(char*)(LPCTSTR)strFileName);
$ P5 t r2 s" }+ h1 I6 T - if(bCompressed) strcat(szTempName,".zip");, @( w" ^% e: X: ], q" M6 T# e
- if(dwCurrSize)
4 g6 G1 x5 p- Z3 C4 @, C - {/ V5 @9 i! I9 t @) R, ~$ y
- Fp=fopen(szTempName,"wb");2 @& ]: l, `, E# Y0 I& a# _
- if(!Fp)* I- c& N9 v8 B: w( ]& w- M
- {
* h. j/ i4 H! |& A- c - _mkdir("DownLoad");
" L; s) ?5 E# s, \* x5 c Z - Fp=fopen(szTempName,"wb");
. L: d7 ?& P" N& W6 n* } - }$ L5 O. ~& x5 K8 X1 e1 o
- if(Fp)
9 g( q5 K2 N/ }& _5 \+ A4 C - {
1 ^' ], ]- S. V9 B - fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);
: Y+ v- A; n X; s$ r# {8 f' ] - fclose(Fp);' X W% l/ J9 [/ R
- }/ M6 H0 o2 F5 q. O! S! g
- }
6 Y, e! N1 a/ h2 H' `3 G - if(!bSilentStep)
# k0 U9 T" n" g; m1 B% v ~ - {
* q9 @( K$ e7 X* l6 K: }6 T9 [6 G - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
M7 b+ G7 l4 ^* R - dlg->m_ListText.AddString(strFileName+".....saving");
4 w3 H; w1 L! \/ H0 I - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 w' ~+ P3 O9 o
- }# T+ [( o( v. ?' ]
- if(bCompressed)
9 o$ b, t* I7 T6 ?1 O+ c$ m - {
+ g* A/ o9 ?9 S$ t+ s6 j - int opt_overwrite=1;
3 N( s" g. j$ G7 J; |- J1 | - int opt_do_extract_withoutpath=0;
6 o( X) ?! b# v2 f/ x6 y, y. \ - unzFile uf=NULL;
2 t/ x! h3 @1 T; A - uf=unzOpen(szTempName);
" y- B) T7 `# S/ r5 A - if(uf)
* G: ~; o$ U! p/ l3 m! e - {( ]/ d1 M! b+ w& T+ `+ K0 S% j
- if(!bSilentStep)
' O& d$ p1 g$ c; q - {% v, }$ F( v, A
- if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
* A) y1 M" V6 J; `1 a7 u: O1 a - dlg->m_ListText.AddString(strFileName+".....extracting");3 m% b6 p$ b- w
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( D" I: n" t) |
- }
/ a3 S9 b" a8 {2 j: f1 I+ h - if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
4 `% f4 V2 r/ k }9 F - {1 G* H; H# q, V! L* r8 L: |
- if(!bSilentStep)
2 O. _, X' K4 }9 J- V, E - {
+ S3 T4 I0 o, C) d+ t - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
3 s: P6 x5 z- Z' K - dlg->m_ListText.AddString(strFileName+".....done");3 ~: ~; H- } h8 c
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 L1 @4 _2 \* Y- E8 {7 z( c- R
- }. G& B( H5 W3 I. ]8 K% z% _' d
- dwDownLoaded++;
" K, @) [2 N9 D# o) N" G9 A2 K - dwProgramState=AP_NOTHING;4 A3 s0 j! S" f6 Q& K
- }
. q2 \1 i3 x2 x6 u" U" G - else
4 x8 u7 x5 P) [4 b( u5 I/ [ - {
4 j! t h" i9 `$ A7 k' `" q - dwProgramState=AP_CONNECT;
5 U1 J! o/ a1 Y& u) ?5 p - }* `, J+ K5 y" K1 B+ ^7 k% q
- unzClose(uf);
0 V q5 @* o& U$ d) V0 `+ z - }
- @* M& a9 k, @ - else) q8 T) E5 _, N; C
- {6 Y' ~5 u1 |, [9 M: y
- dwProgramState=AP_CONNECT;
& s, x+ d4 h6 a - }- o3 V4 y5 T7 C9 m
- unlink(szTempName);
% z1 P5 ~$ M# ~: h; O - }$ v" F" ^4 J, H5 C `" A7 u
- else
3 ?* a6 c+ r! B: w# n6 @ - {
; x, v! K, d- e' u! y - if(!bSilentStep)) J" A u9 c. ^. M2 G. f1 K! D8 {
- {
2 W+ U9 H2 A9 Q& t - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);- M0 V4 g' V _ W8 X) f
- dlg->m_ListText.AddString(strFileName+".....done");
' |, w/ d& }% `( f* U$ i - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- w( ^$ S5 N' _$ E
- }
% c7 N! M- d* V) t$ Y1 e8 v - dwDownLoaded++;$ F) o$ z3 k8 P: _8 T; i
- dwProgramState=AP_NOTHING;7 u5 N, o9 u. S: O" \1 }- G
- }/ h7 l7 S3 r5 Z. Z( h. q, P, j
- Dn.QuitNWSSock();& p2 d$ A2 o( a- y" s- q/ s; j$ e
- }9 k4 m% k5 D- O& c! P
- }! n E% V% ~! x# q1 m Z2 d0 w" b
- else
# Z* }& A$ ?. S5 f0 \! j/ b - {
- P. o: x- q4 @7 c$ ~ - // Connect Timeout! k( ?& k# g( S4 Q1 J" w
- if(GetTickCount()-LastTickCount>30000)
- [% t8 Y$ {0 T$ c, m& W' { - {
$ k# \% `; y! g% t0 b- j: s - Dn.QuitNWSSock();. k; B+ b0 n5 x; j2 S" t
- if(dwCurrSize) dwProgramState=AP_RESUMED;+ x% Q7 h% V0 W" B8 }
- else dwProgramState=AP_CONNECT;
/ w# ]$ [6 @8 l! ]: f6 Q4 }! r, F - }
- U& P4 G; r- j, T" H- K4 G" A - }
0 \. g% l0 ~0 E' O+ m - }% i$ c$ l& P. u a3 ~
- break;
r0 d0 w" }; ~$ _. q - }1 H* T, y8 p9 u
- return CWinApp::OnIdle(lCount); G" O3 L; y# g# {) g# C2 f
- }
- ]" y( p# ?; D5 t
複製代碼 其实登陆器也就是这么一回事儿……
% o- J1 ?) A; b( h+ u3 E附件有编译教程和源码
$ ?: j; Z$ q3 q2 W" k) d& Q7 U
" J' E4 e) [- E& @$ N/ d7 B( T# V' v6 g: m- |
|