|
|
|
@ -58,10 +58,7 @@ public sealed class AutoDiscoveryHost : BackgroundService
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var udpServers = new List<Task>();
|
|
|
|
|
udpServers.Add(ListenForAutoDiscoveryMessage(IPAddress.Any, IPAddress.Any, stoppingToken));
|
|
|
|
|
|
|
|
|
|
await Task.WhenAll(udpServers).ConfigureAwait(false);
|
|
|
|
|
await ListenForAutoDiscoveryMessage(IPAddress.Any, IPAddress.Any, stoppingToken).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task ListenForAutoDiscoveryMessage(IPAddress listenAddress, IPAddress respondAddress, CancellationToken cancellationToken)
|
|
|
|
@ -109,38 +106,16 @@ public sealed class AutoDiscoveryHost : BackgroundService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var response = new ServerDiscoveryInfo(localUrl, _appHost.SystemId, _appHost.FriendlyName);
|
|
|
|
|
var listenerEndpoint = (IPEndPoint?)broadCastUdpClient.Client.LocalEndPoint;
|
|
|
|
|
var listenerIp = listenerEndpoint?.Address;
|
|
|
|
|
|
|
|
|
|
// Reuse the UdpClient if listener IP equals to responder, otherwise create a new one and respond with that
|
|
|
|
|
if (Equals(listenerIp, responderIp))
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
_logger.LogDebug("Sending AutoDiscovery response");
|
|
|
|
|
await broadCastUdpClient
|
|
|
|
|
.SendAsync(JsonSerializer.SerializeToUtf8Bytes(response).AsMemory(), endpoint, cancellationToken)
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
catch (SocketException ex)
|
|
|
|
|
{
|
|
|
|
|
_logger.LogError(ex, "Error sending response message");
|
|
|
|
|
}
|
|
|
|
|
_logger.LogDebug("Sending AutoDiscovery response");
|
|
|
|
|
await broadCastUdpClient
|
|
|
|
|
.SendAsync(JsonSerializer.SerializeToUtf8Bytes(response).AsMemory(), endpoint, cancellationToken)
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
catch (SocketException ex)
|
|
|
|
|
{
|
|
|
|
|
using var responder = new UdpClient(new IPEndPoint(responderIp, PortNumber));
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
_logger.LogDebug("Sending AutoDiscovery response");
|
|
|
|
|
await responder
|
|
|
|
|
.SendAsync(JsonSerializer.SerializeToUtf8Bytes(response).AsMemory(), endpoint, cancellationToken)
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
catch (SocketException ex)
|
|
|
|
|
{
|
|
|
|
|
_logger.LogError(ex, "Error sending response message");
|
|
|
|
|
}
|
|
|
|
|
_logger.LogError(ex, "Error sending response message");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|