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