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