From 59645deaa5db1414ef88bb3c3b29386620a1417e Mon Sep 17 00:00:00 2001 From: Rutherther Date: Fri, 20 Jan 2023 16:18:12 +0100 Subject: [PATCH] fix(core): do not react to contracts that errored --- Core/NosSmooth.Core/Contracts/DefaultContract.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Core/NosSmooth.Core/Contracts/DefaultContract.cs b/Core/NosSmooth.Core/Contracts/DefaultContract.cs index 59da9df..7439152 100644 --- a/Core/NosSmooth.Core/Contracts/DefaultContract.cs +++ b/Core/NosSmooth.Core/Contracts/DefaultContract.cs @@ -59,6 +59,8 @@ public class DefaultContract : IContract private bool _unregisterAtWaitingFor; private CancellationTokenSource? _waitCancellationSource; + private bool _shouldReact = true; + /// /// Initializes a new instance of the class. /// @@ -122,6 +124,10 @@ public class DefaultContract : IContract public async Task> Update(TAny data, CancellationToken ct = default) where TAny : notnull { + if (!_shouldReact || !IsRegistered) + { + return ContractUpdateResponse.NotInterested; + } if (!_actions.ContainsKey(CurrentState)) { Unregister(); @@ -131,13 +137,15 @@ public class DefaultContract : IContract var result = await _actions[CurrentState](data, ct); if (!result.IsDefined(out var resultData)) { + _shouldReact = false; _resultError = Result.FromError(result); _waitCancellationSource?.Cancel(); - return Result.FromError(result); + return ContractUpdateResponse.InterestedAndUnregister; } if (resultData.Error is not null) { + _shouldReact = false; _error = resultData.Error; try { -- 2.49.0