EventHandler: Add some events

This commit is contained in:
tt2468 2021-05-13 19:11:19 -07:00
parent 9a1b6dcd3a
commit ab12d5f39f
6 changed files with 212 additions and 23 deletions

View File

@ -75,6 +75,9 @@ set(obs-websocket_SOURCES
src/WebSocketProtocol.cpp
src/WebSocketSession.cpp
src/eventhandler/EventHandler.cpp
src/eventhandler/EventHandler_General.cpp
src/eventhandler/EventHandler_Config.cpp
src/eventhandler/EventHandler_Scenes.cpp
src/requesthandler/RequestHandler.cpp
src/requesthandler/RequestHandler_General.cpp
src/requesthandler/rpc/Request.cpp

View File

@ -2,6 +2,13 @@
#include "../plugin-macros.generated.h"
std::string GetCalldataString(const calldata_t *data, const char* name)
{
const char* value = nullptr;
calldata_get_string(data, name, &value);
return value;
}
EventHandler::EventHandler(WebSocketServerPtr webSocketServer) :
_webSocketServer(webSocketServer)
{
@ -13,8 +20,8 @@ EventHandler::EventHandler(WebSocketServerPtr webSocketServer) :
signal_handler_t* coreSignalHandler = obs_get_signal_handler();
if (coreSignalHandler) {
//signal_handler_connect(coreSignalHandler, "source_create", OnSourceCreate, this);
//signal_handler_connect(coreSignalHandler, "source_destroy", OnSourceDestroy, this);
signal_handler_connect(coreSignalHandler, "source_create", SourceCreatedMultiHandler, this);
signal_handler_connect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
}
obs_enum_sources([](void* param, obs_source_t* source) {
@ -36,8 +43,8 @@ EventHandler::~EventHandler()
signal_handler_t* coreSignalHandler = obs_get_signal_handler();
if (coreSignalHandler) {
//signal_handler_disconnect(coreSignalHandler, "source_destroy", OnSourceDestroy, this);
//signal_handler_disconnect(coreSignalHandler, "source_create", OnSourceCreate, this);
signal_handler_disconnect(coreSignalHandler, "source_destroy", SourceCreatedMultiHandler, this);
signal_handler_disconnect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
}
obs_enum_sources([](void* param, obs_source_t* source) {
@ -49,13 +56,6 @@ EventHandler::~EventHandler()
blog(LOG_INFO, "[EventHandler::~EventHandler] Finished.");
}
std::string EventHandler::GetCalldataString(const calldata_t *data, const char* name)
{
const char* value = nullptr;
calldata_get_string(data, name, &value);
return value;
}
void EventHandler::ConnectSourceSignals(obs_source_t *source)
{
if (!source || obs_source_removed(source))
@ -64,6 +64,8 @@ void EventHandler::ConnectSourceSignals(obs_source_t *source)
DisconnectSourceSignals(source);
signal_handler_t* sh = obs_source_get_signal_handler(source);
signal_handler_connect(sh, "rename", SourceRenamedMultiHandler, this);
}
void EventHandler::DisconnectSourceSignals(obs_source_t *source)
@ -72,6 +74,8 @@ void EventHandler::DisconnectSourceSignals(obs_source_t *source)
return;
signal_handler_t* sh = obs_source_get_signal_handler(source);
signal_handler_disconnect(sh, "rename", SourceRenamedMultiHandler, this);
}
void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_data) {
@ -79,31 +83,39 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
switch (event) {
// General
case OBS_FRONTEND_EVENT_FINISHED_LOADING:
break;
case OBS_FRONTEND_EVENT_EXIT:
eventHandler->HandleExitStarted();
break;
case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED:
eventHandler->HandleStudioModeStateChanged(true);
break;
case OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED:
eventHandler->HandleStudioModeStateChanged(false);
break;
// Config
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED:
eventHandler->HandleCurrentSceneCollectionChanged();
break;
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED:
eventHandler->HandleSceneCollectionListChanged();
break;
case OBS_FRONTEND_EVENT_PROFILE_CHANGED:
eventHandler->HandleCurrentProfileChanged();
break;
case OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED:
eventHandler->HandleProfileListChanged();
break;
// Scenes
case OBS_FRONTEND_EVENT_SCENE_CHANGED:
break;
case OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED:
eventHandler->HandleCurrentSceneChanged();
break;
case OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED:
eventHandler->HandleCurrentPreviewSceneChanged();
break;
case OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED:
eventHandler->HandleSceneListReindexed();
break;
// Transitions
@ -148,3 +160,80 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
break;
}
}
void EventHandler::SourceCreatedMultiHandler(void *param, calldata_t *data)
{
auto eventHandler = reinterpret_cast<EventHandler*>(data);
OBSSource source = GetCalldataPointer<obs_source_t>(data, "source");
if (!source)
return;
obs_source_type sourceType = obs_source_get_type(source);
switch (sourceType) {
case OBS_SOURCE_TYPE_INPUT:
eventHandler->HandleSceneCreated(source);
break;
case OBS_SOURCE_TYPE_FILTER:
break;
case OBS_SOURCE_TYPE_TRANSITION:
break;
case OBS_SOURCE_TYPE_SCENE:
break;
default:
break;
}
}
void EventHandler::SourceRemovedMultiHandler(void *param, calldata_t *data)
{
auto eventHandler = reinterpret_cast<EventHandler*>(data);
OBSSource source = GetCalldataPointer<obs_source_t>(data, "source");
if (!source)
return;
obs_source_type sourceType = obs_source_get_type(source);
switch (sourceType) {
case OBS_SOURCE_TYPE_INPUT:
eventHandler->HandleSceneRemoved(source);
break;
case OBS_SOURCE_TYPE_FILTER:
break;
case OBS_SOURCE_TYPE_TRANSITION:
break;
case OBS_SOURCE_TYPE_SCENE:
break;
default:
break;
}
}
void EventHandler::SourceRenamedMultiHandler(void *param, calldata_t *data)
{
auto eventHandler = reinterpret_cast<EventHandler*>(data);
OBSSource source = GetCalldataPointer<obs_source_t>(data, "source");
if (!source)
return;
std::string oldSourceName = GetCalldataString(data, "old_name");
std::string sourceName = GetCalldataString(data, "new_name");
if (oldSourceName.empty() || sourceName.empty())
return;
obs_source_type sourceType = obs_source_get_type(source);
switch (sourceType) {
case OBS_SOURCE_TYPE_INPUT:
eventHandler->HandleSceneNameChanged(source, oldSourceName, sourceName);
break;
case OBS_SOURCE_TYPE_FILTER:
break;
case OBS_SOURCE_TYPE_TRANSITION:
break;
case OBS_SOURCE_TYPE_SCENE:
break;
default:
break;
}
}

View File

@ -8,20 +8,20 @@
#include "../WebSocketServer.h"
#include "types/EventSubscriptions.h"
template <typename T> T* GetCalldataPointer(const calldata_t *data, const char* name) {
void* ptr = nullptr;
calldata_get_ptr(data, name, &ptr);
return reinterpret_cast<T*>(ptr);
}
std::string GetCalldataString(const calldata_t *data, const char* name);
class EventHandler
{
public:
EventHandler(WebSocketServerPtr webSocketServer);
~EventHandler();
template <typename T> T* GetCalldataPointer(const calldata_t *data, const char* name) {
void* ptr = nullptr;
calldata_get_ptr(data, name, &ptr);
return reinterpret_cast<T*>(ptr);
}
static std::string GetCalldataString(const calldata_t *data, const char* name);
private:
WebSocketServerPtr _webSocketServer;
os_cpu_usage_info_t *_cpuUsageInfo;
@ -29,5 +29,31 @@ class EventHandler
void ConnectSourceSignals(obs_source_t *source);
void DisconnectSourceSignals(obs_source_t *source);
// Signal handler: frontend
static void OnFrontendEvent(enum obs_frontend_event event, void *private_data);
// Signal handler: libobs
static void SourceCreatedMultiHandler(void *param, calldata_t *data);
static void SourceRemovedMultiHandler(void *param, calldata_t *data);
// Signal handler: source
static void SourceRenamedMultiHandler(void *param, calldata_t *data);
// General
void HandleExitStarted();
void HandleStudioModeStateChanged(bool enabled);
// Config
void HandleCurrentSceneCollectionChanged();
void HandleSceneCollectionListChanged();
void HandleCurrentProfileChanged();
void HandleProfileListChanged();
// Scenes
void HandleSceneCreated(obs_source_t *source);
void HandleSceneRemoved(obs_source_t *source);
void HandleSceneNameChanged(obs_source_t *source, std::string oldSceneName, std::string sceneName);
void HandleCurrentSceneChanged();
void HandleCurrentPreviewSceneChanged();
void HandleSceneListReindexed();
};

View File

@ -0,0 +1,23 @@
#include "EventHandler.h"
#include "../plugin-macros.generated.h"
void EventHandler::HandleCurrentSceneCollectionChanged()
{
;
}
void EventHandler::HandleSceneCollectionListChanged()
{
;
}
void EventHandler::HandleCurrentProfileChanged()
{
;
}
void EventHandler::HandleProfileListChanged()
{
;
}

View File

@ -0,0 +1,15 @@
#include "EventHandler.h"
#include "../plugin-macros.generated.h"
void EventHandler::HandleExitStarted()
{
_webSocketServer->BroadcastEvent(EventSubscriptions::General, "ExitStarted");
}
void EventHandler::HandleStudioModeStateChanged(bool enabled)
{
json eventData;
eventData["studioModeEnabled"] = enabled;
_webSocketServer->BroadcastEvent(EventSubscriptions::General, "StudioModeStateChanged", eventData);
}

View File

@ -0,0 +1,33 @@
#include "EventHandler.h"
#include "../plugin-macros.generated.h"
void EventHandler::HandleSceneCreated(obs_source_t *source)
{
;
}
void EventHandler::HandleSceneRemoved(obs_source_t *source)
{
;
}
void EventHandler::HandleSceneNameChanged(obs_source_t *source, std::string oldSceneName, std::string sceneName)
{
;
}
void EventHandler::HandleCurrentSceneChanged()
{
;
}
void EventHandler::HandleCurrentPreviewSceneChanged()
{
;
}
void EventHandler::HandleSceneListReindexed()
{
;
}