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