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