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