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