⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wndneighbours.cpp

📁 著名的下载软件核心Shareaza
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//
// WndNeighbours.cpp
//
// Copyright (c) Shareaza Development Team, 2002-2004.
// This file is part of SHAREAZA (www.shareaza.com)
//
// Shareaza is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2 of
// the License, or (at your option) any later version.
//
// Shareaza is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Shareaza; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//

#include "StdAfx.h"
#include "Shareaza.h"
#include "Settings.h"
#include "Network.h"
#include "Neighbours.h"
#include "G1Neighbour.h"
#include "G2Neighbour.h"
#include "EDNeighbour.h"
#include "EDPacket.h"
#include "HostCache.h"
#include "Security.h"
#include "LiveList.h"
#include "GProfile.h"
#include "ChatWindows.h"
#include "Skin.h"

#include "WndMain.h"
#include "WndNeighbours.h"
#include "WndPacket.h"
#include "WndBrowseHost.h"
#include "DlgURLCopy.h"
#include "DlgSettingsManager.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_SERIAL(CNeighboursWnd, CPanelWnd, 0)

BEGIN_MESSAGE_MAP(CNeighboursWnd, CPanelWnd)
	//{{AFX_MSG_MAP(CNeighboursWnd)
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_WM_TIMER()
	ON_WM_CONTEXTMENU()
	ON_WM_DESTROY()
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_NEIGHBOURS, OnSortList)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_NEIGHBOURS, OnCustomDrawList)
	ON_UPDATE_COMMAND_UI(ID_NEIGHBOURS_DISCONNECT, OnUpdateNeighboursDisconnect)
	ON_COMMAND(ID_NEIGHBOURS_DISCONNECT, OnNeighboursDisconnect)
	ON_UPDATE_COMMAND_UI(ID_NEIGHBOURS_VIEW_ALL, OnUpdateNeighboursViewAll)
	ON_COMMAND(ID_NEIGHBOURS_VIEW_ALL, OnNeighboursViewAll)
	ON_UPDATE_COMMAND_UI(ID_NEIGHBOURS_VIEW_INCOMING, OnUpdateNeighboursViewIncoming)
	ON_COMMAND(ID_NEIGHBOURS_VIEW_INCOMING, OnNeighboursViewIncoming)
	ON_UPDATE_COMMAND_UI(ID_NEIGHBOURS_VIEW_OUTGOING, OnUpdateNeighboursViewOutgoing)
	ON_COMMAND(ID_NEIGHBOURS_VIEW_OUTGOING, OnNeighboursViewOutgoing)
	ON_UPDATE_COMMAND_UI(ID_NEIGHBOURS_CHAT, OnUpdateNeighboursChat)
	ON_COMMAND(ID_NEIGHBOURS_CHAT, OnNeighboursChat)
	ON_UPDATE_COMMAND_UI(ID_SECURITY_BAN, OnUpdateSecurityBan)
	ON_COMMAND(ID_SECURITY_BAN, OnSecurityBan)
	ON_UPDATE_COMMAND_UI(ID_BROWSE_LAUNCH, OnUpdateBrowseLaunch)
	ON_COMMAND(ID_BROWSE_LAUNCH, OnBrowseLaunch)
	ON_UPDATE_COMMAND_UI(ID_NEIGHBOURS_COPY, OnUpdateNeighboursCopy)
	ON_COMMAND(ID_NEIGHBOURS_COPY, OnNeighboursCopy)
	ON_COMMAND(ID_NEIGHBOURS_SETTINGS, OnNeighboursSettings)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CNeighboursWnd construction

CNeighboursWnd::CNeighboursWnd() : CPanelWnd( TRUE, TRUE )
{
	Create( IDR_NEIGHBOURSFRAME );
}

CNeighboursWnd::~CNeighboursWnd()
{
}

/////////////////////////////////////////////////////////////////////////////
// CNeighboursWnd system message handlers

int CNeighboursWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if ( CPanelWnd::OnCreate( lpCreateStruct ) == -1 ) return -1;
	
	if ( ! m_wndToolBar.Create( this, WS_CHILD|WS_VISIBLE|CBRS_NOALIGN, AFX_IDW_TOOLBAR ) ) return -1;
	m_wndToolBar.SetBarStyle( m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_BORDER_TOP );
	
	m_wndList.Create( WS_VISIBLE|LVS_ICON|LVS_AUTOARRANGE|LVS_REPORT|LVS_SHOWSELALWAYS,
		rectDefault, this, IDC_NEIGHBOURS );
	m_pSizer.Attach( &m_wndList );
	
	m_wndTip.Create( &m_wndList, &Settings.Interface.TipNeighbours );
	m_wndList.SetTip( &m_wndTip );
	
	m_wndList.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE,
		LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_LABELTIP,
		LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_LABELTIP );
	
	CBitmap bmImages;
	bmImages.LoadBitmap( IDB_PROTOCOLS );
	m_gdiImageList.Create( 16, 16, ILC_COLOR16|ILC_MASK, 7, 1 );
	m_gdiImageList.Add( &bmImages, RGB( 0, 255, 0 ) );
	m_wndList.SetImageList( &m_gdiImageList, LVSIL_SMALL );
	
	m_wndList.InsertColumn( 0, _T("Address"), LVCFMT_LEFT, 110, -1 );
	m_wndList.InsertColumn( 1, _T("Port"), LVCFMT_CENTER, 45, 0 );
	m_wndList.InsertColumn( 2, _T("Time"), LVCFMT_CENTER, 80, 1 );
	m_wndList.InsertColumn( 3, _T("Packets"), LVCFMT_CENTER, 80, 2 );
	m_wndList.InsertColumn( 4, _T("Bandwidth"), LVCFMT_CENTER, 80, 3 );
	m_wndList.InsertColumn( 5, _T("Total"), LVCFMT_CENTER, 85, 4 );
	m_wndList.InsertColumn( 6, _T("Flow"), LVCFMT_CENTER, 0, 5 );
	m_wndList.InsertColumn( 7, _T("Leaves"), LVCFMT_CENTER, 45, 6 );
	m_wndList.InsertColumn( 8, _T("Mode"), LVCFMT_CENTER, 60, 7 );
	m_wndList.InsertColumn( 9, _T("Client"), LVCFMT_LEFT, 100, 8 );
	m_wndList.InsertColumn( 10, _T("Name"), LVCFMT_LEFT, 100, 9 );
	
	Settings.LoadList( _T("CNeighboursWnd"), &m_wndList );
	LoadState( _T("CNeighboursWnd"), FALSE );
	
	PostMessage( WM_TIMER, 1 );
	
	OnSkinChange();
	
	return 0;
}

void CNeighboursWnd::OnDestroy() 
{
	Settings.SaveList( _T("CNeighboursWnd"), &m_wndList );	
	SaveState( _T("CNeighboursWnd") );
	CPanelWnd::OnDestroy();
}

/////////////////////////////////////////////////////////////////////////////
// CNeighboursWnd operations

void CNeighboursWnd::Update()
{
	CSingleLock pLock( &Network.m_pSection );
	if ( ! pLock.Lock( 50 ) ) return;
	
	CLiveList pLiveList( 11 );
	
	DWORD nTimeNow = GetTickCount();
	
	for ( POSITION pos = Neighbours.GetIterator() ; pos ; )
	{
		CNeighbour* pNeighbour = Neighbours.GetNext( pos );
		CLiveItem* pItem = pLiveList.Add( pNeighbour->m_nUnique );
		
		pItem->Set( 0, pNeighbour->m_sAddress );
		pItem->Format( 1, _T("%i"), htons( pNeighbour->m_pHost.sin_port ) );
		
		DWORD nTime = ( nTimeNow - pNeighbour->m_tConnected ) / 1000;
		
		switch ( pNeighbour->m_nState )
		{
		case nrsConnecting:
			pItem->Set( 2, _T("Connecting") );
			break;
		case nrsHandshake1:
		case nrsHandshake2:
		case nrsHandshake3:
			pItem->Set( 2, _T("Handshaking") );
			break;
		case nrsRejected:
			pItem->Set( 2, _T("Rejected") );
			break;
		case nrsClosing:
			pItem->Set( 2, _T("Closing") );
			break;
		case nrsConnected:
			pItem->Format( 2, _T("%i:%.2i:%.2i"), nTime / 3600, ( nTime % 3600 ) / 60, nTime % 60 );
			break;
		default:
			pItem->Set( 2, _T("Unknown") );
			break;
		}
		
		pNeighbour->Measure();
		
		pItem->Format( 3, _T("%i/%i"), pNeighbour->m_nInputCount, pNeighbour->m_nOutputCount );
		pItem->Format( 5, _T("%s/%s"), (LPCTSTR)Settings.SmartVolume( pNeighbour->m_mInput.nTotal, FALSE ), (LPCTSTR)Settings.SmartVolume( pNeighbour->m_mOutput.nTotal, FALSE ) );
		pItem->Format( 6, _T("%i (%i)"), pNeighbour->m_nOutbound, pNeighbour->m_nLostCount );
		
		if ( Settings.General.RatesInBytes )
		{
			pItem->Format( 4, _T("%.3f/%.3f"), (float)pNeighbour->m_mInput.nMeasure / 1024, (float)pNeighbour->m_mOutput.nMeasure / 1024 );
		}
		else
		{
			pItem->Format( 4, _T("%.3f/%.3f"), (float)pNeighbour->m_mInput.nMeasure / 128, (float)pNeighbour->m_mOutput.nMeasure / 128 );
		}
		
		pItem->Set( 9, pNeighbour->m_sUserAgent );
		
		if ( pNeighbour->m_nProtocol == PROTOCOL_G1 )
		{
			CG1Neighbour* pG1 = reinterpret_cast<CG1Neighbour*>(pNeighbour);
			
			switch ( pNeighbour->m_nNodeType )
			{
			case ntNode:
				pItem->Set( 8, _T("G1 Peer") );
				break;
			case ntHub:
				pItem->Set( 8, _T("G1 Ultrapeer") );
				break;
			case ntLeaf:
				pItem->Set( 8, _T("G1 Leaf") );
				break;
			}
			
			pItem->m_nImage = PROTOCOL_G1;
		}
		else if ( pNeighbour->m_nProtocol == PROTOCOL_G2 )
		{
			CG2Neighbour* pG2 = reinterpret_cast<CG2Neighbour*>(pNeighbour);
			
			switch ( pNeighbour->m_nNodeType )
			{
			case ntNode:
				pItem->Set( 8, _T("G2 Peer") );
				break;
			case ntHub:
				pItem->Set( 8, _T("G2 Hub") );
				break;
			case ntLeaf:
				pItem->Set( 8, _T("G2 Leaf") );
				break;
			}
			
			if ( pG2->m_nLeafCount > 0 )
			{
				if ( pG2->m_nLeafLimit > 0 )
				{
					pItem->Format( 7, _T("%i/%i"), pG2->m_nLeafCount, pG2->m_nLeafLimit );
				}
				else
				{
					pItem->Format( 7, _T("%i"), pG2->m_nLeafCount );
				}
			}
			else if ( pG2->m_nNodeType != ntLeaf )
			{
				pItem->Set( 7, _T("?") );
			}
			
			pItem->m_nImage = PROTOCOL_G2;
		}
		else if ( pNeighbour->m_nProtocol == PROTOCOL_ED2K )
		{
			CEDNeighbour* pED2K = reinterpret_cast<CEDNeighbour*>(pNeighbour);
			
			pItem->m_nImage = PROTOCOL_ED2K;
			pItem->Set( 8, _T("eDonkey") );
			pItem->Set( 10, pED2K->m_sServerName );
			
			if ( pED2K->m_nClientID > 0 )
			{
				if ( pED2K->m_nUserLimit > 0 )
				{
					pItem->Format( 7, _T("%i/%i"), pED2K->m_nUserCount, pED2K->m_nUserLimit );
				}
				else
				{
					pItem->Format( 7, _T("%i"), pED2K->m_nUserCount );
				}
				
				pItem->Set( 9, CEDPacket::IsLowID( pED2K->m_nClientID ) ? _T("eDonkey2000 (LowID)") : _T("eDonkey (HighID)") );
			}
			else
			{
				pItem->Set( 9, _T("eDonkey2000 Server") );
			}
		}
		else
		{
			pItem->m_nImage = PROTOCOL_NULL;
		}
		
		if ( pNeighbour->m_pProfile != NULL )
		{
			pItem->Set( 10, pNeighbour->m_pProfile->GetNick() );
		}
	}
	
	pLiveList.Apply( &m_wndList, TRUE );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -