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