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