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