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