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