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