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