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