From 8ce3e74e8112a94773df22827849bf274fc88198 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Sun, 24 Feb 2013 16:53:54 -0500 Subject: More DI --- .../Net/Handlers/BaseSerializationHandler.cs | 19 ++- MediaBrowser.Common/Net/IWebSocket.cs | 2 +- MediaBrowser.Common/Net/NativeWebSocket.cs | 159 --------------------- MediaBrowser.Common/Net/WebSocketConnection.cs | 33 ++++- 4 files changed, 36 insertions(+), 177 deletions(-) delete mode 100644 MediaBrowser.Common/Net/NativeWebSocket.cs (limited to 'MediaBrowser.Common/Net') diff --git a/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs index 293cb6e98a..a00152d784 100644 --- a/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs +++ b/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Serialization; using System; using System.IO; using System.Threading.Tasks; @@ -104,15 +103,15 @@ namespace MediaBrowser.Common.Net.Handlers { return Task.Run(() => { - switch (SerializationFormat) - { - case SerializationFormat.Protobuf: - Kernel.ProtobufSerializer.SerializeToStream(_objectToSerialize, stream); - break; - default: - JsonSerializer.SerializeToStream(_objectToSerialize, stream); - break; - } + //switch (SerializationFormat) + //{ + // case SerializationFormat.Protobuf: + // Kernel.ProtobufSerializer.SerializeToStream(_objectToSerialize, stream); + // break; + // default: + // JsonSerializer.SerializeToStream(_objectToSerialize, stream); + // break; + //} }); } } diff --git a/MediaBrowser.Common/Net/IWebSocket.cs b/MediaBrowser.Common/Net/IWebSocket.cs index 96299e3b2e..3fd4b1241c 100644 --- a/MediaBrowser.Common/Net/IWebSocket.cs +++ b/MediaBrowser.Common/Net/IWebSocket.cs @@ -20,7 +20,7 @@ namespace MediaBrowser.Common.Net /// Gets or sets the receive action. /// /// The receive action. - Action OnReceiveDelegate { get; set; } + Action OnReceiveDelegate { get; set; } /// /// Sends the async. diff --git a/MediaBrowser.Common/Net/NativeWebSocket.cs b/MediaBrowser.Common/Net/NativeWebSocket.cs deleted file mode 100644 index 23f3d4be34..0000000000 --- a/MediaBrowser.Common/Net/NativeWebSocket.cs +++ /dev/null @@ -1,159 +0,0 @@ -using MediaBrowser.Common.Serialization; -using MediaBrowser.Model.Logging; -using System; -using System.IO; -using System.Net.WebSockets; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Common.Net -{ - /// - /// Class NativeWebSocket - /// - public class NativeWebSocket : IWebSocket - { - /// - /// The logger - /// - private readonly ILogger _logger; - - /// - /// Gets or sets the web socket. - /// - /// The web socket. - private WebSocket WebSocket { get; set; } - - /// - /// Initializes a new instance of the class. - /// - /// The socket. - /// The logger. - /// socket - public NativeWebSocket(WebSocket socket, ILogger logger) - { - if (socket == null) - { - throw new ArgumentNullException("socket"); - } - - if (logger == null) - { - throw new ArgumentNullException("logger"); - } - - _logger = logger; - WebSocket = socket; - - Receive(); - } - - /// - /// Gets or sets the state. - /// - /// The state. - public WebSocketState State - { - get { return WebSocket.State; } - } - - /// - /// Receives this instance. - /// - private async void Receive() - { - while (true) - { - byte[] bytes; - - try - { - bytes = await ReceiveBytesAsync(CancellationToken.None).ConfigureAwait(false); - } - catch (WebSocketException ex) - { - _logger.ErrorException("Error reveiving web socket message", ex); - - break; - } - - if (OnReceiveDelegate != null) - { - using (var memoryStream = new MemoryStream(bytes)) - { - try - { - var messageResult = JsonSerializer.DeserializeFromStream(memoryStream); - - OnReceiveDelegate(messageResult); - } - catch (Exception ex) - { - _logger.ErrorException("Error processing web socket message", ex); - } - } - } - } - } - - /// - /// Receives the async. - /// - /// The cancellation token. - /// Task{WebSocketMessageInfo}. - /// Connection closed - private async Task ReceiveBytesAsync(CancellationToken cancellationToken) - { - var bytes = new byte[4096]; - var buffer = new ArraySegment(bytes); - - var result = await WebSocket.ReceiveAsync(buffer, cancellationToken).ConfigureAwait(false); - - if (result.CloseStatus.HasValue) - { - throw new WebSocketException("Connection closed"); - } - - return buffer.Array; - } - - /// - /// Sends the async. - /// - /// The bytes. - /// The type. - /// if set to true [end of message]. - /// The cancellation token. - /// Task. - public Task SendAsync(byte[] bytes, WebSocketMessageType type, bool endOfMessage, CancellationToken cancellationToken) - { - return WebSocket.SendAsync(new ArraySegment(bytes), type, true, cancellationToken); - } - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - Dispose(true); - } - - /// - /// Releases unmanaged and - optionally - managed resources. - /// - /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - protected virtual void Dispose(bool dispose) - { - if (dispose) - { - WebSocket.Dispose(); - } - } - - /// - /// Gets or sets the receive action. - /// - /// The receive action. - public Action OnReceiveDelegate { get; set; } - } -} diff --git a/MediaBrowser.Common/Net/WebSocketConnection.cs b/MediaBrowser.Common/Net/WebSocketConnection.cs index ab691c823a..6b22ef78ec 100644 --- a/MediaBrowser.Common/Net/WebSocketConnection.cs +++ b/MediaBrowser.Common/Net/WebSocketConnection.cs @@ -1,7 +1,7 @@ -using MediaBrowser.Common.Serialization; +using System.IO; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; using System; -using System.Net; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; @@ -38,14 +38,21 @@ namespace MediaBrowser.Common.Net /// private readonly ILogger _logger; + /// + /// The _json serializer + /// + private readonly IJsonSerializer _jsonSerializer; + /// /// Initializes a new instance of the class. /// /// The socket. /// The remote end point. /// The receive action. + /// The json serializer. + /// The logger. /// socket - public WebSocketConnection(IWebSocket socket, string remoteEndPoint, Action receiveAction, ILogger logger) + public WebSocketConnection(IWebSocket socket, string remoteEndPoint, Action receiveAction, IJsonSerializer jsonSerializer, ILogger logger) { if (socket == null) { @@ -59,11 +66,16 @@ namespace MediaBrowser.Common.Net { throw new ArgumentNullException("receiveAction"); } + if (jsonSerializer == null) + { + throw new ArgumentNullException("jsonSerializer"); + } if (logger == null) { throw new ArgumentNullException("logger"); } + _jsonSerializer = jsonSerializer; _socket = socket; _socket.OnReceiveDelegate = info => OnReceive(info, receiveAction); RemoteEndPoint = remoteEndPoint; @@ -73,12 +85,19 @@ namespace MediaBrowser.Common.Net /// /// Called when [receive]. /// - /// The info. + /// The bytes. /// The callback. - private void OnReceive(WebSocketMessageInfo info, Action callback) + private void OnReceive(byte[] bytes, Action callback) { try { + WebSocketMessageInfo info; + + using (var memoryStream = new MemoryStream(bytes)) + { + info = _jsonSerializer.DeserializeFromStream(memoryStream); + } + info.Connection = this; callback(info); @@ -103,8 +122,8 @@ namespace MediaBrowser.Common.Net { throw new ArgumentNullException("message"); } - - var bytes = JsonSerializer.SerializeToBytes(message); + + var bytes = _jsonSerializer.SerializeToBytes(message); return SendAsync(bytes, cancellationToken); } -- cgit v1.2.3