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