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