Files
ReLibreHardwareMonitor/Hardware/Nic/NicGroup.cs
T
2018-11-19 16:33:05 +01:00

89 lines
2.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
namespace OpenHardwareMonitor.Hardware.Nic
{
internal class NicGroup : IGroup
{
private readonly ISettings _settings;
private List<Nic> _hardware = new List<Nic>();
public NicGroup(ISettings settings)
{
_settings = settings;
ScanNics(settings);
NetworkChange.NetworkAddressChanged += NetworkChange_NetworkAddressChanged;
NetworkChange.NetworkAvailabilityChanged += NetworkChange_NetworkAddressChanged;
}
private void ScanNics(ISettings settings)
{
NetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
_hardware = NetworkInterfaces.Where(DesiredNetworkType)
.Select((x, i) => new Nic(x, settings, i))
.ToList();
}
private void NetworkChange_NetworkAddressChanged(object sender, System.EventArgs e)
{
ScanNics(_settings);
}
private static bool DesiredNetworkType(NetworkInterface nic)
{
switch (nic.NetworkInterfaceType)
{
case NetworkInterfaceType.Loopback:
case NetworkInterfaceType.Tunnel:
case NetworkInterfaceType.Unknown:
return false;
default:
return true;
}
}
public string GetReport()
{
if (NetworkInterfaces == null)
return null;
var report = new StringBuilder();
foreach (Nic hw in _hardware)
{
report.AppendLine(hw.NetworkInterface.Description);
report.AppendLine(hw.NetworkInterface.OperationalStatus.ToString());
report.AppendLine();
foreach (var sensor in hw.Sensors)
{
report.AppendLine(sensor.Name);
report.AppendLine(sensor.Value.ToString() + sensor.SensorType);
report.AppendLine();
}
}
return report.ToString();
}
public IEnumerable<IHardware> Hardware
{
get
{
return _hardware;
}
}
public NetworkInterface[] NetworkInterfaces { get; set; }
public void Close()
{
NetworkChange.NetworkAddressChanged -= NetworkChange_NetworkAddressChanged;
NetworkChange.NetworkAvailabilityChanged -= NetworkChange_NetworkAddressChanged;
foreach (var nic in _hardware)
nic.Close();
}
}
}