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