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