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