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