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