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