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