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