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