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