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