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