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