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