diff --git a/Pilz.Net/Api/ApiServer.cs b/Pilz.Net/Api/ApiServer.cs index 860245d..70b4a05 100644 --- a/Pilz.Net/Api/ApiServer.cs +++ b/Pilz.Net/Api/ApiServer.cs @@ -183,13 +183,9 @@ public class ApiServer : IApiServer semaphore.Release(); } - public virtual IEnumerable GetEndpoints() + public virtual Dictionary GetEndpoints() { - return handlers.SelectMany(n => n.Attribute.Methods.Select(m => new - { - n.Attribute.Route, - Method = m, - })).OrderBy(n => n.Route).ThenBy(n => n.Method).Select(n => $"{n.Method} {n.Route}"); + return handlers.GroupBy(n => n.Attribute.Route).ToDictionary(n => n.Key, n => n.SelectMany(n => n.Attribute.Methods).ToArray()); } public virtual void RegisterHandler(T instance) where T : class diff --git a/Pilz.Net/Api/IApiServer.cs b/Pilz.Net/Api/IApiServer.cs index 261e939..057830c 100644 --- a/Pilz.Net/Api/IApiServer.cs +++ b/Pilz.Net/Api/IApiServer.cs @@ -27,7 +27,7 @@ public interface IApiServer void RegisterHandler(Delegate handler); void RegisterHandler(Delegate handler, bool throwOnError); void RegisterHandler(Delegate handler, ApiMessageHandlerAttribute attribute, bool throwOnError); - IEnumerable GetEndpoints(); + Dictionary GetEndpoints(); void Stop(bool graceful); void Restart(bool graceful); } diff --git a/Pilz.Net/Api/Messages/ServerCapabilitiesMessage.cs b/Pilz.Net/Api/Messages/ServerCapabilitiesMessage.cs index e1fcd89..bc7c9a1 100644 --- a/Pilz.Net/Api/Messages/ServerCapabilitiesMessage.cs +++ b/Pilz.Net/Api/Messages/ServerCapabilitiesMessage.cs @@ -1,6 +1,6 @@ namespace Pilz.Net.Api.Messages; -public class ServerCapabilitiesMessage : ApiMessage +public class ServerCapabilitiesMessage(Dictionary endpoints) : ApiMessage { - public List Endpoints { get; } = []; + public Dictionary Endpoints { get; } = endpoints; } diff --git a/Pilz.Net/Api/Server/ServerCapabilitiesHandler.cs b/Pilz.Net/Api/Server/ServerCapabilitiesHandler.cs index be9598b..345592b 100644 --- a/Pilz.Net/Api/Server/ServerCapabilitiesHandler.cs +++ b/Pilz.Net/Api/Server/ServerCapabilitiesHandler.cs @@ -18,14 +18,11 @@ public class ServerCapabilitiesHandler : IApiHandlerInitializer public virtual ApiResult GetCapabilities(ApiRequestInfo req) { - var msg = BuildMessage(req); - if (server is ServerCapabilitiesMessage message) - message.Endpoints.AddRange(server.GetEndpoints()); - return ApiResult.Ok(msg); + return ApiResult.Ok(BuildMessage(req)); } protected virtual ApiMessage? BuildMessage(ApiRequestInfo req) { - return new ServerCapabilitiesMessage(); + return new ServerCapabilitiesMessage(server?.GetEndpoints() ?? []); } }