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