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