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