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