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