доп. клинап
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
<RepositoryUrl>https://github.com/YaslePoy/mROA</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Version>1.0.6</Version>
|
||||
<Version>1.0.7</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ namespace mROA.Codegen;
|
||||
/// When using the source code as a baseline, an incremental source generator is preferable because it reduces the performance overhead.
|
||||
/// </summary>
|
||||
[Generator]
|
||||
public class SampleIncrementalSourceGenerator : IIncrementalGenerator
|
||||
public class mROASourceGenerator : IIncrementalGenerator
|
||||
{
|
||||
private const string Namespace = "mROA.Implementation";
|
||||
private const string AttributeName = "SharedObjectInterafceAttribute";
|
||||
@@ -1,5 +1,3 @@
|
||||
namespace mROA.Abstract;
|
||||
|
||||
public interface IFrontendBridge : IInjectableModule
|
||||
{
|
||||
}
|
||||
public interface IFrontendBridge : IInjectableModule;
|
||||
@@ -10,22 +10,32 @@ public class BasicExecutionModule : IExecuteModule
|
||||
|
||||
public void Inject<T>(T dependency)
|
||||
{
|
||||
if (dependency is IMethodRepository methodRepo)
|
||||
switch (dependency)
|
||||
{
|
||||
case IMethodRepository methodRepo:
|
||||
_methodRepo = methodRepo;
|
||||
|
||||
if (dependency is IContextRepository contextRepo)
|
||||
break;
|
||||
case IContextRepository contextRepo:
|
||||
_contextRepo = contextRepo;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public ICommandExecution Execute(ICallRequest command)
|
||||
{
|
||||
var currentCommand = _methodRepo!.GetMethod(command.CommandId);
|
||||
if (_methodRepo is null)
|
||||
throw new NullReferenceException("Method repository was not defined");
|
||||
|
||||
if (_contextRepo is null)
|
||||
throw new NullReferenceException("Context repository was not defined");
|
||||
|
||||
var currentCommand = _methodRepo.GetMethod(command.CommandId);
|
||||
if (currentCommand == null)
|
||||
throw new Exception($"Command {command.CommandId} not found");
|
||||
|
||||
var context = command.ObjectId != -1
|
||||
? _contextRepo!.GetObject(command.ObjectId)
|
||||
: _contextRepo!.GetSingleObject(currentCommand.DeclaringType!);
|
||||
? _contextRepo.GetObject(command.ObjectId)
|
||||
: _contextRepo.GetSingleObject(currentCommand.DeclaringType!);
|
||||
var parameter = command.Parameter;
|
||||
|
||||
if (currentCommand.ReturnType.BaseType == typeof(Task) &&
|
||||
@@ -61,7 +71,7 @@ public class BasicExecutionModule : IExecuteModule
|
||||
}
|
||||
}
|
||||
|
||||
private ICommandExecution ExecuteAsync(MethodInfo currentCommand, object context, object? parameter,
|
||||
private static ICommandExecution ExecuteAsync(MethodInfo currentCommand, object context, object? parameter,
|
||||
ICallRequest command)
|
||||
{
|
||||
var tokenSource = new CancellationTokenSource();
|
||||
@@ -86,7 +96,7 @@ public class BasicExecutionModule : IExecuteModule
|
||||
}
|
||||
}
|
||||
|
||||
private ICommandExecution TypedExecuteAsync(MethodInfo currentCommand, object context, object? parameter,
|
||||
private static ICommandExecution TypedExecuteAsync(MethodInfo currentCommand, object context, object? parameter,
|
||||
ICallRequest command)
|
||||
{
|
||||
var tokenSource = new CancellationTokenSource();
|
||||
|
||||
@@ -12,8 +12,8 @@ public class ContextRepository : IContextRepository
|
||||
|
||||
private Task<int> _lastIndexFinder = Task.FromResult(0);
|
||||
|
||||
const int StartupSize = 1024;
|
||||
const int GrowSize = 128;
|
||||
private const int StartupSize = 1024;
|
||||
private const int GrowSize = 128;
|
||||
|
||||
|
||||
public void FillSingletons(params Assembly[] assembly)
|
||||
@@ -70,7 +70,7 @@ public class ContextRepository : IContextRepository
|
||||
|
||||
private int FindLastIndex()
|
||||
{
|
||||
for (int i = 0; i < _storage.Length; i++)
|
||||
for (var i = 0; i < _storage.Length; i++)
|
||||
{
|
||||
if (_storage[i] is null)
|
||||
return i;
|
||||
|
||||
@@ -28,23 +28,6 @@ public class JsonSerialisationModule : ISerialisationModule
|
||||
public void PostResponse(ICommandExecution call)
|
||||
{
|
||||
var texted = JsonSerializer.Serialize(call, call.GetType());
|
||||
// if (call is TypedFinalCommandExecution nonVoidCall)
|
||||
// {
|
||||
// texted = JsonSerializer.Serialize(nonVoidCall);
|
||||
// }
|
||||
// else if (call is FinalCommandExecution finalCommand)
|
||||
// {
|
||||
// texted = JsonSerializer.Serialize(finalCommand);
|
||||
// }
|
||||
// else if (call is AsyncCommandExecution asyncCommand)
|
||||
// {
|
||||
// texted = JsonSerializer.Serialize(asyncCommand);
|
||||
// }
|
||||
// else if (call is ExceptionCommandExecution exceptionCommandExecution)
|
||||
// {
|
||||
// texted = JsonSerializer.Serialize(exceptionCommandExecution);
|
||||
// }
|
||||
|
||||
var binary = Encoding.UTF8.GetBytes(texted);
|
||||
_dataSource!.SendTo(call.ClientId, binary);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ public class NetworkGatewayModule(IPEndPoint endpoint) : IGatewayModule
|
||||
{
|
||||
if (_interactionModule is null)
|
||||
throw new NullReferenceException("Interaction module is null");
|
||||
|
||||
while (true)
|
||||
{
|
||||
var client = _tcpListener.AcceptTcpClient();
|
||||
|
||||
@@ -2,14 +2,10 @@ using mROA.Abstract;
|
||||
|
||||
namespace mROA.Implementation.Bootstrap;
|
||||
|
||||
public interface IRoaBuilder
|
||||
public class FullMixBuilder
|
||||
{
|
||||
void Build();
|
||||
}
|
||||
public List<IInjectableModule> Modules { get; } = [];
|
||||
|
||||
public class FullMixBuilder : IRoaBuilder
|
||||
{
|
||||
public List<IInjectableModule> Modules { get; } = new();
|
||||
public void Build()
|
||||
{
|
||||
foreach (var module in Modules)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
public interface ICallRequest
|
||||
{
|
||||
Guid CallRequestId { get; internal set; }
|
||||
Guid CallRequestId { get; }
|
||||
int CommandId { get; }
|
||||
int ObjectId { get; }
|
||||
object? Parameter { get; }
|
||||
|
||||
@@ -11,12 +11,12 @@ public class FinalCommandExecution : ICommandExecution
|
||||
[JsonIgnore]
|
||||
public int ClientId { get; set; }
|
||||
[JsonIgnore]
|
||||
public int CommandId { get; set; }
|
||||
public int CommandId { get; init; }
|
||||
}
|
||||
|
||||
public class FinalCommandExecution<T> : FinalCommandExecution
|
||||
{
|
||||
public T? Result { get; set; }
|
||||
public T? Result { get; init; }
|
||||
}
|
||||
|
||||
public class TypedFinalCommandExecution : FinalCommandExecution<object>
|
||||
@@ -29,6 +29,6 @@ public class ExceptionCommandExecution : ICommandExecution
|
||||
{
|
||||
public Guid CallRequestId { get; init; }
|
||||
public int ClientId { get; set; }
|
||||
public int CommandId { get; set; }
|
||||
public int CommandId { get; init; }
|
||||
public required string Exception { get; set; }
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using mROA.Abstract;
|
||||
|
||||
namespace mROA.Implementation.Frontend;
|
||||
|
||||
public class FrontendServiceBuilder
|
||||
{
|
||||
protected IInteractionModule.IFrontendInteractionModule? InteractionModule;
|
||||
protected ISerialisationModule.IFrontendSerialisationModule? SerialisationModule;
|
||||
|
||||
public ISerialisationModule.IFrontendSerialisationModule Build()
|
||||
{
|
||||
return SerialisationModule!;
|
||||
}
|
||||
}
|
||||
@@ -68,5 +68,5 @@ public class JsonFrontendSerialisationModule
|
||||
public class RemoteException(string error) : Exception
|
||||
{
|
||||
public Guid CallRequestId;
|
||||
public override string Message => error;
|
||||
public override string Message => $"Error in request {CallRequestId} : {error}";
|
||||
}
|
||||
@@ -19,11 +19,10 @@ public class NetworkFrontendBridge(IPEndPoint ipEndPoint) : IFrontendBridge
|
||||
|
||||
public void Connect()
|
||||
{
|
||||
_tcpClient.Connect(ipEndPoint);
|
||||
if (_interactionModule is null)
|
||||
{
|
||||
throw new Exception("Interaction module was not injected");
|
||||
}
|
||||
|
||||
_tcpClient.Connect(ipEndPoint);
|
||||
_interactionModule.ServerStream = _tcpClient.GetStream();
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,10 @@ public class StreamBasedFrontendInteractionModule : IInteractionModule.IFrontend
|
||||
{
|
||||
if (ServerStream is null)
|
||||
throw new IOException("Server is not connected.");
|
||||
|
||||
const int bufferSize = ushort.MaxValue;
|
||||
|
||||
byte[] buffer = new byte[bufferSize];
|
||||
var buffer = new byte[bufferSize];
|
||||
if (!ServerStream.CanRead) throw new IOException("Server is not connected.");
|
||||
|
||||
await ServerStream.ReadExactlyAsync(buffer, 0, 2);
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace mROA.Implementation;
|
||||
|
||||
public class MethodRepository : IMethodRepository
|
||||
{
|
||||
private List<MethodInfo> _methods = [];
|
||||
private readonly List<MethodInfo> _methods = [];
|
||||
|
||||
public MethodInfo GetMethod(int id)
|
||||
{
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Title>mROA</Title>
|
||||
<Version>1.1.2</Version>
|
||||
<Version>1.1.3</Version>
|
||||
<Authors>YaslePoy</Authors>
|
||||
<Description>Fast and easy RPC with contex</Description>
|
||||
<RepositoryUrl>https://github.com/YaslePoy/mROA</RepositoryUrl>
|
||||
|
||||
Reference in New Issue
Block a user