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