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