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