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