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