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