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