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