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