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