решены баги и один шаг до обратного вызова
This commit is contained in:
@@ -18,8 +18,8 @@ public class PrinterFactory : IPrinterFactory
|
||||
|
||||
public void Register(SharedObject<IPrinter> printer)
|
||||
{
|
||||
Console.WriteLine("Registered printer");
|
||||
_printers.Add(printer.Value);
|
||||
Console.WriteLine("Registered printer");
|
||||
}
|
||||
|
||||
public SharedObject<IPrinter> GetPrinterByName(string printerName)
|
||||
@@ -28,6 +28,11 @@ public class PrinterFactory : IPrinterFactory
|
||||
return new SharedObject<IPrinter>(_printers.Find(i => i.GetName() == printerName)!);
|
||||
}
|
||||
|
||||
public SharedObject<IPrinter> GetFirstPrinter()
|
||||
{
|
||||
return new SharedObject<IPrinter>(_printers.First());
|
||||
}
|
||||
|
||||
public string[] CollectAllNames()
|
||||
{
|
||||
Console.WriteLine("Collecting all printers");
|
||||
|
||||
@@ -39,11 +39,15 @@ var printer = factory.Create("Test");
|
||||
var name = printer.Value.GetName();
|
||||
Console.WriteLine("Printer name : {0}", name);
|
||||
|
||||
Console.WriteLine("Registered printer");
|
||||
|
||||
factory.Register(new SharedObject<IPrinter>(new ClientBasedPrinter()));
|
||||
Console.WriteLine("Registered printer");
|
||||
|
||||
var registred = factory.GetFirstPrinter();
|
||||
Console.WriteLine(registred.Value);
|
||||
Console.WriteLine("Collecting all printers");
|
||||
var names = factory.CollectAllNames();
|
||||
Console.WriteLine(names);
|
||||
Console.ReadLine();
|
||||
|
||||
// var page = await printer.Value.Print("Test Page", new CancellationToken());
|
||||
|
||||
@@ -11,6 +11,7 @@ public interface IPrinterFactory
|
||||
SharedObject<IPrinter> Create(string printerName);
|
||||
void Register(SharedObject<IPrinter> printer);
|
||||
SharedObject<IPrinter> GetPrinterByName(string printerName);
|
||||
SharedObject<IPrinter> GetFirstPrinter();
|
||||
string[] CollectAllNames();
|
||||
|
||||
}
|
||||
@@ -20,8 +20,12 @@ public interface ISerialisationModule : IInjectableModule
|
||||
public interface IRepresentationModule : IInjectableModule
|
||||
{
|
||||
int Id { get; }
|
||||
Task<T> GetMessage<T>(Guid? requestId = null, MessageType? messageType = null);
|
||||
Task<T> GetMessageAsync<T>(Guid? requestId = null, MessageType? messageType = null);
|
||||
T GetMessage<T>(Guid? requestId = null, MessageType? messageType = null);
|
||||
Task<byte[]> GetRawMessage(Guid? requestId = null, MessageType? messageType = null);
|
||||
Task PostCallMessage<T>(Guid id, MessageType messageType, T payload);
|
||||
Task PostCallMessage(Guid id, MessageType messageType, object payload, Type payloadType);
|
||||
|
||||
Task PostCallMessageAsync<T>(Guid id, MessageType messageType, T payload);
|
||||
Task PostCallMessageAsync(Guid id, MessageType messageType, object payload, Type payloadType);
|
||||
void PostCallMessage<T>(Guid id, MessageType messageType, T payload);
|
||||
void PostCallMessage(Guid id, MessageType messageType, object payload, Type payloadType);
|
||||
}
|
||||
@@ -12,6 +12,7 @@ public class ConnectionHub : IConnectionHub
|
||||
if (_serializationToolkit is null)
|
||||
throw new NullReferenceException("Serialization toolkit is null");
|
||||
|
||||
_connections.Add(interaction.ConnectionId, interaction);
|
||||
var module = new RepresentationModule();
|
||||
module.Inject(_serializationToolkit);
|
||||
module.Inject(interaction);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using mROA.Abstract;
|
||||
using mROA.Implementation.Backend;
|
||||
// ReSharper disable MethodHasAsyncOverload
|
||||
|
||||
namespace mROA.Implementation.Frontend;
|
||||
|
||||
@@ -46,6 +47,8 @@ public class RequestExtractor : IRequestExtractor
|
||||
if (_methodRepository == null)
|
||||
throw new NullReferenceException("Method repository is null.");
|
||||
|
||||
await Task.Yield();
|
||||
|
||||
var multiClientOwnershipRepository = TransmissionConfig.OwnershipRepository as MultiClientOwnershipRepository;
|
||||
|
||||
|
||||
@@ -56,7 +59,7 @@ public class RequestExtractor : IRequestExtractor
|
||||
while (true)
|
||||
{
|
||||
var request =
|
||||
await _representationModule!.GetMessage<DefaultCallRequest>(messageType: MessageType.CallRequest);
|
||||
_representationModule!.GetMessage<DefaultCallRequest>(messageType: MessageType.CallRequest);
|
||||
|
||||
if (request.Parameter is not null)
|
||||
{
|
||||
@@ -72,7 +75,7 @@ public class RequestExtractor : IRequestExtractor
|
||||
? MessageType.FinishedCommandExecution
|
||||
: MessageType.ExceptionCommandExecution;
|
||||
|
||||
await _representationModule.PostCallMessage(request.CallRequestId, resultType, result);
|
||||
_representationModule.PostCallMessage(request.CallRequestId, resultType, result, result.GetType());
|
||||
}
|
||||
}
|
||||
catch
|
||||
|
||||
@@ -20,13 +20,13 @@ public abstract class RemoteObjectBase
|
||||
{
|
||||
var request = new DefaultCallRequest
|
||||
{ CommandId = methodId, ObjectId = _id, Parameter = parameter, ParameterType = parameter?.GetType() };
|
||||
await _representationModule.PostCallMessage(request.CallRequestId, MessageType.CallRequest, request);
|
||||
await _representationModule.PostCallMessageAsync(request.CallRequestId, MessageType.CallRequest, request);
|
||||
|
||||
var successResponse =
|
||||
_representationModule.GetMessage<FinalCommandExecution<T>>(
|
||||
_representationModule.GetMessageAsync<FinalCommandExecution<T>>(
|
||||
messageType: MessageType.FinishedCommandExecution, requestId: request.CallRequestId);
|
||||
var errorResponse =
|
||||
_representationModule.GetMessage<ExceptionCommandExecution>(
|
||||
_representationModule.GetMessageAsync<ExceptionCommandExecution>(
|
||||
messageType: MessageType.ExceptionCommandExecution, requestId: request.CallRequestId);
|
||||
Task.WaitAny(successResponse, errorResponse);
|
||||
|
||||
@@ -40,13 +40,13 @@ public abstract class RemoteObjectBase
|
||||
{
|
||||
var request = new DefaultCallRequest
|
||||
{ CommandId = methodId, ObjectId = _id, Parameter = parameter, ParameterType = parameter?.GetType() };
|
||||
await _representationModule.PostCallMessage(request.CallRequestId, MessageType.CallRequest, request);
|
||||
await _representationModule.PostCallMessageAsync(request.CallRequestId, MessageType.CallRequest, request);
|
||||
|
||||
var successResponse =
|
||||
_representationModule.GetMessage<FinalCommandExecution>(
|
||||
_representationModule.GetMessageAsync<FinalCommandExecution>(
|
||||
messageType: MessageType.FinishedCommandExecution, requestId: request.CallRequestId);
|
||||
var errorResponse =
|
||||
_representationModule.GetMessage<ExceptionCommandExecution>(
|
||||
_representationModule.GetMessageAsync<ExceptionCommandExecution>(
|
||||
messageType: MessageType.ExceptionCommandExecution, requestId: request.CallRequestId);
|
||||
|
||||
Task.WaitAny(successResponse, errorResponse);
|
||||
|
||||
@@ -22,11 +22,16 @@ public class RepresentationModule : IRepresentationModule
|
||||
|
||||
public int Id => _interaction.ConnectionId;
|
||||
|
||||
public async Task<T> GetMessage<T>(Guid? requestId, MessageType? messageType)
|
||||
public async Task<T> GetMessageAsync<T>(Guid? requestId, MessageType? messageType)
|
||||
{
|
||||
return _serialization.Deserialize<T>(await GetRawMessage(requestId, messageType))!;
|
||||
}
|
||||
|
||||
public T GetMessage<T>(Guid? requestId = null, MessageType? messageType = null)
|
||||
{
|
||||
return _serialization.Deserialize<T>(GetRawMessage(requestId, messageType).GetAwaiter().GetResult())!;
|
||||
}
|
||||
|
||||
public async Task<byte[]> GetRawMessage(Guid? requestId = null, MessageType? messageType = null)
|
||||
{
|
||||
while (true)
|
||||
@@ -38,14 +43,24 @@ public class RepresentationModule : IRepresentationModule
|
||||
}
|
||||
}
|
||||
|
||||
public async Task PostCallMessage<T>(Guid id, MessageType messageType, T payload)
|
||||
public async Task PostCallMessageAsync<T>(Guid id, MessageType messageType, T payload)
|
||||
{
|
||||
await PostCallMessage(id, messageType, payload, typeof(T));
|
||||
await PostCallMessageAsync(id, messageType, payload, typeof(T));
|
||||
}
|
||||
|
||||
public async Task PostCallMessage(Guid id, MessageType messageType, object payload, Type payloadType)
|
||||
public async Task PostCallMessageAsync(Guid id, MessageType messageType, object payload, Type payloadType)
|
||||
{
|
||||
await _interaction.PostMessage(new NetworkMessage
|
||||
{ Id = id, SchemaId = messageType, Data = _serialization.Serialize(payload, payloadType) });
|
||||
}
|
||||
|
||||
public void PostCallMessage<T>(Guid id, MessageType messageType, T payload)
|
||||
{
|
||||
PostCallMessageAsync(id, messageType, payload).GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
public void PostCallMessage(Guid id, MessageType messageType, object payload, Type payloadType)
|
||||
{
|
||||
PostCallMessageAsync(id, messageType, payload, payloadType).GetAwaiter().GetResult();
|
||||
}
|
||||
}
|
||||
@@ -68,7 +68,7 @@ public class SharedObject<T> where T : notnull
|
||||
_ownerId = ro.OwnerId;
|
||||
_contextId = ro.Id;
|
||||
}
|
||||
|
||||
else
|
||||
_ownerId = TransmissionConfig.OwnershipRepository!.GetHostOwnershipId();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user