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