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