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