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