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