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