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