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