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