Using Serilog. Added partial OBS batch request support. Added update checking. Added more commands. Added enabled/disabled TTS voices. And more.
This commit is contained in:
60
OBS/Socket/Manager/OBSBatchRequestManager.cs
Normal file
60
OBS/Socket/Manager/OBSBatchRequestManager.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using CommonSocketLibrary.Abstract;
|
||||
using CommonSocketLibrary.Common;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Serilog;
|
||||
using TwitchChatTTS.OBS.Socket.Data;
|
||||
|
||||
namespace TwitchChatTTS.OBS.Socket.Manager
|
||||
{
|
||||
public class OBSRequestBatchManager
|
||||
{
|
||||
private IDictionary<string, OBSRequestBatchData> _requests;
|
||||
private IServiceProvider _serviceProvider;
|
||||
private ILogger _logger;
|
||||
|
||||
public OBSRequestBatchManager(IServiceProvider serviceProvider, ILogger logger)
|
||||
{
|
||||
_serviceProvider = serviceProvider;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
|
||||
public async Task Send(long broadcasterId, IEnumerable<WebSocketMessage> messages) {
|
||||
string uid = GenerateUniqueIdentifier();
|
||||
var data = new OBSRequestBatchData(broadcasterId, uid, new List<Type>());
|
||||
_logger.Debug($"Sending request batch of {messages.Count()} messages.");
|
||||
|
||||
foreach (WebSocketMessage message in messages)
|
||||
data.RequestTypes.Add(message.GetType());
|
||||
|
||||
var client = _serviceProvider.GetRequiredKeyedService<SocketClient<WebSocketMessage>>("obs");
|
||||
await client.Send(8, new RequestBatchMessage(uid, messages));
|
||||
}
|
||||
|
||||
public OBSRequestBatchData? Take(string id) {
|
||||
if (_requests.TryGetValue(id, out var request)) {
|
||||
_requests.Remove(id);
|
||||
return request;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private string GenerateUniqueIdentifier()
|
||||
{
|
||||
return Guid.NewGuid().ToString("X");
|
||||
}
|
||||
}
|
||||
|
||||
public class OBSRequestBatchData
|
||||
{
|
||||
public long BroadcasterId { get; }
|
||||
public string RequestId { get; }
|
||||
public IList<Type> RequestTypes { get; }
|
||||
|
||||
public OBSRequestBatchData(long bid, string rid, IList<Type> types) {
|
||||
BroadcasterId = bid;
|
||||
RequestId = rid;
|
||||
RequestTypes = types;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Serilog;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using CommonSocketLibrary.Socket.Manager;
|
||||
using CommonSocketLibrary.Common;
|
||||
@@ -7,23 +7,26 @@ namespace TwitchChatTTS.OBS.Socket.Manager
|
||||
{
|
||||
public class OBSHandlerManager : WebSocketHandlerManager
|
||||
{
|
||||
public OBSHandlerManager(ILogger<OBSHandlerManager> logger, IServiceProvider provider) : base(logger) {
|
||||
public OBSHandlerManager(ILogger logger, IServiceProvider provider) : base(logger)
|
||||
{
|
||||
var basetype = typeof(IWebSocketHandler);
|
||||
var assembly = GetType().Assembly;
|
||||
var types = assembly.GetTypes().Where(t => t.IsClass && basetype.IsAssignableFrom(t) && t.AssemblyQualifiedName?.Contains(".OBS.") == true);
|
||||
|
||||
foreach (var type in types) {
|
||||
foreach (var type in types)
|
||||
{
|
||||
var key = "obs-" + type.Name.Replace("Handlers", "Hand#lers")
|
||||
.Replace("Handler", "")
|
||||
.Replace("Hand#lers", "Handlers")
|
||||
.ToLower();
|
||||
var handler = provider.GetKeyedService<IWebSocketHandler>(key);
|
||||
if (handler == null) {
|
||||
logger.LogError("Failed to find obs websocket handler: " + type.AssemblyQualifiedName);
|
||||
if (handler == null)
|
||||
{
|
||||
logger.Error("Failed to find obs websocket handler: " + type.AssemblyQualifiedName);
|
||||
continue;
|
||||
}
|
||||
|
||||
Logger.LogDebug($"Linked type {type.AssemblyQualifiedName} to obs websocket handler {handler.GetType().AssemblyQualifiedName}.");
|
||||
|
||||
Logger.Debug($"Linked type {type.AssemblyQualifiedName} to obs websocket handler {handler.GetType().AssemblyQualifiedName}.");
|
||||
Add(handler);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ using CommonSocketLibrary.Abstract;
|
||||
using CommonSocketLibrary.Common;
|
||||
using CommonSocketLibrary.Socket.Manager;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Serilog;
|
||||
|
||||
namespace TwitchChatTTS.OBS.Socket.Manager
|
||||
{
|
||||
public class OBSHandlerTypeManager : WebSocketHandlerTypeManager
|
||||
{
|
||||
public OBSHandlerTypeManager(
|
||||
ILogger<OBSHandlerTypeManager> factory,
|
||||
ILogger factory,
|
||||
[FromKeyedServices("obs")] HandlerManager<WebSocketClient, IWebSocketHandler> handlers
|
||||
) : base(factory, handlers)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user