mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
EventHandler: Add some events
This commit is contained in:
parent
9a1b6dcd3a
commit
ab12d5f39f
@ -75,6 +75,9 @@ set(obs-websocket_SOURCES
|
|||||||
src/WebSocketProtocol.cpp
|
src/WebSocketProtocol.cpp
|
||||||
src/WebSocketSession.cpp
|
src/WebSocketSession.cpp
|
||||||
src/eventhandler/EventHandler.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.cpp
|
||||||
src/requesthandler/RequestHandler_General.cpp
|
src/requesthandler/RequestHandler_General.cpp
|
||||||
src/requesthandler/rpc/Request.cpp
|
src/requesthandler/rpc/Request.cpp
|
||||||
|
@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
#include "../plugin-macros.generated.h"
|
#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) :
|
EventHandler::EventHandler(WebSocketServerPtr webSocketServer) :
|
||||||
_webSocketServer(webSocketServer)
|
_webSocketServer(webSocketServer)
|
||||||
{
|
{
|
||||||
@ -13,8 +20,8 @@ EventHandler::EventHandler(WebSocketServerPtr webSocketServer) :
|
|||||||
|
|
||||||
signal_handler_t* coreSignalHandler = obs_get_signal_handler();
|
signal_handler_t* coreSignalHandler = obs_get_signal_handler();
|
||||||
if (coreSignalHandler) {
|
if (coreSignalHandler) {
|
||||||
//signal_handler_connect(coreSignalHandler, "source_create", OnSourceCreate, this);
|
signal_handler_connect(coreSignalHandler, "source_create", SourceCreatedMultiHandler, this);
|
||||||
//signal_handler_connect(coreSignalHandler, "source_destroy", OnSourceDestroy, this);
|
signal_handler_connect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
obs_enum_sources([](void* param, obs_source_t* source) {
|
obs_enum_sources([](void* param, obs_source_t* source) {
|
||||||
@ -36,8 +43,8 @@ EventHandler::~EventHandler()
|
|||||||
|
|
||||||
signal_handler_t* coreSignalHandler = obs_get_signal_handler();
|
signal_handler_t* coreSignalHandler = obs_get_signal_handler();
|
||||||
if (coreSignalHandler) {
|
if (coreSignalHandler) {
|
||||||
//signal_handler_disconnect(coreSignalHandler, "source_destroy", OnSourceDestroy, this);
|
signal_handler_disconnect(coreSignalHandler, "source_destroy", SourceCreatedMultiHandler, this);
|
||||||
//signal_handler_disconnect(coreSignalHandler, "source_create", OnSourceCreate, this);
|
signal_handler_disconnect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
obs_enum_sources([](void* param, obs_source_t* source) {
|
obs_enum_sources([](void* param, obs_source_t* source) {
|
||||||
@ -49,13 +56,6 @@ EventHandler::~EventHandler()
|
|||||||
blog(LOG_INFO, "[EventHandler::~EventHandler] Finished.");
|
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)
|
void EventHandler::ConnectSourceSignals(obs_source_t *source)
|
||||||
{
|
{
|
||||||
if (!source || obs_source_removed(source))
|
if (!source || obs_source_removed(source))
|
||||||
@ -64,6 +64,8 @@ void EventHandler::ConnectSourceSignals(obs_source_t *source)
|
|||||||
DisconnectSourceSignals(source);
|
DisconnectSourceSignals(source);
|
||||||
|
|
||||||
signal_handler_t* sh = obs_source_get_signal_handler(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)
|
void EventHandler::DisconnectSourceSignals(obs_source_t *source)
|
||||||
@ -72,6 +74,8 @@ void EventHandler::DisconnectSourceSignals(obs_source_t *source)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
signal_handler_t* sh = obs_source_get_signal_handler(source);
|
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) {
|
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) {
|
switch (event) {
|
||||||
// General
|
// General
|
||||||
case OBS_FRONTEND_EVENT_FINISHED_LOADING:
|
|
||||||
break;
|
|
||||||
case OBS_FRONTEND_EVENT_EXIT:
|
case OBS_FRONTEND_EVENT_EXIT:
|
||||||
|
eventHandler->HandleExitStarted();
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED:
|
case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED:
|
||||||
|
eventHandler->HandleStudioModeStateChanged(true);
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED:
|
case OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED:
|
||||||
|
eventHandler->HandleStudioModeStateChanged(false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Config
|
// Config
|
||||||
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED:
|
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED:
|
||||||
|
eventHandler->HandleCurrentSceneCollectionChanged();
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED:
|
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED:
|
||||||
|
eventHandler->HandleSceneCollectionListChanged();
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_PROFILE_CHANGED:
|
case OBS_FRONTEND_EVENT_PROFILE_CHANGED:
|
||||||
|
eventHandler->HandleCurrentProfileChanged();
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED:
|
case OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED:
|
||||||
|
eventHandler->HandleProfileListChanged();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Scenes
|
// Scenes
|
||||||
case OBS_FRONTEND_EVENT_SCENE_CHANGED:
|
case OBS_FRONTEND_EVENT_SCENE_CHANGED:
|
||||||
break;
|
eventHandler->HandleCurrentSceneChanged();
|
||||||
case OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED:
|
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED:
|
case OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED:
|
||||||
|
eventHandler->HandleCurrentPreviewSceneChanged();
|
||||||
|
break;
|
||||||
|
case OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED:
|
||||||
|
eventHandler->HandleSceneListReindexed();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Transitions
|
// Transitions
|
||||||
@ -148,3 +160,80 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
|
|||||||
break;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -8,20 +8,20 @@
|
|||||||
#include "../WebSocketServer.h"
|
#include "../WebSocketServer.h"
|
||||||
#include "types/EventSubscriptions.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
|
class EventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EventHandler(WebSocketServerPtr webSocketServer);
|
EventHandler(WebSocketServerPtr webSocketServer);
|
||||||
~EventHandler();
|
~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:
|
private:
|
||||||
WebSocketServerPtr _webSocketServer;
|
WebSocketServerPtr _webSocketServer;
|
||||||
os_cpu_usage_info_t *_cpuUsageInfo;
|
os_cpu_usage_info_t *_cpuUsageInfo;
|
||||||
@ -29,5 +29,31 @@ class EventHandler
|
|||||||
void ConnectSourceSignals(obs_source_t *source);
|
void ConnectSourceSignals(obs_source_t *source);
|
||||||
void DisconnectSourceSignals(obs_source_t *source);
|
void DisconnectSourceSignals(obs_source_t *source);
|
||||||
|
|
||||||
|
// Signal handler: frontend
|
||||||
static void OnFrontendEvent(enum obs_frontend_event event, void *private_data);
|
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();
|
||||||
};
|
};
|
||||||
|
23
src/eventhandler/EventHandler_Config.cpp
Normal file
23
src/eventhandler/EventHandler_Config.cpp
Normal 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()
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
15
src/eventhandler/EventHandler_General.cpp
Normal file
15
src/eventhandler/EventHandler_General.cpp
Normal 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);
|
||||||
|
}
|
33
src/eventhandler/EventHandler_Scenes.cpp
Normal file
33
src/eventhandler/EventHandler_Scenes.cpp
Normal 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()
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user