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