Skip to content

Commit ecc92a3

Browse files
authored
Dispose of WebSocket when done with it (#671)
1 parent 857a178 commit ecc92a3

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

src/Transports.Subscriptions.WebSockets/WebSocketConnection.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,16 @@ public WebSocketConnection(
1818

1919
public async Task Connect()
2020
{
21-
await _server.OnConnect();
22-
await _server.OnDisconnect();
23-
await _transport.CloseAsync();
21+
try
22+
{
23+
await _server.OnConnect();
24+
await _server.OnDisconnect();
25+
await _transport.CloseAsync();
26+
}
27+
finally
28+
{
29+
_transport.Dispose();
30+
}
2431
}
2532
}
2633
}

src/Transports.Subscriptions.WebSockets/WebSocketTransport.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Net.WebSockets;
23
using System.Threading;
34
using System.Threading.Tasks;
@@ -7,7 +8,7 @@
78

89
namespace GraphQL.Server.Transports.WebSockets
910
{
10-
public class WebSocketTransport : IMessageTransport
11+
public class WebSocketTransport : IMessageTransport, IDisposable
1112
{
1213
private readonly WebSocket _socket;
1314

@@ -47,5 +48,10 @@ private Task AbortAsync()
4748
_socket.Abort();
4849
return Task.CompletedTask;
4950
}
51+
52+
public void Dispose()
53+
{
54+
_socket.Dispose();
55+
}
5056
}
5157
}

tests/ApiApprovalTests/GraphQL.Server.Transports.Subscriptions.WebSockets.approved.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ namespace GraphQL.Server.Transports.WebSockets
3939
protected System.Threading.Tasks.Dataflow.IPropagatorBlock<string, GraphQL.Server.Transports.Subscriptions.Abstractions.OperationMessage> CreateReaderJsonTransformer() { }
4040
public void LinkTo(System.Threading.Tasks.Dataflow.ITargetBlock<GraphQL.Server.Transports.Subscriptions.Abstractions.OperationMessage> target) { }
4141
}
42-
public class WebSocketTransport : GraphQL.Server.Transports.Subscriptions.Abstractions.IMessageTransport
42+
public class WebSocketTransport : GraphQL.Server.Transports.Subscriptions.Abstractions.IMessageTransport, System.IDisposable
4343
{
4444
public WebSocketTransport(System.Net.WebSockets.WebSocket socket, GraphQL.IDocumentWriter documentWriter) { }
4545
public System.Net.WebSockets.WebSocketCloseStatus? CloseStatus { get; }
4646
public GraphQL.Server.Transports.Subscriptions.Abstractions.IReaderPipeline Reader { get; }
4747
public GraphQL.Server.Transports.Subscriptions.Abstractions.IWriterPipeline Writer { get; }
4848
public System.Threading.Tasks.Task CloseAsync() { }
49+
public void Dispose() { }
4950
}
5051
public class WebSocketWriterPipeline : GraphQL.Server.Transports.Subscriptions.Abstractions.IWriterPipeline
5152
{

0 commit comments

Comments
 (0)