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