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