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