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