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