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