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