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