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