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