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)
|
||||
{
|
||||
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);
|
||||
|
||||
@@ -31,6 +31,7 @@ namespace mROA.Codegen
|
||||
Console.WriteLine("Sending event...");
|
||||
var request = new DefaultCallRequest
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
CommandId = <!L commandId>,
|
||||
ObjectId = new ComplexObjectIdentifier(index, ownerId),
|
||||
Parameters = new object[] { <!L transferParameters> }
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace mROA.Implementation
|
||||
}
|
||||
else
|
||||
{
|
||||
await _trustedWriter.WriteAsync(new NetworkMessageHeader(){Data = Array.Empty<byte>()});
|
||||
await _trustedWriter.WriteAsync(new NetworkMessageHeader());
|
||||
}
|
||||
|
||||
PassReconnection();
|
||||
|
||||
@@ -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)!);
|
||||
|
||||
@@ -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<byte>();
|
||||
// }
|
||||
public NetworkMessageHeader()
|
||||
{
|
||||
Data = Array.Empty<byte>();
|
||||
}
|
||||
public NetworkMessageHeader(IContextualSerializationToolKit serializationToolkit,
|
||||
INetworkMessage networkMessage, IEndPointContext? context)
|
||||
{
|
||||
|
||||
@@ -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<T>) : 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);
|
||||
|
||||
Reference in New Issue
Block a user