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