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