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