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