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