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