Added & modified several message types.

This commit is contained in:
Tom
2024-08-10 19:33:33 +00:00
parent d8522584c4
commit 9d838e66ad
21 changed files with 190 additions and 72 deletions

View File

@ -0,0 +1,43 @@
namespace HermesSocketLibrary.Requests.Callbacks
{
public class CallbackManager<A> : ICallbackManager<A> where A : class
{
private readonly IDictionary<string, A> _callbacks;
public CallbackManager()
{
_callbacks = new Dictionary<string, A>();
}
public string GenerateKeyForCallback(A callback)
{
string key = GenerateKey();
_callbacks.Add(key, callback);
return key;
}
public A? Get(string key)
{
if (_callbacks.TryGetValue(key, out var callback))
return callback;
return null;
}
public A? Take(string key)
{
if (_callbacks.TryGetValue(key, out var callback))
{
_callbacks.Remove(key);
return callback;
}
return null;
}
private string GenerateKey()
{
return Guid.NewGuid().ToString("D");
}
}
}

View File

@ -0,0 +1,9 @@
namespace HermesSocketLibrary.Requests.Callbacks
{
public interface ICallbackManager<A> where A : class
{
string GenerateKeyForCallback(A callback);
A? Get(string key);
A? Take(string key);
}
}

View File

@ -4,6 +4,6 @@ namespace HermesSocketLibrary.Requests
{
string Name { get; }
Task<RequestResult> Grant(string sender, IDictionary<string, object> data);
Task<RequestResult> Grant(string sender, IDictionary<string, object>? data);
}
}

View File

@ -0,0 +1,9 @@
using HermesSocketLibrary.Socket.Data;
namespace HermesSocketLibrary.Requests
{
public interface IRequestManager
{
Task<RequestResult> Grant(string sender, RequestMessage? message);
}
}

View File

@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace HermesSocketLibrary.Requests.Messages
{
public class EmoteInfo

View File

@ -0,0 +1,9 @@
namespace HermesSocketLibrary.Requests.Messages
{
public class Group
{
public string Id { get; set; }
public string Name { get; set; }
public int Priority { get; set; }
}
}

View File

@ -0,0 +1,8 @@
namespace HermesSocketLibrary.Requests.Messages
{
public class GroupChatter
{
public string GroupId { get; set; }
public long ChatterId { get; set;}
}
}

View File

@ -0,0 +1,9 @@
namespace HermesSocketLibrary.Requests.Messages
{
public class GroupInfo
{
public IEnumerable<Group> Groups { get; set; }
public IEnumerable<GroupChatter> GroupChatters { get; set; }
public IEnumerable<GroupPermission> GroupPermissions { get; set; }
}
}

View File

@ -0,0 +1,10 @@
namespace HermesSocketLibrary.Requests.Messages
{
public class GroupPermission
{
public string Id { get; set; }
public string GroupId { get; set; }
public string Path { get; set; }
public bool? Allow { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace HermesSocketLibrary.Requests.Messages
{
public class RedeemableAction
{
public string Name { get; set; }
public string Type { get; set; }
public IDictionary<string, string> Data { get; set; }
}
}

View File

@ -0,0 +1,11 @@
namespace HermesSocketLibrary.Requests.Messages
{
public class Redemption
{
public string Id { get; set; }
public string RedemptionId { get; set; }
public string ActionName { get; set; }
public int Order { get; set; }
public bool State { get; set; }
}
}

View File

@ -1,3 +1,6 @@
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
namespace HermesSocketLibrary.Requests.Messages
{
public class TTSWordFilter
@ -5,7 +8,8 @@ namespace HermesSocketLibrary.Requests.Messages
public string? Id { get; set; }
public string? Search { get; set; }
public string? Replace { get; set; }
[JsonIgnore]
public Regex? Regex { get; set; }
public bool IsRegex { get; set; }

View File

@ -1,40 +1,19 @@
using System.Collections.Concurrent;
using System.Reflection;
using HermesSocketLibrary.Socket.Data;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
namespace HermesSocketLibrary.Requests
{
public abstract class RequestManager
public class RequestManager : IRequestManager
{
private readonly IDictionary<string, IRequest> _requests;
private readonly IServiceProvider _serviceProvider;
private readonly ILogger _logger;
public RequestManager(IServiceProvider serviceProvider, ILogger logger)
public RequestManager(IEnumerable<IRequest> requests, ILogger logger)
{
_serviceProvider = serviceProvider;
_logger = logger;
_requests = new ConcurrentDictionary<string, IRequest>();
LoadRequests();
}
protected abstract string AssemblyName { get; }
private void LoadRequests()
{
Type basetype = typeof(IRequest);
var types = Assembly.Load(AssemblyName).GetTypes().Where(t => t.IsClass && !t.IsAbstract && basetype.IsAssignableFrom(t));
foreach (var type in types)
{
_logger.Debug($"Loading IRequest for '{type.Name}'.");
var request = _serviceProvider.GetRequiredKeyedService<IRequest>(type.Name);
_requests.Add(request.Name, request);
}
_requests = requests.ToDictionary(r => r.Name, r => r);
}
public async Task<RequestResult> Grant(string sender, RequestMessage? message)