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