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