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