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