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