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