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