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