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