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