rewrite call request to structs. 300 000 rps performance
This commit is contained in:
@@ -17,7 +17,7 @@ namespace mROA.Cbor
|
|||||||
{
|
{
|
||||||
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
|
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
|
||||||
{
|
{
|
||||||
var v = (NetworkMessageHeader)value;
|
var v = value as NetworkMessageHeader;
|
||||||
writer.WriteStartArray(3);
|
writer.WriteStartArray(3);
|
||||||
writer.WriteByteString(v.Id.ToByteArray());
|
writer.WriteByteString(v.Id.ToByteArray());
|
||||||
writer.WriteInt32((int)v.MessageType);
|
writer.WriteInt32((int)v.MessageType);
|
||||||
@@ -42,7 +42,7 @@ namespace mROA.Cbor
|
|||||||
{
|
{
|
||||||
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
|
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
|
||||||
{
|
{
|
||||||
var v = value as DefaultCallRequest;
|
var v = (DefaultCallRequest)value;
|
||||||
writer.WriteStartArray(4);
|
writer.WriteStartArray(4);
|
||||||
writer.WriteByteString(v.Id.ToByteArray());
|
writer.WriteByteString(v.Id.ToByteArray());
|
||||||
writer.WriteInt32(v.CommandId);
|
writer.WriteInt32(v.CommandId);
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ namespace mROA.Codegen
|
|||||||
Console.WriteLine("Sending event...");
|
Console.WriteLine("Sending event...");
|
||||||
var request = new DefaultCallRequest
|
var request = new DefaultCallRequest
|
||||||
{
|
{
|
||||||
|
Id = Guid.NewGuid(),
|
||||||
CommandId = <!L commandId>,
|
CommandId = <!L commandId>,
|
||||||
ObjectId = new ComplexObjectIdentifier(index, ownerId),
|
ObjectId = new ComplexObjectIdentifier(index, ownerId),
|
||||||
Parameters = new object[] { <!L transferParameters> }
|
Parameters = new object[] { <!L transferParameters> }
|
||||||
|
|||||||
@@ -13,11 +13,11 @@ namespace mROA.Implementation
|
|||||||
object?[]? Parameters { get; }
|
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 int CommandId { get; set; }
|
||||||
public ComplexObjectIdentifier ObjectId { get; set; } = ComplexObjectIdentifier.Null;
|
public ComplexObjectIdentifier ObjectId { get; set; }
|
||||||
|
|
||||||
public object?[]? Parameters { get; set; }
|
public object?[]? Parameters { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ namespace mROA.Implementation
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await _trustedWriter.WriteAsync(new NetworkMessageHeader(){Data = Array.Empty<byte>()});
|
await _trustedWriter.WriteAsync(new NetworkMessageHeader());
|
||||||
}
|
}
|
||||||
|
|
||||||
PassReconnection();
|
PassReconnection();
|
||||||
|
|||||||
@@ -64,12 +64,12 @@ namespace mROA.Implementation.Frontend
|
|||||||
switch (command.originalType)
|
switch (command.originalType)
|
||||||
{
|
{
|
||||||
case EMessageType.CallRequest:
|
case EMessageType.CallRequest:
|
||||||
HandleCallRequest((command.parced as DefaultCallRequest)!);
|
HandleCallRequest((DefaultCallRequest)command.parced);
|
||||||
break;
|
break;
|
||||||
case EMessageType.ClientDisconnect:
|
case EMessageType.ClientDisconnect:
|
||||||
return;
|
return;
|
||||||
case EMessageType.EventRequest:
|
case EMessageType.EventRequest:
|
||||||
HandleEventRequest((command.parced as DefaultCallRequest)!);
|
HandleEventRequest((DefaultCallRequest)command.parced);
|
||||||
break;
|
break;
|
||||||
case EMessageType.CancelRequest:
|
case EMessageType.CancelRequest:
|
||||||
HandleCancelRequest((command.parced as CancelRequest)!);
|
HandleCancelRequest((command.parced as CancelRequest)!);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using mROA.Abstract;
|
|||||||
|
|
||||||
namespace mROA.Implementation
|
namespace mROA.Implementation
|
||||||
{
|
{
|
||||||
public struct NetworkMessageHeader
|
public class NetworkMessageHeader
|
||||||
{
|
{
|
||||||
private bool Equals(NetworkMessageHeader other)
|
private bool Equals(NetworkMessageHeader other)
|
||||||
{
|
{
|
||||||
@@ -21,10 +21,10 @@ namespace mROA.Implementation
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static readonly NetworkMessageHeader Null = new();
|
public static readonly NetworkMessageHeader Null = new();
|
||||||
// public NetworkMessageHeader()
|
public NetworkMessageHeader()
|
||||||
// {
|
{
|
||||||
// Data = Array.Empty<byte>();
|
Data = Array.Empty<byte>();
|
||||||
// }
|
}
|
||||||
public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit,
|
public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit,
|
||||||
INetworkMessage networkMessage, IEndPointContext? context)
|
INetworkMessage networkMessage, IEndPointContext? context)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,7 +33,9 @@ namespace mROA.Implementation
|
|||||||
private readonly ComplexObjectIdentifier _identifier;
|
private readonly ComplexObjectIdentifier _identifier;
|
||||||
private readonly IRepresentationModule _representationModule;
|
private readonly IRepresentationModule _representationModule;
|
||||||
protected readonly int[] _callIndices;
|
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 };
|
_identifier = new ComplexObjectIdentifier { ContextId = id, OwnerId = representationModule.Id };
|
||||||
_representationModule = representationModule;
|
_representationModule = representationModule;
|
||||||
@@ -57,7 +59,7 @@ namespace mROA.Implementation
|
|||||||
{
|
{
|
||||||
var request = new DefaultCallRequest
|
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);
|
await _representationModule.PostCallMessageAsync(request.Id, EMessageType.CallRequest, request, _context);
|
||||||
@@ -65,7 +67,8 @@ namespace mROA.Implementation
|
|||||||
var localTokenSource = new CancellationTokenSource();
|
var localTokenSource = new CancellationTokenSource();
|
||||||
|
|
||||||
var responseRequestTask = _representationModule.GetSingle(
|
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,
|
localTokenSource.Token,
|
||||||
m => m.MessageType is EMessageType.FinishedCommandExecution ? typeof(FinalCommandExecution<T>) : null,
|
m => m.MessageType is EMessageType.FinishedCommandExecution ? typeof(FinalCommandExecution<T>) : null,
|
||||||
m => m.MessageType is EMessageType.ExceptionCommandExecution
|
m => m.MessageType is EMessageType.ExceptionCommandExecution
|
||||||
@@ -101,14 +104,15 @@ namespace mROA.Implementation
|
|||||||
{
|
{
|
||||||
var request = new DefaultCallRequest
|
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);
|
await _representationModule.PostCallMessageAsync(request.Id, EMessageType.CallRequest, request, _context);
|
||||||
|
|
||||||
var localTokenSource = new CancellationTokenSource();
|
var localTokenSource = new CancellationTokenSource();
|
||||||
|
|
||||||
var responseRequestTask = _representationModule.GetSingle(
|
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,
|
localTokenSource.Token,
|
||||||
m => m.MessageType is EMessageType.FinishedCommandExecution ? typeof(FinalCommandExecution) : null,
|
m => m.MessageType is EMessageType.FinishedCommandExecution ? typeof(FinalCommandExecution) : null,
|
||||||
m => m.MessageType is EMessageType.ExceptionCommandExecution
|
m => m.MessageType is EMessageType.ExceptionCommandExecution
|
||||||
@@ -145,7 +149,7 @@ namespace mROA.Implementation
|
|||||||
{
|
{
|
||||||
var request = new DefaultCallRequest
|
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,
|
await _representationModule.PostCallMessageUntrustedAsync(request.Id, EMessageType.CallRequest, request,
|
||||||
_context);
|
_context);
|
||||||
|
|||||||
Reference in New Issue
Block a user