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