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