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