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