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