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