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