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