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