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