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