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