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