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