aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Integration
diff options
context:
space:
mode:
authorRoy <Roy.mail.net@gmail.com>2022-12-20 13:06:58 +0200
committerRoy <Roy.mail.net@gmail.com>2022-12-20 13:06:58 +0200
commit2daf438fd6902138b4229e21a8d67b02da778599 (patch)
treed91655cbf00b48d48a375bec1e48367809808fd9 /Software/Visual_Studio/Tango.Integration
parent144f4d40b74b552277c12edc6d41b8676440070a (diff)
downloadTango-2daf438fd6902138b4229e21a8d67b02da778599.tar.gz
Tango-2daf438fd6902138b4229e21a8d67b02da778599.zip
Modified TCP machines discovery method to MultiCast.
Diffstat (limited to 'Software/Visual_Studio/Tango.Integration')
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs55
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs5
-rw-r--r--Software/Visual_Studio/Tango.Integration/IntegrationSettings.cs13
3 files changed, 55 insertions, 18 deletions
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
index 694502d2e..5e99dd647 100644
--- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
+++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
@@ -23,6 +23,8 @@ using Tango.PMR.Common;
using Tango.PMR.Integration;
using Tango.Settings;
using Tango.Transport.Adapters;
+using Tango.Transport.Discovery;
+using Tango.Transport.Helpers;
namespace Tango.Integration.ExternalBridge
{
@@ -35,7 +37,6 @@ namespace Tango.Integration.ExternalBridge
private Thread _tcpDiscoveryThread;
private Thread _usbDiscoveryThread;
private Thread _signalRDiscoveryThread;
- private UdpClient _server;
private IntegrationSettings _settings;
private HubConnection _connection;
private IHubProxy _proxy;
@@ -99,13 +100,6 @@ namespace Tango.Integration.ExternalBridge
{
LogManager.Log("External bridge scanner started...");
- if (_server == null)
- {
- _server = new UdpClient();
- _server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
- _server.Client.Bind(new IPEndPoint(IPAddress.Any, _settings.ExternalBridgeServiceDiscoveryPort));
- }
-
IsStarted = true;
foreach (var machine in AvailableMachines.OfType<ExternalBridgeTcpClient>().ToList())
@@ -209,13 +203,40 @@ namespace Tango.Integration.ExternalBridge
{
try
{
- var ClientEp = new IPEndPoint(IPAddress.Any, _settings.ExternalBridgeServiceDiscoveryPort);
- _server.EnableBroadcast = true;
- var ClientRequestData = _server.Receive(ref ClientEp);
+ ExternalBridgeUdpDiscoveryPacket discoveryPacket = null;
+ String address = null;
+
+ if (_settings.ExternalBridgeDiscoveryMethod == DiscoveryMethod.Multicast)
+ {
+ using (UdpClient udpClient = new UdpClient())
+ {
+ udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
+ udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, _settings.ExternalBridgeServiceDiscoveryPort));
+ udpClient.Ttl = 10;
+ udpClient.JoinMulticastGroup(IPAddress.Parse(_settings.ExternalBridgeMulticastGroup), IPAddress.Parse(IPAddressHelper.GetLocalIpAddress()));
+
+ var endPoint = new IPEndPoint(IPAddress.Any, 0);
+ var discoveryData = udpClient.Receive(ref endPoint);
- ExternalBridgeUdpDiscoveryPacket packet = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(ClientRequestData);
+ discoveryPacket = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(discoveryData);
+ address = endPoint.Address.ToString();
+ }
+ }
+ else
+ {
+ using (UdpClient udpClient = new UdpClient())
+ {
+ udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
+ udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, _settings.ExternalBridgeServiceDiscoveryPort));
+ var endPoint = new IPEndPoint(IPAddress.Any, _settings.ExternalBridgeServiceDiscoveryPort);
- String address = ClientEp.Address.ToString();
+ udpClient.EnableBroadcast = true;
+ var discoveryData = udpClient.Receive(ref endPoint);
+
+ discoveryPacket = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(discoveryData);
+ address = endPoint.Address.ToString();
+ }
+ }
//validate service existence using TCP connection.
try
@@ -226,7 +247,7 @@ namespace Tango.Integration.ExternalBridge
}
catch
{
- var disconnected_machine = AvailableMachines.OfType<ExternalBridgeTcpClient>().ToList().FirstOrDefault(x => x.SerialNumber == packet.SerialNumber && x.IPAddress == address);
+ var disconnected_machine = AvailableMachines.OfType<ExternalBridgeTcpClient>().ToList().FirstOrDefault(x => x.SerialNumber == discoveryPacket.SerialNumber && x.IPAddress == address);
if (disconnected_machine != null)
{
@@ -238,14 +259,14 @@ namespace Tango.Integration.ExternalBridge
continue;
}
- if (!AvailableMachines.OfType<ExternalBridgeTcpClient>().ToList().Exists(x => x.SerialNumber == packet.SerialNumber && x.IPAddress == address))
+ if (!AvailableMachines.OfType<ExternalBridgeTcpClient>().ToList().Exists(x => x.SerialNumber == discoveryPacket.SerialNumber && x.IPAddress == address))
{
ExternalBridgeTcpClient newMachine = null;
- var knownMachine = KnownMachines.FirstOrDefault(x => x.SerialNumber == packet.SerialNumber);
+ var knownMachine = KnownMachines.FirstOrDefault(x => x.SerialNumber == discoveryPacket.SerialNumber);
if (knownMachine == null && KnownMachines.Count == 0)
{
- newMachine = new ExternalBridgeTcpClient(packet.SerialNumber, address);
+ newMachine = new ExternalBridgeTcpClient(discoveryPacket.SerialNumber, address);
}
else if (knownMachine != null)
{
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
index 4218f9e9a..6396774ae 100644
--- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
+++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
@@ -40,6 +40,7 @@ namespace Tango.Integration.ExternalBridge
private TcpServer _tcpServer;
private int _discovery_port = 8888; //Will be overridden by settings in constructor..
private int _external_bridge_port = 1984; //Will be overridden by settings in constructor..
+ private String _multicastAddress = "234.55.66.77"; //Will be overridden by settings in constructor..
private HubConnection _connection;
private IHubProxy _proxy;
private bool _isSignalRConnected;
@@ -199,6 +200,7 @@ namespace Tango.Integration.ExternalBridge
_discovery_port = settings.ExternalBridgeServiceDiscoveryPort;
_external_bridge_port = settings.ExternalBridgeServicePort;
+ _multicastAddress = settings.ExternalBridgeMulticastGroup;
_tcpServer = new TcpServer(_external_bridge_port);
_tcpServer.ClientConnected += _tcpServer_ClientConnected;
@@ -234,7 +236,8 @@ namespace Tango.Integration.ExternalBridge
_discoveryService = new UdpDiscoveryService<ExternalBridgeUdpDiscoveryPacket>(_discovery_port, new ExternalBridgeUdpDiscoveryPacket()
{
SerialNumber = Machine.SerialNumber,
- });
+ Guid = Machine.Guid,
+ }) { MulticastGroupAddress = _multicastAddress };
_discoveryService.BeforeBroadcasting -= _discoverySevice_BeforeBroadcasting;
_discoveryService.BeforeBroadcasting += _discoverySevice_BeforeBroadcasting;
diff --git a/Software/Visual_Studio/Tango.Integration/IntegrationSettings.cs b/Software/Visual_Studio/Tango.Integration/IntegrationSettings.cs
index ce6ace32a..20d0b76e4 100644
--- a/Software/Visual_Studio/Tango.Integration/IntegrationSettings.cs
+++ b/Software/Visual_Studio/Tango.Integration/IntegrationSettings.cs
@@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using Tango.Settings;
using Tango.Transport.Adapters;
+using Tango.Transport.Discovery;
namespace Tango.Integration
{
@@ -21,6 +22,16 @@ namespace Tango.Integration
public int ExternalBridgeServiceDiscoveryPort { get; set; }
/// <summary>
+ /// Gets or sets the external bridge multi-cast group address.
+ /// </summary>
+ public String ExternalBridgeMulticastGroup { get; set; }
+
+ /// <summary>
+ /// Gets or sets the discovery method.
+ /// </summary>
+ public DiscoveryMethod ExternalBridgeDiscoveryMethod { get; set; }
+
+ /// <summary>
/// Gets or sets the name of the embedded device.
/// </summary>
public String EmbeddedDeviceName { get; set; }
@@ -42,6 +53,8 @@ namespace Tango.Integration
{
ExternalBridgeServicePort = 1984;
ExternalBridgeServiceDiscoveryPort = 8888;
+ ExternalBridgeMulticastGroup = "234.55.66.77";
+ ExternalBridgeDiscoveryMethod = DiscoveryMethod.Multicast;
EmbeddedDeviceName = "Tango USB Serial Port";
FilterExternalBridgeUsbMachines = false;
EmbeddedSerialBaudRate = UsbSerialBaudRates.BR_115200;