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