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