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