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