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