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