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