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