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