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