diff --git a/HermesSocketLibrary.csproj b/HermesSocketLibrary.csproj
index 33b508e..b623d3a 100644
--- a/HermesSocketLibrary.csproj
+++ b/HermesSocketLibrary.csproj
@@ -8,16 +8,10 @@
-
-
-
-
-
-
-
+
diff --git a/Requests/Callbacks/CallbackManager.cs b/Requests/Callbacks/CallbackManager.cs
new file mode 100644
index 0000000..bfc1ace
--- /dev/null
+++ b/Requests/Callbacks/CallbackManager.cs
@@ -0,0 +1,43 @@
+namespace HermesSocketLibrary.Requests.Callbacks
+{
+ public class CallbackManager : ICallbackManager where A : class
+ {
+ private readonly IDictionary _callbacks;
+
+
+ public CallbackManager()
+ {
+ _callbacks = new Dictionary();
+ }
+
+
+ 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");
+ }
+ }
+}
\ No newline at end of file
diff --git a/Requests/Callbacks/ICallbackManager.cs b/Requests/Callbacks/ICallbackManager.cs
new file mode 100644
index 0000000..bf22a06
--- /dev/null
+++ b/Requests/Callbacks/ICallbackManager.cs
@@ -0,0 +1,9 @@
+namespace HermesSocketLibrary.Requests.Callbacks
+{
+ public interface ICallbackManager where A : class
+ {
+ string GenerateKeyForCallback(A callback);
+ A? Get(string key);
+ A? Take(string key);
+ }
+}
\ No newline at end of file
diff --git a/Requests/IRequest.cs b/Requests/IRequest.cs
index f44bf94..cb89e51 100644
--- a/Requests/IRequest.cs
+++ b/Requests/IRequest.cs
@@ -4,6 +4,6 @@ namespace HermesSocketLibrary.Requests
{
string Name { get; }
- Task Grant(string sender, IDictionary data);
+ Task Grant(string sender, IDictionary? data);
}
}
\ No newline at end of file
diff --git a/Requests/IRequestManager.cs b/Requests/IRequestManager.cs
new file mode 100644
index 0000000..2eefd99
--- /dev/null
+++ b/Requests/IRequestManager.cs
@@ -0,0 +1,9 @@
+using HermesSocketLibrary.Socket.Data;
+
+namespace HermesSocketLibrary.Requests
+{
+ public interface IRequestManager
+ {
+ Task Grant(string sender, RequestMessage? message);
+ }
+}
\ No newline at end of file
diff --git a/Requests/Messages/EmoteInfo.cs b/Requests/Messages/EmoteInfo.cs
index 79666ef..c4c8e1c 100644
--- a/Requests/Messages/EmoteInfo.cs
+++ b/Requests/Messages/EmoteInfo.cs
@@ -1,8 +1,3 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
namespace HermesSocketLibrary.Requests.Messages
{
public class EmoteInfo
diff --git a/Requests/Messages/Group.cs b/Requests/Messages/Group.cs
new file mode 100644
index 0000000..b1a3894
--- /dev/null
+++ b/Requests/Messages/Group.cs
@@ -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; }
+ }
+}
\ No newline at end of file
diff --git a/Requests/Messages/GroupChatter.cs b/Requests/Messages/GroupChatter.cs
new file mode 100644
index 0000000..50c5f35
--- /dev/null
+++ b/Requests/Messages/GroupChatter.cs
@@ -0,0 +1,8 @@
+namespace HermesSocketLibrary.Requests.Messages
+{
+ public class GroupChatter
+ {
+ public string GroupId { get; set; }
+ public long ChatterId { get; set;}
+ }
+}
\ No newline at end of file
diff --git a/Requests/Messages/GroupInfo.cs b/Requests/Messages/GroupInfo.cs
new file mode 100644
index 0000000..66903ff
--- /dev/null
+++ b/Requests/Messages/GroupInfo.cs
@@ -0,0 +1,9 @@
+namespace HermesSocketLibrary.Requests.Messages
+{
+ public class GroupInfo
+ {
+ public IEnumerable Groups { get; set; }
+ public IEnumerable GroupChatters { get; set; }
+ public IEnumerable GroupPermissions { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Requests/Messages/GroupPermission.cs b/Requests/Messages/GroupPermission.cs
new file mode 100644
index 0000000..4d7b21d
--- /dev/null
+++ b/Requests/Messages/GroupPermission.cs
@@ -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; }
+ }
+}
\ No newline at end of file
diff --git a/Requests/Messages/RedeemableAction.cs b/Requests/Messages/RedeemableAction.cs
new file mode 100644
index 0000000..e3689ec
--- /dev/null
+++ b/Requests/Messages/RedeemableAction.cs
@@ -0,0 +1,9 @@
+namespace HermesSocketLibrary.Requests.Messages
+{
+ public class RedeemableAction
+ {
+ public string Name { get; set; }
+ public string Type { get; set; }
+ public IDictionary Data { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Requests/Messages/Redemption.cs b/Requests/Messages/Redemption.cs
new file mode 100644
index 0000000..5046700
--- /dev/null
+++ b/Requests/Messages/Redemption.cs
@@ -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; }
+ }
+}
\ No newline at end of file
diff --git a/Requests/Messages/TTSWordFilter.cs b/Requests/Messages/TTSWordFilter.cs
index 394a3f1..c5a1de7 100644
--- a/Requests/Messages/TTSWordFilter.cs
+++ b/Requests/Messages/TTSWordFilter.cs
@@ -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; }
diff --git a/Requests/RequestManager.cs b/Requests/RequestManager.cs
index bdddd10..9d317bc 100644
--- a/Requests/RequestManager.cs
+++ b/Requests/RequestManager.cs
@@ -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 _requests;
- private readonly IServiceProvider _serviceProvider;
private readonly ILogger _logger;
- public RequestManager(IServiceProvider serviceProvider, ILogger logger)
+ public RequestManager(IEnumerable requests, ILogger logger)
{
- _serviceProvider = serviceProvider;
_logger = logger;
- _requests = new ConcurrentDictionary();
- 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(type.Name);
- _requests.Add(request.Name, request);
- }
+ _requests = requests.ToDictionary(r => r.Name, r => r);
}
public async Task Grant(string sender, RequestMessage? message)
diff --git a/Socket/Data/Connection.cs b/Socket/Data/Connection.cs
new file mode 100644
index 0000000..7942c7e
--- /dev/null
+++ b/Socket/Data/Connection.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace HermesSocketLibrary.Socket.Data
+{
+ public class Connection
+ {
+ public string Name { get; set; }
+ public string Type { get; set; }
+ public string ClientId { get; set; }
+ public string AccessToken { get; set; }
+ public string GrantType { get; set; }
+ public string Scope { get; set; }
+ public DateTime ExpiresIn { get; set; }
+ public bool Default { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Socket/Data/EmoteDetailsMessage.cs b/Socket/Data/EmoteDetailsMessage.cs
index cdccf95..b2c9cff 100644
--- a/Socket/Data/EmoteDetailsMessage.cs
+++ b/Socket/Data/EmoteDetailsMessage.cs
@@ -2,6 +2,6 @@ namespace HermesSocketLibrary.Socket.Data
{
public class EmoteDetailsMessage
{
- public Dictionary Emotes { get; set; }
+ public IDictionary Emotes { get; set; }
}
}
\ No newline at end of file
diff --git a/Socket/Data/EmoteUsageMessage.cs b/Socket/Data/EmoteUsageMessage.cs
index fb2ef7d..d5fcf9d 100644
--- a/Socket/Data/EmoteUsageMessage.cs
+++ b/Socket/Data/EmoteUsageMessage.cs
@@ -5,7 +5,7 @@ namespace HermesSocketLibrary.Socket.Data
public string MessageId { get; set; }
public DateTime DateTime { get; set; }
public long BroadcasterId { get; set; }
- public HashSet Emotes { get; set; }
+ public ICollection Emotes { get; set; }
public long ChatterId { get; set; }
}
}
\ No newline at end of file
diff --git a/Socket/Data/ErrorMessage.cs b/Socket/Data/ErrorMessage.cs
deleted file mode 100644
index 7d6711b..0000000
--- a/Socket/Data/ErrorMessage.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace HermesSocketLibrary.Socket.Data
-{
- public class ErrorMessage
- {
- public Exception? Exception { get; set; }
- public string Message { get; set; }
-
- public ErrorMessage(Exception exception, string message)
- {
- Exception = exception;
- Message = message;
- }
-
- public ErrorMessage(string message)
- {
- Message = message;
- Exception = null;
- }
- }
-}
\ No newline at end of file
diff --git a/Socket/Data/LoggingMessage.cs b/Socket/Data/LoggingMessage.cs
new file mode 100644
index 0000000..ec24fed
--- /dev/null
+++ b/Socket/Data/LoggingMessage.cs
@@ -0,0 +1,41 @@
+namespace HermesSocketLibrary.Socket.Data
+{
+ public enum HermesLoggingLevel
+ {
+ Trace,
+ Debug,
+ Info,
+ Warn,
+ Error,
+ Critical,
+ None
+ }
+
+ public class LoggingMessage
+ {
+ public Exception? Exception { get; set; }
+ public string Message { get; set; }
+ public HermesLoggingLevel Level { get; set; }
+
+ public LoggingMessage(Exception exception, string message, HermesLoggingLevel level)
+ {
+ Exception = exception;
+ Message = message;
+ Level = level;
+ }
+
+ public LoggingMessage(string message, HermesLoggingLevel level)
+ {
+ Message = message;
+ Level = level;
+ Exception = null;
+ }
+
+ public LoggingMessage()
+ {
+ Message = string.Empty;
+ Level = HermesLoggingLevel.Info;
+ Exception = null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Socket/Data/RequestMessage.cs b/Socket/Data/RequestMessage.cs
index 80492df..f2a7e68 100644
--- a/Socket/Data/RequestMessage.cs
+++ b/Socket/Data/RequestMessage.cs
@@ -2,6 +2,7 @@ namespace HermesSocketLibrary.Socket.Data
{
public class RequestMessage
{
+ public string RequestId { get; set; }
public string? Type { get; set; }
public IDictionary? Data { get; set; }
public string? Nounce { get; set; }
diff --git a/Socket/Data/SocketMessage.cs b/Socket/Data/SocketMessage.cs
deleted file mode 100644
index a294a58..0000000
--- a/Socket/Data/SocketMessage.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace HermesSocketLibrary.Socket.Data
-{
- public class SocketMessage
- {
- [JsonPropertyName("op")]
- public int? OpCode { get; set; }
- [JsonPropertyName("d")]
- public object? Data { get; set; }
- }
-}
\ No newline at end of file