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