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