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