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