-
Notifications
You must be signed in to change notification settings - Fork 0
/
Controller.cs
72 lines (61 loc) · 2.54 KB
/
Controller.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System.Collections.Generic;
using System.IO.Ports;
using Modbus.Controllers;
using Modbus.Model;
namespace Modbus
{
public class Controller : RequestController
{
public Controller()
{
LoadPorts();
}
public void LoadPorts()
{
var portsNames = SerialPort.GetPortNames();
foreach (var portName in portsNames)
if (!CheckPortAvailability(portName))
Ports.Add(new SerialPortModel(portName));
DeleteMissingPort(portsNames);
}
private bool CheckPortAvailability(string portName)
{
foreach (var serialPortModel in Ports)
if (serialPortModel.Name == portName)
return true;
return false;
}
private void DeleteMissingPort(string[] portsNames)
{
// Ищем "пропавшие" порты и связанные с ними устройства
List<SerialPortModel> portsToDelete = new List<SerialPortModel>();
List<DeviceModel> devicesToDelete = new List<DeviceModel>();
foreach (var serialPortModel in Ports)
{
// Проверяем, есть ли порт из старого списка в актуальном списке портов
var isFound = false;
foreach (var portName in portsNames)
if (serialPortModel.Name == portName)
{
isFound = true;
break;
}
if (!isFound)
{
// Добавляем порт в список на удаление
portsToDelete.Add(serialPortModel);
// Добавляем устройство в список на удаление
foreach (var device in Devices)
if (device.SerialPortModel == serialPortModel)
devicesToDelete.Add(device);
}
}
// Удаляем устройства, связанные портами не найденными в списке актуальных портов
foreach (var device in devicesToDelete)
Devices.Remove(device);
// Удаляем не найденные порты в списке актуальных портов
foreach (var port in portsToDelete)
Ports.Remove(port);
}
}
}