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