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