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