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