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