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