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