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