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