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