📄 wndneighbours.cpp
字号:
//
// 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 + -