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