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