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