Skip to content

Commit 269d10f

Browse files
committed
Working on #342 again
1 parent 8930fe6 commit 269d10f

File tree

5 files changed

+34
-5
lines changed

5 files changed

+34
-5
lines changed

src/netstandard/WampSharp/WAMP2/V2/Client/Rpc/WampCallee.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,15 @@ private void InvocationPattern(long requestId, long registrationId, InvocationDe
215215

216216
lock (mLock)
217217
{
218-
mRegistrationsToInvocations.Add(registrationId, requestId);
218+
if (!invocation.IsInvocationCompleted)
219+
{
220+
mRegistrationsToInvocations.Add(registrationId, requestId);
221+
}
222+
}
223+
224+
if (invocation.IsInvocationCompleted)
225+
{
226+
CleanupInvocationData(requestId);
219227
}
220228
}
221229
}

src/netstandard/WampSharp/WAMP2/V2/Rpc/Callee/AsyncLocalRpcOperation.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ protected override IWampCancellableInvocation InnerInvoke<TMessage>(IWampRawRpcO
2222
{
2323
CancellationTokenSourceInvocation result = null;
2424
CancellationToken token = CancellationToken.None;
25+
CancellationTokenSource cancellationTokenSource = null;
2526

2627
if (SupportsCancellation)
2728
{
28-
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
29-
result = new CancellationTokenSourceInvocation(cancellationTokenSource);
29+
cancellationTokenSource = new CancellationTokenSource();
3030
token = cancellationTokenSource.Token;
3131
}
3232

@@ -37,7 +37,12 @@ protected override IWampCancellableInvocation InnerInvoke<TMessage>(IWampRawRpcO
3737
arguments,
3838
argumentsKeywords,
3939
token);
40-
40+
41+
if (SupportsCancellation)
42+
{
43+
result = new CancellationTokenSourceInvocation(task ,cancellationTokenSource);
44+
}
45+
4146
return result;
4247
}
4348

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
using System.Threading;
2+
using System.Threading.Tasks;
23
using WampSharp.V2.Core.Contracts;
34

45
namespace WampSharp.V2.Rpc
56
{
67
internal class CancellationTokenSourceInvocation : IWampCancellableInvocation
78
{
9+
private readonly Task mTask;
810
private readonly CancellationTokenSource mCancellationTokenSource;
911

10-
public CancellationTokenSourceInvocation(CancellationTokenSource cancellationTokenSource)
12+
public CancellationTokenSourceInvocation(Task task,
13+
CancellationTokenSource cancellationTokenSource)
1114
{
15+
mTask = task;
1216
mCancellationTokenSource = cancellationTokenSource;
1317
}
1418

1519
public void Cancel(InterruptDetails details)
1620
{
1721
mCancellationTokenSource.Cancel();
1822
}
23+
24+
public bool IsInvocationCompleted => mTask.IsCompleted;
1925
}
2026
}

src/netstandard/WampSharp/WAMP2/V2/Rpc/Dealer/WampCalleeRpcInvocation.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,13 @@ public void Cancel(InterruptDetails details)
1717
{
1818
Callee.Interrupt(RequestId, details);
1919
}
20+
21+
public bool IsInvocationCompleted
22+
{
23+
get
24+
{
25+
return false;
26+
}
27+
}
2028
}
2129
}

src/netstandard/WampSharp/WAMP2/V2/Rpc/Interfaces/IWampCancellableInvocation.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ namespace WampSharp.V2.Rpc
55
public interface IWampCancellableInvocation
66
{
77
void Cancel(InterruptDetails details);
8+
9+
bool IsInvocationCompleted { get; }
810
}
911
}

0 commit comments

Comments
 (0)