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