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