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