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