Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .nuget/nuget.exe
Binary file not shown.
4 changes: 2 additions & 2 deletions src/Lime.Client.Windows/Lime.Client.Windows.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,8 @@
<HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="SmartFormat, Version=2.0.0.0, Culture=neutral, PublicKeyToken=568866805651201f, processorArchitecture=MSIL">
Expand Down
2 changes: 1 addition & 1 deletion src/Lime.Client.Windows/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<package id="Microsoft.Tpl.Dataflow" version="4.5.24" targetFramework="net461" />
<package id="ModernUI.WPF.NoBackButton" version="1.0.5.1-alpha" targetFramework="net461" />
<package id="MvvmLightLibs" version="4.4.32.7" targetFramework="net461" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net461" />
<package id="SmartFormat.NET" version="2.0.0.0" targetFramework="net461" />
<package id="SslCertBinding.Net" version="1.0.2" targetFramework="net461" />
<package id="StackExchange.Redis" version="1.1.608" targetFramework="net461" />
Expand Down
4 changes: 3 additions & 1 deletion src/Lime.Protocol/Listeners/BufferedChannelListener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ public void Start(IEstablishedReceiverChannel channel)
{
throw new InvalidOperationException("The listener is already active");
}
// Dispose the previous cancelled CTS before creating a new one.
_cts?.Dispose();
_cts = new CancellationTokenSource();

MessageListenerTask = CreateListenerTask(
Expand Down Expand Up @@ -81,7 +83,7 @@ public void Stop()
throw new InvalidOperationException("The listener is not active");
}

_cts.Cancel();
_cts.Cancel();
MessageBuffer.Writer.TryComplete();
NotificationBuffer.Writer.TryComplete();
CommandBuffer.Writer.TryComplete();
Expand Down
1 change: 1 addition & 0 deletions src/Lime.Protocol/Network/ChannelBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ protected virtual void Dispose(bool disposing)
{
if (disposing)
{
Transport.Closing -= Transport_Closing;
_receiverChannel.Dispose();
_senderChannel.Dispose();
Transport.DisposeIfDisposable();
Expand Down
1 change: 1 addition & 0 deletions src/Lime.Protocol/Network/EnvelopePipe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ public async Task<Envelope> ReceiveAsync(CancellationToken cancellationToken)
public void Dispose()
{
_pipeCts.Dispose();
_semaphore.Dispose();
}

private Task TraceAsync(string data, DataOperation operation)
Expand Down
8 changes: 7 additions & 1 deletion src/Lime.Protocol/Network/SynchronizedTransportDecorator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Lime.Protocol.Network
/// <summary>
/// Defines a decorator for <see cref="ITransport"/> that synchronizes concurrent <see cref="SendAsync"/> and <see cref="ReceiveAsync"/> calls.
/// </summary>
public sealed class SynchronizedTransportDecorator : ITransport
public sealed class SynchronizedTransportDecorator : ITransport, IDisposable
{
private readonly ITransport _transport;
private readonly SemaphoreSlim _sendSemaphore;
Expand Down Expand Up @@ -105,5 +105,11 @@ public event EventHandler Closed
add => _transport.Closed += value;
remove => _transport.Closed -= value;
}

public void Dispose()
{
_sendSemaphore.Dispose();
_receiveSemaphore.Dispose();
}
}
}
23 changes: 22 additions & 1 deletion src/Lime.Protocol/Network/TransportBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Lime.Protocol.Network
/// <summary>
/// Base class for transport implementation.
/// </summary>
public abstract class TransportBase : ITransport
public abstract class TransportBase : ITransport, IDisposable
{
private bool _isOpen; // TODO: Merge this logic with IsConnected
private bool _closingInvoked;
Expand Down Expand Up @@ -239,5 +239,26 @@ protected virtual void OnClosed()
Closed.RaiseEvent(this, EventArgs.Empty);
}
}

/// <summary>
/// Releases resources used by this transport instance.
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

/// <summary>
/// Releases managed and - optionally - unmanaged resources.
/// </summary>
/// <param name="disposing"><c>true</c> to release managed resources.</param>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_openCloseSemaphore.Dispose();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace Lime.Transport.AspNetCore.Transport
/// <summary>
/// Emulates a channel using the HttpContext to allow the application sending a envelope in the HTTP response.
/// </summary>
internal sealed class HttpContextChannel : ISenderChannel
internal sealed class HttpContextChannel : ISenderChannel, IDisposable
{
private readonly HttpContext _context;
private readonly IEnvelopeSerializer _envelopeSerializer;
Expand Down Expand Up @@ -98,5 +98,10 @@ private void EnsureNotSent()
throw new NotSupportedException("Only one envelope can be sent per request on HTTP transport");
}
}

public void Dispose()
{
_sendSemaphore.Dispose();
}
}
}
2 changes: 2 additions & 0 deletions src/Lime.Transport.Redis/RedisTransport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,8 @@ protected virtual void Dispose(bool disposing)
{
_connectionMultiplexer.Dispose();
}
_semaphore.Dispose();
base.Dispose(disposing);
}
}

Expand Down
1 change: 1 addition & 0 deletions src/Lime.Transport.Redis/RedisTransportListener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ private void HandleReceivedData(RedisChannel channel, RedisValue value)
public void Dispose()
{
_connectionMultiplexer?.Dispose();
_semaphore.Dispose();
}
}
}
6 changes: 4 additions & 2 deletions src/Lime.Transport.Tcp/PipeTcpTransport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,7 @@ protected override Task PerformCloseAsync(CancellationToken cancellationToken)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
Expand All @@ -478,6 +479,7 @@ protected virtual void Dispose(bool disposing)
_optionsSemaphore.Dispose();
_stream?.Dispose();
_envelopePipe.Dispose();
base.Dispose(disposing);
}

_disposed = true;
Expand Down Expand Up @@ -566,11 +568,11 @@ private bool ValidateClientCertificate(
return sslPolicyErrors == SslPolicyErrors.None;
}

private Task CloseWithTimeoutAsync()
private async Task CloseWithTimeoutAsync()
{
using (var cts = new CancellationTokenSource(CloseTimeout))
{
return CloseAsync(cts.Token);
await CloseAsync(cts.Token).ConfigureAwait(false);
}
}
}
Expand Down
7 changes: 6 additions & 1 deletion src/Lime.Transport.Tcp/PipeTcpTransportListener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

namespace Lime.Transport.Tcp
{
public class PipeTcpTransportListener : ITransportListener
public class PipeTcpTransportListener : ITransportListener, IDisposable
{
private readonly X509Certificate2 _serverCertificate;
private readonly IEnvelopeSerializer _envelopeSerializer;
Expand Down Expand Up @@ -181,5 +181,10 @@ public async Task StopAsync(CancellationToken cancellationToken)
_semaphore.Release();
}
}

public void Dispose()
{
_semaphore.Dispose();
}
}
}
6 changes: 4 additions & 2 deletions src/Lime.Transport.Tcp/TcpTransport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -581,6 +581,7 @@ protected override Task PerformCloseAsync(CancellationToken cancellationToken)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
Expand All @@ -592,6 +593,7 @@ protected virtual void Dispose(bool disposing)
_optionsSemaphore.Dispose();
_stream?.Dispose();
_jsonBuffer.Dispose();
base.Dispose(disposing);
}

_disposed = true;
Expand Down Expand Up @@ -640,11 +642,11 @@ private bool ValidateClientCertificate(

private bool CanRead => _stream != null && _stream.CanRead && _tcpClient.Connected;

private Task CloseWithTimeoutAsync()
private async Task CloseWithTimeoutAsync()
{
using (var cts = new CancellationTokenSource(CloseTimeout))
{
return CloseAsync(cts.Token);
await CloseAsync(cts.Token).ConfigureAwait(false);
}
}

Expand Down
7 changes: 6 additions & 1 deletion src/Lime.Transport.Tcp/TcpTransportListener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

namespace Lime.Transport.Tcp
{
public class TcpTransportListener : ITransportListener
public class TcpTransportListener : ITransportListener, IDisposable
{
private readonly X509Certificate2 _serverCertificate;
private readonly IEnvelopeSerializer _envelopeSerializer;
Expand Down Expand Up @@ -189,5 +189,10 @@ public async Task StopAsync(CancellationToken cancellationToken)
_semaphore.Release();
}
}

public void Dispose()
{
_semaphore.Dispose();
}
}
}
5 changes: 3 additions & 2 deletions src/Lime.Transport.WebSocket/PipeWebSocketTransport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ protected virtual void Dispose(bool disposing)
WebSocket.Dispose();
_envelopePipe.Dispose();
_closeSemaphore.Dispose();
base.Dispose(disposing);
}
}

Expand Down Expand Up @@ -241,11 +242,11 @@ private void HandleCloseMessage(ValueWebSocketReceiveResult receiveResult)
_closeStatus = WebSocketCloseStatus.NormalClosure;
}

private Task CloseWithTimeoutAsync()
private async Task CloseWithTimeoutAsync()
{
using (var cts = new CancellationTokenSource(CloseTimeout))
{
return CloseAsync(cts.Token);
await CloseAsync(cts.Token).ConfigureAwait(false);
}
}
}
Expand Down
5 changes: 3 additions & 2 deletions src/Lime.Transport.WebSocket/WebSocketTransport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ protected virtual void Dispose(bool disposing)
WebSocket.Dispose();
_closeSemaphore.Dispose();
_sendReceiveCts.Dispose();
base.Dispose(disposing);
}
}

Expand All @@ -343,11 +344,11 @@ private void HandleCloseMessage(WebSocketReceiveResult receiveResult)
CloseStatus = WebSocketCloseStatus.NormalClosure;
}

private Task CloseWithTimeoutAsync()
private async Task CloseWithTimeoutAsync()
{
using (var cts = new CancellationTokenSource(CloseTimeout))
{
return CloseAsync(cts.Token);
await CloseAsync(cts.Token).ConfigureAwait(false);
}
}

Expand Down
Loading