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