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