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