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