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