added a shutdown api method, font size fix and other decouplings

This commit is contained in:
LukePulverenti
2013-02-26 11:10:55 -05:00
parent efdb2f3990
commit 6efd22a3d2
30 changed files with 420 additions and 235 deletions

View File

@@ -1,4 +1,5 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Model.Logging;
using MediaBrowser.Networking.Management;
using System;
using System.Net;
@@ -19,6 +20,21 @@ namespace MediaBrowser.Networking.Udp
/// </summary>
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>
@@ -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

View File

@@ -42,6 +42,12 @@ namespace MediaBrowser.Networking.WebSocket
_logger = logger;
}
/// <summary>
/// Gets the port.
/// </summary>
/// <value>The port.</value>
public int Port { get; private set; }
/// <summary>
/// Starts the specified port number.
/// </summary>
@@ -56,6 +62,8 @@ namespace MediaBrowser.Networking.WebSocket
WebSocketServer.Start();
Port = portNumber;
_logger.Info("Alchemy Web Socket Server started");
}