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