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