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