From bd3ade8a8e267ee80bc2cd8b03abd06c5cec4bdc Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Wed, 9 Apr 2025 14:11:31 +0300 Subject: [PATCH] Additional interaction module stopping --- mROA/Abstract/IInteractionModule.cs | 2 +- .../Frontend/NetworkFrontendBridge.cs | 2 +- mROA/Implementation/NetworkMessageHeader.cs | 1 + .../NextGenerationInteractionModule.cs | 16 ++++++++++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/mROA/Abstract/IInteractionModule.cs b/mROA/Abstract/IInteractionModule.cs index 53cd7ab..d797ae0 100644 --- a/mROA/Abstract/IInteractionModule.cs +++ b/mROA/Abstract/IInteractionModule.cs @@ -5,7 +5,7 @@ using mROA.Implementation; namespace mROA.Abstract { - public interface INextGenerationInteractionModule : IInjectableModule + public interface INextGenerationInteractionModule : IInjectableModule, IDisposable { int ConnectionId { get; set; } public Stream? BaseStream { get; set; } diff --git a/mROA/Implementation/Frontend/NetworkFrontendBridge.cs b/mROA/Implementation/Frontend/NetworkFrontendBridge.cs index 2d0ece6..ca32354 100644 --- a/mROA/Implementation/Frontend/NetworkFrontendBridge.cs +++ b/mROA/Implementation/Frontend/NetworkFrontendBridge.cs @@ -79,7 +79,7 @@ namespace mROA.Implementation.Frontend public void Disconnect() { _ = _interactionModule!.PostMessageAsync(new NetworkMessageHeader(_serialization!, new ClientDisconnect())); - _interactionModule.BaseStream!.Close(); + _interactionModule.Dispose(); _tcpClient.Dispose(); } diff --git a/mROA/Implementation/NetworkMessageHeader.cs b/mROA/Implementation/NetworkMessageHeader.cs index 8eb5149..a75cdb0 100644 --- a/mROA/Implementation/NetworkMessageHeader.cs +++ b/mROA/Implementation/NetworkMessageHeader.cs @@ -8,6 +8,7 @@ namespace mROA.Implementation { public class NetworkMessageHeader { + public static readonly NetworkMessageHeader Null = new(); public NetworkMessageHeader() { Id = Guid.NewGuid(); diff --git a/mROA/Implementation/NextGenerationInteractionModule.cs b/mROA/Implementation/NextGenerationInteractionModule.cs index 16c200d..e9d3a27 100644 --- a/mROA/Implementation/NextGenerationInteractionModule.cs +++ b/mROA/Implementation/NextGenerationInteractionModule.cs @@ -18,6 +18,7 @@ namespace mROA.Implementation private Stream? _baseStream; private bool _isConnected = true; private bool _isInReconnectionState; + private bool _isActive = true; private TaskCompletionSource _reconnection; public NextGenerationInteractionModule() @@ -96,6 +97,10 @@ namespace mROA.Implementation if (await PostMessageInternal(messageHeader)) break; + if (!_isActive) + { + return; + } _isConnected = false; withError = true; await MakeRecovery("OUT"); @@ -142,6 +147,10 @@ namespace mROA.Implementation } catch (Exception ex) { + if (!_isActive) + { + return NetworkMessageHeader.Null; + } withError = true; await MakeRecovery("IN"); } @@ -245,5 +254,12 @@ namespace mROA.Implementation _isInReconnectionState = false; } } + + public void Dispose() + { + _isActive = false; + _currentReceiving?.Dispose(); + _baseStream?.Dispose(); + } } } \ No newline at end of file