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