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