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