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