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