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