89 lines
2.5 KiB
C#
89 lines
2.5 KiB
C#
using System;
|
|
|
|
namespace Dashboard.Drawing
|
|
{
|
|
public interface IDrawCommand
|
|
{
|
|
/// <summary>
|
|
/// Name of the command.
|
|
/// </summary>
|
|
string Name { get; }
|
|
|
|
/// <summary>
|
|
/// The draw extension that defines this command.
|
|
/// </summary>
|
|
IDrawExtension Extension { get; }
|
|
|
|
/// <summary>
|
|
/// The length of the command data segment, in bytes.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Must be 0 for simple commands. For commands that are variadic, the
|
|
/// value must be less than 0. Any other positive value, otherwise.
|
|
/// </remarks>
|
|
int Length { get; }
|
|
|
|
/// <summary>
|
|
/// Get the parameters object for this command.
|
|
/// </summary>
|
|
/// <param name="param">The parameter array.</param>
|
|
/// <returns>The parameters object.</returns>
|
|
object? GetParams(DrawQueue queue, ReadOnlySpan<byte> param);
|
|
}
|
|
|
|
public interface IDrawCommand<T> : IDrawCommand
|
|
{
|
|
/// <summary>
|
|
/// Get the parameters object for this command.
|
|
/// </summary>
|
|
/// <param name="param">The parameter array.</param>
|
|
/// <returns>The parameters object.</returns>
|
|
new T? GetParams(DrawQueue queue, ReadOnlySpan<byte> param);
|
|
}
|
|
|
|
public sealed class DrawCommand : IDrawCommand
|
|
{
|
|
public string Name { get; }
|
|
public IDrawExtension Extension { get; }
|
|
public int Length { get; } = 0;
|
|
|
|
public DrawCommand(string name, IDrawExtension extension)
|
|
{
|
|
Name = name;
|
|
Extension = extension;
|
|
}
|
|
|
|
public object? GetParams(DrawQueue queue, ReadOnlySpan<byte> param)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public sealed class DrawCommand<T> : IDrawCommand<T>
|
|
where T : IParameterSerializer<T>, new()
|
|
{
|
|
public string Name { get; }
|
|
public IDrawExtension Extension { get; }
|
|
public int Length { get; }
|
|
|
|
public DrawCommand(string name, IDrawExtension extension, int length)
|
|
{
|
|
Name = name;
|
|
Extension = extension;
|
|
Length = length;
|
|
}
|
|
|
|
public T? GetParams(DrawQueue queue, ReadOnlySpan<byte> param)
|
|
{
|
|
T t = new T();
|
|
t.Deserialize(queue, param);
|
|
return t;
|
|
}
|
|
|
|
object? IDrawCommand.GetParams(DrawQueue queue, ReadOnlySpan<byte> param)
|
|
{
|
|
return GetParams(queue, param);
|
|
}
|
|
}
|
|
}
|