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