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