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