diff options
Diffstat (limited to 'MediaBrowser.Networking')
| -rw-r--r-- | MediaBrowser.Networking/Udp/UdpServer.cs | 40 | ||||
| -rw-r--r-- | MediaBrowser.Networking/WebSocket/AlchemyServer.cs | 8 |
2 files changed, 46 insertions, 2 deletions
diff --git a/MediaBrowser.Networking/Udp/UdpServer.cs b/MediaBrowser.Networking/Udp/UdpServer.cs index 9b1c254cf..00eb2a0d1 100644 --- a/MediaBrowser.Networking/Udp/UdpServer.cs +++ b/MediaBrowser.Networking/Udp/UdpServer.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Model.Logging; using MediaBrowser.Networking.Management; using System; using System.Net; @@ -20,6 +21,21 @@ namespace MediaBrowser.Networking.Udp public event EventHandler<UdpMessageReceivedEventArgs> MessageReceived; /// <summary> + /// Gets or sets the logger. + /// </summary> + /// <value>The logger.</value> + private ILogger Logger { get; set; } + + /// <summary> + /// Initializes a new instance of the <see cref="UdpServer" /> class. + /// </summary> + /// <param name="logger">The logger.</param> + public UdpServer(ILogger logger) + { + Logger = logger; + } + + /// <summary> /// Raises the <see cref="E:MessageReceived" /> event. /// </summary> /// <param name="e">The <see cref="UdpMessageReceivedEventArgs" /> instance containing the event data.</param> @@ -54,8 +70,24 @@ namespace MediaBrowser.Networking.Udp private IObservable<UdpReceiveResult> CreateObservable() { return Observable.Create<UdpReceiveResult>(obs => - Observable.FromAsync(() => _udpClient.ReceiveAsync()) - .Subscribe(obs)) + Observable.FromAsync(() => + { + try + { + return _udpClient.ReceiveAsync(); + } + catch (ObjectDisposedException) + { + return Task.FromResult(new UdpReceiveResult(new byte[]{}, new IPEndPoint(IPAddress.Any, 0))); + } + catch (Exception ex) + { + Logger.ErrorException("Error receiving udp message", ex); + return Task.FromResult(new UdpReceiveResult(new byte[] { }, new IPEndPoint(IPAddress.Any, 0))); + } + }) + + .Subscribe(obs)) .Repeat() .Retry() .Publish() @@ -68,6 +100,10 @@ namespace MediaBrowser.Networking.Udp /// <param name="message">The message.</param> private void OnMessageReceived(UdpReceiveResult message) { + if (message.RemoteEndPoint.Port == 0) + { + return; + } var bytes = message.Buffer; OnMessageReceived(new UdpMessageReceivedEventArgs diff --git a/MediaBrowser.Networking/WebSocket/AlchemyServer.cs b/MediaBrowser.Networking/WebSocket/AlchemyServer.cs index 1a3971c7f..b3d5d710e 100644 --- a/MediaBrowser.Networking/WebSocket/AlchemyServer.cs +++ b/MediaBrowser.Networking/WebSocket/AlchemyServer.cs @@ -43,6 +43,12 @@ namespace MediaBrowser.Networking.WebSocket } /// <summary> + /// Gets the port. + /// </summary> + /// <value>The port.</value> + public int Port { get; private set; } + + /// <summary> /// Starts the specified port number. /// </summary> /// <param name="portNumber">The port number.</param> @@ -56,6 +62,8 @@ namespace MediaBrowser.Networking.WebSocket WebSocketServer.Start(); + Port = portNumber; + _logger.Info("Alchemy Web Socket Server started"); } |
