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