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