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