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