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