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