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