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