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