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