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