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