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