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