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