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