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