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