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