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