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