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