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