diff --git a/mROA.Cbor/IOrdinaryStructureParser.cs b/mROA.Cbor/IOrdinaryStructureParser.cs index 8ceb61e..56c1c4a 100644 --- a/mROA.Cbor/IOrdinaryStructureParser.cs +++ b/mROA.Cbor/IOrdinaryStructureParser.cs @@ -17,7 +17,7 @@ namespace mROA.Cbor { public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization) { - var v = (NetworkMessageHeader)value; + var v = value as NetworkMessageHeader; writer.WriteStartArray(3); writer.WriteByteString(v.Id.ToByteArray()); writer.WriteInt32((int)v.MessageType); @@ -42,7 +42,7 @@ namespace mROA.Cbor { public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization) { - var v = value as DefaultCallRequest; + var v = (DefaultCallRequest)value; writer.WriteStartArray(4); writer.WriteByteString(v.Id.ToByteArray()); writer.WriteInt32(v.CommandId); diff --git a/mROA.Codegen/RemoteTypeBinder.cstmpl b/mROA.Codegen/RemoteTypeBinder.cstmpl index 56e6965..8735464 100644 --- a/mROA.Codegen/RemoteTypeBinder.cstmpl +++ b/mROA.Codegen/RemoteTypeBinder.cstmpl @@ -31,6 +31,7 @@ namespace mROA.Codegen Console.WriteLine("Sending event..."); var request = new DefaultCallRequest { + Id = Guid.NewGuid(), CommandId = , ObjectId = new ComplexObjectIdentifier(index, ownerId), Parameters = new object[] { } diff --git a/mROA/Implementation/CallRequest.cs b/mROA/Implementation/CallRequest.cs index c81ae5f..b965e5b 100644 --- a/mROA/Implementation/CallRequest.cs +++ b/mROA/Implementation/CallRequest.cs @@ -13,11 +13,11 @@ namespace mROA.Implementation object?[]? Parameters { get; } } - public class DefaultCallRequest : ICallRequest + public struct DefaultCallRequest : ICallRequest { - public Guid Id { get; set; } = Guid.NewGuid(); + public Guid Id { get; set; } public int CommandId { get; set; } - public ComplexObjectIdentifier ObjectId { get; set; } = ComplexObjectIdentifier.Null; + public ComplexObjectIdentifier ObjectId { get; set; } public object?[]? Parameters { get; set; } diff --git a/mROA/Implementation/ChannelInteractionModule.cs b/mROA/Implementation/ChannelInteractionModule.cs index 4c9858f..5d71447 100644 --- a/mROA/Implementation/ChannelInteractionModule.cs +++ b/mROA/Implementation/ChannelInteractionModule.cs @@ -127,7 +127,7 @@ namespace mROA.Implementation } else { - await _trustedWriter.WriteAsync(new NetworkMessageHeader(){Data = Array.Empty()}); + await _trustedWriter.WriteAsync(new NetworkMessageHeader()); } PassReconnection(); diff --git a/mROA/Implementation/Frontend/RequestExtractor.cs b/mROA/Implementation/Frontend/RequestExtractor.cs index 3edccaf..437a8f7 100644 --- a/mROA/Implementation/Frontend/RequestExtractor.cs +++ b/mROA/Implementation/Frontend/RequestExtractor.cs @@ -64,12 +64,12 @@ namespace mROA.Implementation.Frontend switch (command.originalType) { case EMessageType.CallRequest: - HandleCallRequest((command.parced as DefaultCallRequest)!); + HandleCallRequest((DefaultCallRequest)command.parced); break; case EMessageType.ClientDisconnect: return; case EMessageType.EventRequest: - HandleEventRequest((command.parced as DefaultCallRequest)!); + HandleEventRequest((DefaultCallRequest)command.parced); break; case EMessageType.CancelRequest: HandleCancelRequest((command.parced as CancelRequest)!); diff --git a/mROA/Implementation/NetworkMessageHeader.cs b/mROA/Implementation/NetworkMessageHeader.cs index 1729499..e97db87 100644 --- a/mROA/Implementation/NetworkMessageHeader.cs +++ b/mROA/Implementation/NetworkMessageHeader.cs @@ -5,7 +5,7 @@ using mROA.Abstract; namespace mROA.Implementation { - public struct NetworkMessageHeader + public class NetworkMessageHeader { private bool Equals(NetworkMessageHeader other) { @@ -21,10 +21,10 @@ namespace mROA.Implementation } public static readonly NetworkMessageHeader Null = new(); - // public NetworkMessageHeader() - // { - // Data = Array.Empty(); - // } + public NetworkMessageHeader() + { + Data = Array.Empty(); + } public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit, INetworkMessage networkMessage, IEndPointContext? context) { diff --git a/mROA/Implementation/RemoteObjectBase.cs b/mROA/Implementation/RemoteObjectBase.cs index 58ad1e5..e6f2b8f 100644 --- a/mROA/Implementation/RemoteObjectBase.cs +++ b/mROA/Implementation/RemoteObjectBase.cs @@ -33,7 +33,9 @@ namespace mROA.Implementation private readonly ComplexObjectIdentifier _identifier; private readonly IRepresentationModule _representationModule; protected readonly int[] _callIndices; - protected RemoteObjectBase(int id, IRepresentationModule representationModule, IEndPointContext context, int[] indices) + + protected RemoteObjectBase(int id, IRepresentationModule representationModule, IEndPointContext context, + int[] indices) { _identifier = new ComplexObjectIdentifier { ContextId = id, OwnerId = representationModule.Id }; _representationModule = representationModule; @@ -57,7 +59,7 @@ namespace mROA.Implementation { var request = new DefaultCallRequest { - CommandId = methodId, ObjectId = _identifier, Parameters = parameters + Id = Guid.NewGuid(), CommandId = methodId, ObjectId = _identifier, Parameters = parameters }; await _representationModule.PostCallMessageAsync(request.Id, EMessageType.CallRequest, request, _context); @@ -65,7 +67,8 @@ namespace mROA.Implementation var localTokenSource = new CancellationTokenSource(); var responseRequestTask = _representationModule.GetSingle( - m => m.MessageType is EMessageType.FinishedCommandExecution or EMessageType.ExceptionCommandExecution, _context, + m => m.MessageType is EMessageType.FinishedCommandExecution or EMessageType.ExceptionCommandExecution, + _context, localTokenSource.Token, m => m.MessageType is EMessageType.FinishedCommandExecution ? typeof(FinalCommandExecution) : null, m => m.MessageType is EMessageType.ExceptionCommandExecution @@ -101,14 +104,15 @@ namespace mROA.Implementation { var request = new DefaultCallRequest { - CommandId = methodId, ObjectId = _identifier, Parameters = parameters + Id = Guid.NewGuid(), CommandId = methodId, ObjectId = _identifier, Parameters = parameters }; await _representationModule.PostCallMessageAsync(request.Id, EMessageType.CallRequest, request, _context); var localTokenSource = new CancellationTokenSource(); var responseRequestTask = _representationModule.GetSingle( - m => m.MessageType is EMessageType.FinishedCommandExecution or EMessageType.ExceptionCommandExecution, _context, + m => m.MessageType is EMessageType.FinishedCommandExecution or EMessageType.ExceptionCommandExecution, + _context, localTokenSource.Token, m => m.MessageType is EMessageType.FinishedCommandExecution ? typeof(FinalCommandExecution) : null, m => m.MessageType is EMessageType.ExceptionCommandExecution @@ -145,7 +149,7 @@ namespace mROA.Implementation { var request = new DefaultCallRequest { - CommandId = methodId, ObjectId = _identifier, Parameters = parameters + Id = Guid.NewGuid(), CommandId = methodId, ObjectId = _identifier, Parameters = parameters }; await _representationModule.PostCallMessageUntrustedAsync(request.Id, EMessageType.CallRequest, request, _context);