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