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