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