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