Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-03-03 21:10:25 +01:00
5 changed files with 38 additions and 24 deletions

View File

@@ -0,0 +1,6 @@
namespace AipsCore.Application.Abstract.MessageBroking;
public interface IMessageTypesProvider
{
ICollection<Type> GetAllMessageTypes();
}

View File

@@ -1,7 +0,0 @@
namespace AipsCore.Application.Abstract.MessageBroking;
public enum MessageTag
{
Worker,
RT
}

View File

@@ -0,0 +1,23 @@
using AipsCore.Application.Abstract.MessageBroking;
using AipsCore.Application.Common.Message.AddArrow;
using AipsCore.Application.Common.Message.AddLine;
using AipsCore.Application.Common.Message.AddRectangle;
using AipsCore.Application.Common.Message.AddTextShape;
using AipsCore.Application.Common.Message.MoveShape;
namespace AipsWorker.Messages;
public class MessageTypesProvider : IMessageTypesProvider
{
public ICollection<Type> GetAllMessageTypes()
{
return
[
typeof(AddArrowMessage),
typeof(AddLineMessage),
typeof(AddRectangleMessage),
typeof(AddTextShapeMessage),
typeof(MoveShapeMessage)
];
}
}

View File

@@ -1,5 +1,7 @@
using AipsCore.Infrastructure.DI; using AipsCore.Application.Abstract.MessageBroking;
using AipsCore.Infrastructure.DI;
using AipsWorker; using AipsWorker;
using AipsWorker.Messages;
using AipsWorker.Utilities; using AipsWorker.Utilities;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
@@ -13,6 +15,8 @@ builder.ConfigureServices((context, services) =>
services.AddAips(context.Configuration); services.AddAips(context.Configuration);
services.AddAipsMessageHandlers(); services.AddAipsMessageHandlers();
services.AddSingleton<IMessageTypesProvider, MessageTypesProvider>();
services.AddHostedService<WorkerService>(); services.AddHostedService<WorkerService>();
}); });

View File

@@ -11,11 +11,13 @@ namespace AipsWorker;
public class WorkerService : BackgroundService public class WorkerService : BackgroundService
{ {
private readonly IDispatcher _dispatcher; private readonly IDispatcher _dispatcher;
private readonly IMessageTypesProvider _messageTypesProvider;
private readonly SubscribeMethodUtility _subscribeMethodUtility; private readonly SubscribeMethodUtility _subscribeMethodUtility;
public WorkerService(IMessageSubscriber subscriber, IDispatcher dispatcher) public WorkerService(IMessageSubscriber subscriber, IDispatcher dispatcher, IMessageTypesProvider messageTypesProvider)
{ {
_dispatcher = dispatcher; _dispatcher = dispatcher;
_messageTypesProvider = messageTypesProvider;
_subscribeMethodUtility = new SubscribeMethodUtility(subscriber); _subscribeMethodUtility = new SubscribeMethodUtility(subscriber);
} }
@@ -23,7 +25,7 @@ public class WorkerService : BackgroundService
protected override async Task ExecuteAsync(CancellationToken stoppingToken) protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{ {
var messageTypes = GetAllMessageTypes(); var messageTypes = _messageTypesProvider.GetAllMessageTypes();
foreach (var messageType in messageTypes) foreach (var messageType in messageTypes)
{ {
@@ -33,20 +35,6 @@ public class WorkerService : BackgroundService
} }
} }
private IReadOnlyCollection<Type> GetAllMessageTypes()
{
var messageInterface = typeof(IMessage);
var assembly = messageInterface.Assembly;
return assembly
.GetTypes()
.Where(t =>
!t.IsAbstract &&
!t.IsInterface &&
messageInterface.IsAssignableFrom(t))
.ToList();
}
private async Task HandleMessage<T>(T message, CancellationToken ct) where T : IMessage private async Task HandleMessage<T>(T message, CancellationToken ct) where T : IMessage
{ {
try try