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