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