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