Added groups & permissions. Fixed 7tv reconnection. Added more subcommands for refresh.
This commit is contained in:
@@ -2,16 +2,19 @@ using CommonSocketLibrary.Abstract;
|
||||
using CommonSocketLibrary.Common;
|
||||
using Serilog;
|
||||
using TwitchChatTTS.OBS.Socket.Data;
|
||||
using TwitchChatTTS.OBS.Socket.Manager;
|
||||
|
||||
namespace TwitchChatTTS.OBS.Socket.Handlers
|
||||
{
|
||||
public class IdentifiedHandler : IWebSocketHandler
|
||||
{
|
||||
private readonly OBSManager _manager;
|
||||
private readonly ILogger _logger;
|
||||
public int OperationCode { get; } = 2;
|
||||
|
||||
public IdentifiedHandler(ILogger logger)
|
||||
public IdentifiedHandler(OBSManager manager, ILogger logger)
|
||||
{
|
||||
_manager = manager;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@@ -22,6 +25,15 @@ namespace TwitchChatTTS.OBS.Socket.Handlers
|
||||
|
||||
sender.Connected = true;
|
||||
_logger.Information("Connected to OBS via rpc version " + message.NegotiatedRpcVersion + ".");
|
||||
|
||||
try
|
||||
{
|
||||
await _manager.GetGroupList(async groups => await _manager.GetGroupSceneItemList(groups));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.Error(e, "Failed to load OBS group info upon OBS identification.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,7 @@ namespace TwitchChatTTS.OBS.Socket.Handlers
|
||||
try
|
||||
{
|
||||
_logger.Debug($"Request response from OBS request batch #{i + 1}/{count}: {results[i]}");
|
||||
var response = JsonSerializer.Deserialize<RequestResponseMessage>(results[i].ToString(), new JsonSerializerOptions()
|
||||
var response = JsonSerializer.Deserialize<RequestResponseMessage>(results[i].ToString()!, new JsonSerializerOptions()
|
||||
{
|
||||
PropertyNameCaseInsensitive = false,
|
||||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Text.Json;
|
||||
using CommonSocketLibrary.Abstract;
|
||||
using CommonSocketLibrary.Common;
|
||||
using Serilog;
|
||||
@@ -72,10 +73,7 @@ namespace TwitchChatTTS.OBS.Socket.Handlers
|
||||
_logger.Debug($"Found the scene item by name [scene: {sceneName}][source: {sourceName}][id: {sceneItemId}][obs request id: {message.RequestId}].");
|
||||
//_manager.AddSourceId(sceneName.ToString(), sourceName.ToString(), (long) sceneItemId);
|
||||
|
||||
requestData.ResponseValues = new Dictionary<string, object>
|
||||
{
|
||||
{ "sceneItemId", sceneItemId }
|
||||
};
|
||||
requestData.ResponseValues = message.ResponseData;
|
||||
break;
|
||||
}
|
||||
case "GetSceneItemTransform":
|
||||
@@ -102,10 +100,7 @@ namespace TwitchChatTTS.OBS.Socket.Handlers
|
||||
}
|
||||
|
||||
_logger.Debug($"Fetched OBS transformation data [scene: {sceneName}][scene item id: {sceneItemId}][transformation: {transformData}][obs request id: {message.RequestId}]");
|
||||
requestData.ResponseValues = new Dictionary<string, object>
|
||||
{
|
||||
{ "sceneItemTransform", transformData }
|
||||
};
|
||||
requestData.ResponseValues = message.ResponseData;
|
||||
break;
|
||||
}
|
||||
case "GetSceneItemEnabled":
|
||||
@@ -132,10 +127,7 @@ namespace TwitchChatTTS.OBS.Socket.Handlers
|
||||
}
|
||||
|
||||
_logger.Debug($"Fetched OBS scene item visibility [scene: {sceneName}][scene item id: {sceneItemId}][visibility: {sceneItemVisibility}][obs request id: {message.RequestId}]");
|
||||
requestData.ResponseValues = new Dictionary<string, object>
|
||||
{
|
||||
{ "sceneItemEnabled", sceneItemVisibility }
|
||||
};
|
||||
requestData.ResponseValues = message.ResponseData;
|
||||
break;
|
||||
}
|
||||
case "SetSceneItemTransform":
|
||||
@@ -168,11 +160,68 @@ namespace TwitchChatTTS.OBS.Socket.Handlers
|
||||
_logger.Debug($"Received response from OBS for updating scene item visibility [scene: {sceneName}][scene item id: {sceneItemId}][obs request id: {message.RequestId}]");
|
||||
break;
|
||||
}
|
||||
case "GetGroupList":
|
||||
{
|
||||
if (message.ResponseData == null)
|
||||
{
|
||||
_logger.Warning($"OBS Response is null [obs request id: {message.RequestId}]");
|
||||
return;
|
||||
}
|
||||
if (!message.ResponseData.TryGetValue("groups", out object? value) || value == null)
|
||||
{
|
||||
_logger.Warning($"Failed to fetch the scene item visibility [obs request id: {message.RequestId}]");
|
||||
return;
|
||||
}
|
||||
var groups = JsonSerializer.Deserialize<IEnumerable<string>>(value.ToString());
|
||||
_logger.Debug($"Fetched OBS groups [obs request id: {message.RequestId}]");
|
||||
requestData.ResponseValues = new Dictionary<string, object>()
|
||||
{
|
||||
{ "groups", groups }
|
||||
};
|
||||
break;
|
||||
}
|
||||
case "GetGroupSceneItemList":
|
||||
{
|
||||
if (!request.RequestData.TryGetValue("sceneName", out object? sceneName) || sceneName == null)
|
||||
{
|
||||
_logger.Warning($"Failed to find the scene name that was requested [obs request id: {message.RequestId}]");
|
||||
return;
|
||||
}
|
||||
if (message.ResponseData == null)
|
||||
{
|
||||
_logger.Warning($"OBS Response is null [scene: {sceneName}][obs request id: {message.RequestId}]");
|
||||
return;
|
||||
}
|
||||
if (!message.ResponseData.TryGetValue("sceneItems", out object? value) || value == null)
|
||||
{
|
||||
_logger.Warning($"Failed to fetch the scene item visibility [scene: {sceneName}][obs request id: {message.RequestId}]");
|
||||
return;
|
||||
}
|
||||
_logger.Debug($"Fetched OBS scene items in group [scene: {sceneName}][obs request id: {message.RequestId}]");
|
||||
var sceneItems = JsonSerializer.Deserialize<IEnumerable<OBSSceneItem>>(value.ToString()!, new JsonSerializerOptions()
|
||||
{
|
||||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
|
||||
});
|
||||
if (sceneItems == null)
|
||||
{
|
||||
_logger.Warning($"Failed to deserialize the data received [scene: {sceneName}][obs request id: {message.RequestId}]");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var sceneItem in sceneItems)
|
||||
_manager.AddSourceId(sceneItem.SourceName, sceneItem.SceneItemId);
|
||||
|
||||
requestData.ResponseValues = new Dictionary<string, object>()
|
||||
{
|
||||
{ "groups", sceneItems }
|
||||
};
|
||||
break;
|
||||
}
|
||||
case "Sleep":
|
||||
{
|
||||
if (!request.RequestData.TryGetValue("sleepMillis", out object? sleepMillis) || sleepMillis == null)
|
||||
{
|
||||
_logger.Warning($"Failed to find the scene name that was requested [obs request id: {message.RequestId}]");
|
||||
_logger.Warning($"Failed to find the amount of time to sleep for [obs request id: {message.RequestId}]");
|
||||
return;
|
||||
}
|
||||
_logger.Debug($"Received response from OBS for sleeping [sleep: {sleepMillis}][obs request id: {message.RequestId}]");
|
||||
|
||||
Reference in New Issue
Block a user