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