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