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