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