Changed command dictionary to a command tree. Fixed various requests. OBS reconnection added if identified previously.

This commit is contained in:
Tom
2024-07-19 16:56:41 +00:00
parent e6b3819356
commit 472bfcee5d
56 changed files with 1943 additions and 1553 deletions

View File

@@ -5,22 +5,16 @@ using Microsoft.Extensions.DependencyInjection;
using Serilog;
using Serilog.Context;
using TwitchChatTTS.OBS.Socket.Data;
using TwitchChatTTS.OBS.Socket.Manager;
namespace TwitchChatTTS.OBS.Socket.Handlers
{
public class RequestBatchResponseHandler : IWebSocketHandler
{
private readonly IWebSocketHandler _requestResponseHandler;
private readonly ILogger _logger;
public int OperationCode { get; } = 9;
public RequestBatchResponseHandler(
[FromKeyedServices("obs-requestresponse")] IWebSocketHandler requestResponseHandler,
ILogger logger
)
public RequestBatchResponseHandler(ILogger logger)
{
_requestResponseHandler = requestResponseHandler;
_logger = logger;
}
@@ -28,40 +22,38 @@ namespace TwitchChatTTS.OBS.Socket.Handlers
{
if (data is not RequestBatchResponseMessage message || message == null)
return;
if (sender is not OBSSocketClient obs)
return;
using (LogContext.PushProperty("obsrid", message.RequestId))
var results = message.Results.ToList();
_logger.Debug($"Received request batch response of {results.Count} messages.");
int count = results.Count;
for (int i = 0; i < count; i++)
{
if (results[i] == null)
continue;
var results = message.Results.ToList();
_logger.Debug($"Received request batch response of {results.Count} messages.");
int count = results.Count;
for (int i = 0; i < count; i++)
try
{
if (results[i] == null)
_logger.Debug($"Request response from OBS request batch #{i + 1}/{count}: {results[i]}");
var response = JsonSerializer.Deserialize<RequestResponseMessage>(results[i].ToString()!, new JsonSerializerOptions()
{
PropertyNameCaseInsensitive = false,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
});
if (response == null)
continue;
try
{
_logger.Debug($"Request response from OBS request batch #{i + 1}/{count}: {results[i]}");
var response = JsonSerializer.Deserialize<RequestResponseMessage>(results[i].ToString()!, new JsonSerializerOptions()
{
PropertyNameCaseInsensitive = false,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
});
if (response == null)
continue;
await _requestResponseHandler.Execute(sender, response);
}
catch (Exception ex)
{
_logger.Error(ex, "Failed to process an item in a request batch message.");
}
await obs.ExecuteRequest(response);
}
catch (Exception ex)
{
_logger.Error(ex, "Failed to process an item in a request batch message.");
}
_logger.Debug($"Finished processing all request in this batch.");
}
_logger.Debug($"Finished processing all request in this batch.");
}
}
}