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