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