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