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