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