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