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