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