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