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