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