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