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