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