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