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