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