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