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