Additional interaction module stopping

This commit is contained in:
2025-04-09 14:11:31 +03:00
parent 2e1be7b7e8
commit bd3ade8a8e
4 changed files with 19 additions and 2 deletions
+1 -1
View File
@@ -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; }
@@ -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();
}
@@ -8,6 +8,7 @@ namespace mROA.Implementation
{
public class NetworkMessageHeader
{
public static readonly NetworkMessageHeader Null = new();
public NetworkMessageHeader()
{
Id = Guid.NewGuid();
@@ -18,6 +18,7 @@ namespace mROA.Implementation
private Stream? _baseStream;
private bool _isConnected = true;
private bool _isInReconnectionState;
private bool _isActive = true;
private TaskCompletionSource<Stream> _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();
}
}
}