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