Skip to content

Commit 732751d

Browse files
Merge pull request #158 from OmniSharp/fix/delegating-handlers
Added cancellation support to the delegating handlers
2 parents 6bf47e5 + 5cbc2c2 commit 732751d

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

src/JsonRpc/DelegatingRequestHandler.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,36 @@ namespace OmniSharp.Extensions.JsonRpc
77
{
88
public class DelegatingRequestHandler<T, TResponse> : IJsonRpcRequestHandler<DelegatingRequest<T>, JToken>
99
{
10-
private readonly Func<T, Task<TResponse>> _handler;
10+
private readonly Func<T, CancellationToken, Task<TResponse>> _handler;
1111
private readonly ISerializer _serializer;
1212

13-
public DelegatingRequestHandler(ISerializer serializer, Func<T, Task<TResponse>> handler)
13+
public DelegatingRequestHandler(ISerializer serializer, Func<T, CancellationToken, Task<TResponse>> handler)
1414
{
1515
_handler = handler;
1616
_serializer = serializer;
1717
}
1818

1919
public async Task<JToken> Handle(DelegatingRequest<T> request, CancellationToken cancellationToken)
2020
{
21-
var response = await _handler.Invoke(request.Value);
21+
var response = await _handler.Invoke(request.Value, cancellationToken);
2222
return JToken.FromObject(response, _serializer.JsonSerializer);
2323
}
2424
}
2525

2626
public class DelegatingRequestHandler<T> : IJsonRpcRequestHandler<DelegatingRequest<T>, JToken>
2727
{
28-
private readonly Func<T, Task> _handler;
28+
private readonly Func<T, CancellationToken, Task> _handler;
2929
private readonly ISerializer _serializer;
3030

31-
public DelegatingRequestHandler(ISerializer serializer, Func<T, Task> handler)
31+
public DelegatingRequestHandler(ISerializer serializer, Func<T, CancellationToken, Task> handler)
3232
{
3333
_handler = handler;
3434
_serializer = serializer;
3535
}
3636

3737
public async Task<JToken> Handle(DelegatingRequest<T> request, CancellationToken cancellationToken)
3838
{
39-
await _handler.Invoke(request.Value);
39+
await _handler.Invoke(request.Value, cancellationToken);
4040
return JValue.CreateNull();
4141
}
4242
}

src/JsonRpc/JsonRpcServerExtensions.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Threading;
23
using System.Threading.Tasks;
34
using Microsoft.Extensions.DependencyInjection;
45

@@ -10,6 +11,14 @@ public static IDisposable OnRequest<T, TResponse>(
1011
this IJsonRpcHandlerRegistry registry,
1112
string method,
1213
Func<T, Task<TResponse>> handler)
14+
{
15+
return registry.AddHandler(method, _ => new DelegatingRequestHandler<T, TResponse>(_.GetRequiredService<ISerializer>(), (x, ct) => handler(x)));
16+
}
17+
18+
public static IDisposable OnRequest<T, TResponse>(
19+
this IJsonRpcHandlerRegistry registry,
20+
string method,
21+
Func<T, CancellationToken, Task<TResponse>> handler)
1322
{
1423
return registry.AddHandler(method, _ => new DelegatingRequestHandler<T, TResponse>(_.GetRequiredService<ISerializer>(), handler));
1524
}
@@ -18,6 +27,14 @@ public static IDisposable OnRequest<T>(
1827
this IJsonRpcHandlerRegistry registry,
1928
string method,
2029
Func<T, Task> handler)
30+
{
31+
return registry.AddHandler(method, _ => new DelegatingRequestHandler<T>(_.GetRequiredService<ISerializer>(), (x, ct) => handler(x)));
32+
}
33+
34+
public static IDisposable OnRequest<T>(
35+
this IJsonRpcHandlerRegistry registry,
36+
string method,
37+
Func<T, CancellationToken, Task> handler)
2138
{
2239
return registry.AddHandler(method, _ => new DelegatingRequestHandler<T>(_.GetRequiredService<ISerializer>(), handler));
2340
}

0 commit comments

Comments
 (0)