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