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