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