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