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