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