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