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