aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Udp
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-05-24 15:12:55 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-05-24 15:12:55 -0400
commitf07af448fa11330db93dd7ddcabac37ef9e014c7 (patch)
tree1b52a4f73d674a48258c2f14c94117b96ca4a678 /Emby.Server.Implementations/Udp
parent27c3acb2bfde9025c33f584c759a4038020cb702 (diff)
update main projects
Diffstat (limited to 'Emby.Server.Implementations/Udp')
-rw-r--r--Emby.Server.Implementations/Udp/UdpServer.cs64
1 files changed, 46 insertions, 18 deletions
diff --git a/Emby.Server.Implementations/Udp/UdpServer.cs b/Emby.Server.Implementations/Udp/UdpServer.cs
index 21ef3cab6..8dc1fae4b 100644
--- a/Emby.Server.Implementations/Udp/UdpServer.cs
+++ b/Emby.Server.Implementations/Udp/UdpServer.cs
@@ -139,30 +139,58 @@ namespace Emby.Server.Implementations.Udp
{
_udpClient = _socketFactory.CreateUdpSocket(port);
- Task.Run(() => StartListening());
+ Task.Run(() => BeginReceive());
}
- private async void StartListening()
+ private readonly byte[] _receiveBuffer = new byte[8192];
+
+ private void BeginReceive()
{
- while (!_isDisposed)
+ if (_isDisposed)
{
- try
- {
- var result = await _udpClient.ReceiveAsync(CancellationToken.None).ConfigureAwait(false);
+ return;
+ }
- OnMessageReceived(result);
- }
- catch (ObjectDisposedException)
- {
- }
- catch (OperationCanceledException)
- {
- }
- catch (Exception ex)
+ try
+ {
+ var result = _udpClient.BeginReceive(_receiveBuffer, 0, _receiveBuffer.Length, OnReceiveResult);
+
+ if (result.CompletedSynchronously)
{
- _logger.ErrorException("Error receiving udp message", ex);
+ OnReceiveResult(result);
}
}
+ catch (ObjectDisposedException)
+ {
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error receiving udp message", ex);
+ }
+ }
+
+ private void OnReceiveResult(IAsyncResult result)
+ {
+ if (_isDisposed)
+ {
+ return;
+ }
+
+ try
+ {
+ var socketResult = _udpClient.EndReceive(result);
+
+ OnMessageReceived(socketResult);
+ }
+ catch (ObjectDisposedException)
+ {
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error receiving udp message", ex);
+ }
+
+ BeginReceive();
}
/// <summary>
@@ -239,13 +267,13 @@ namespace Emby.Server.Implementations.Udp
try
{
- await _udpClient.SendWithLockAsync(bytes, bytes.Length, remoteEndPoint, CancellationToken.None).ConfigureAwait(false);
+ await _udpClient.SendToAsync(bytes, 0, bytes.Length, remoteEndPoint, CancellationToken.None).ConfigureAwait(false);
_logger.Info("Udp message sent to {0}", remoteEndPoint);
}
catch (OperationCanceledException)
{
-
+
}
catch (Exception ex)
{