1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2026-02-04 02:43:32 +00:00
Robert 55dca6cebb Upgrade packages
Update namespaces
Clean up unused imports
Replace Avalonia.ReactiveUI with ReactiveUI.Avalonia 🙄
2025-12-16 22:28:16 +01:00

100 lines
4.9 KiB
C#

using System;
using System.Threading.Tasks;
using GenHTTP.Api.Infrastructure;
using GenHTTP.Api.Protocol;
namespace Artemis.Core.Services;
/// <summary>
/// A service that provides access to the local Artemis web server
/// </summary>
public interface IWebServerService : IArtemisService
{
/// <summary>
/// Gets the current instance of the web server, replaced when <see cref="WebServerStarting" /> occurs.
/// </summary>
IServer? Server { get; }
/// <summary>
/// Gets the plugins module containing all plugin end points
/// </summary>
PluginsHandler PluginsHandler { get; }
/// <summary>
/// Adds a new endpoint for the given plugin feature receiving an object of type <typeparamref name="T" />
/// <para>Note: Object will be deserialized using JSON.</para>
/// </summary>
/// <typeparam name="T">The type of object to be received</typeparam>
/// <param name="feature">The plugin feature the end point is associated with</param>
/// <param name="endPointName">The name of the end point, must be unique</param>
/// <param name="requestHandler"></param>
/// <returns>The resulting end point</returns>
JsonPluginEndPoint<T> AddJsonEndPoint<T>(PluginFeature feature, string endPointName, Action<T> requestHandler);
/// <summary>
/// Adds a new endpoint for the given plugin feature receiving an object of type <typeparamref name="T" /> and
/// returning any <see cref="object" />.
/// <para>Note: Both will be deserialized and serialized respectively using JSON.</para>
/// </summary>
/// <typeparam name="T">The type of object to be received</typeparam>
/// <param name="feature">The plugin feature the end point is associated with</param>
/// <param name="endPointName">The name of the end point, must be unique</param>
/// <param name="requestHandler"></param>
/// <returns>The resulting end point</returns>
JsonPluginEndPoint<T> AddResponsiveJsonEndPoint<T>(PluginFeature feature, string endPointName, Func<T, object?> requestHandler);
/// <summary>
/// Adds a new endpoint for the given plugin feature receiving an a <see cref="string" />.
/// </summary>
/// <param name="feature">The plugin feature the end point is associated with</param>
/// <param name="endPointName">The name of the end point, must be unique</param>
/// <param name="requestHandler"></param>
/// <returns>The resulting end point</returns>
StringPluginEndPoint AddStringEndPoint(PluginFeature feature, string endPointName, Action<string> requestHandler);
/// <summary>
/// Adds a new endpoint for the given plugin feature receiving an a <see cref="string" /> and returning a
/// <see cref="string" /> or <see langword="null" />.
/// </summary>
/// <param name="feature">The plugin feature the end point is associated with</param>
/// <param name="endPointName">The name of the end point, must be unique</param>
/// <param name="requestHandler"></param>
/// <returns>The resulting end point</returns>
StringPluginEndPoint AddResponsiveStringEndPoint(PluginFeature feature, string endPointName, Func<string, string?> requestHandler);
/// <summary>
/// Adds a new endpoint for the given plugin feature that handles a raw <see cref="IHttpContext" />.
/// <para>
/// Note: This requires that you reference the EmbedIO
/// <see href="https://www.nuget.org/packages/embedio">Nuget package</see>.
/// </para>
/// </summary>
/// <param name="feature">The plugin feature the end point is associated with</param>
/// <param name="endPointName">The name of the end point, must be unique</param>
/// <param name="requestHandler"></param>
/// <returns>The resulting end point</returns>
RawPluginEndPoint AddRawEndPoint(PluginFeature feature, string endPointName, Func<IRequest, Task<IResponse>> requestHandler);
/// <summary>
/// Removes an existing endpoint
/// </summary>
/// <param name="endPoint">The end point to remove</param>
void RemovePluginEndPoint(PluginEndPoint endPoint);
/// <summary>
/// Adds a new Web API controller and restarts the web server
/// </summary>
/// <typeparam name="T">The type of Web API controller to add</typeparam>
WebApiControllerRegistration AddController<T>(PluginFeature feature, string path) where T : class;
/// <summary>
/// Removes an existing Web API controller and restarts the web server
/// </summary>
/// <param name="registration">The registration of the controller to remove.</param>
void RemoveController(WebApiControllerRegistration registration);
/// <summary>
/// Occurs when the web server has been created and is about to start. This is the ideal place to add your own modules.
/// </summary>
event EventHandler? WebServerStarting;
}