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