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