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