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