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