mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
eventhandler: Split some handling code into multi handlers
Code cleanup
This commit is contained in:
parent
60dbcc1b66
commit
23f883d906
@ -267,91 +267,10 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
|
|||||||
switch (event) {
|
switch (event) {
|
||||||
// General
|
// General
|
||||||
case OBS_FRONTEND_EVENT_FINISHED_LOADING:
|
case OBS_FRONTEND_EVENT_FINISHED_LOADING:
|
||||||
blog_debug(
|
eventHandler->FrontendFinishedLoadingMultiHandler();
|
||||||
"[EventHandler::OnFrontendEvent] OBS has finished loading. Connecting final handlers and enabling events...");
|
|
||||||
|
|
||||||
// Connect source signals and enable events only after OBS has fully loaded (to reduce extra logging).
|
|
||||||
eventHandler->_obsLoaded.store(true);
|
|
||||||
|
|
||||||
// In the case that plugins become hotloadable, this will have to go back into `EventHandler::EventHandler()`
|
|
||||||
// Enumerate inputs and connect each one
|
|
||||||
{
|
|
||||||
auto enumInputs = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->ConnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_sources(enumInputs, private_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate scenes and connect each one
|
|
||||||
{
|
|
||||||
auto enumScenes = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->ConnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_scenes(enumScenes, private_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate all scene transitions and connect each one
|
|
||||||
{
|
|
||||||
obs_frontend_source_list transitions = {};
|
|
||||||
obs_frontend_get_transitions(&transitions);
|
|
||||||
for (size_t i = 0; i < transitions.sources.num; i++) {
|
|
||||||
obs_source_t *transition = transitions.sources.array[i];
|
|
||||||
eventHandler->ConnectSourceSignals(transition);
|
|
||||||
}
|
|
||||||
obs_frontend_source_list_free(&transitions);
|
|
||||||
}
|
|
||||||
|
|
||||||
blog_debug("[EventHandler::OnFrontendEvent] Finished.");
|
|
||||||
|
|
||||||
if (eventHandler->_obsLoadedCallback)
|
|
||||||
eventHandler->_obsLoadedCallback();
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_EXIT:
|
case OBS_FRONTEND_EVENT_EXIT:
|
||||||
eventHandler->HandleExitStarted();
|
eventHandler->FrontendExitMultiHandler();
|
||||||
|
|
||||||
blog_debug("[EventHandler::OnFrontendEvent] OBS is unloading. Disabling events...");
|
|
||||||
// Disconnect source signals and disable events when OBS starts unloading (to reduce extra logging).
|
|
||||||
eventHandler->_obsLoaded.store(false);
|
|
||||||
|
|
||||||
// In the case that plugins become hotloadable, this will have to go back into `EventHandler::~EventHandler()`
|
|
||||||
// Enumerate inputs and disconnect each one
|
|
||||||
{
|
|
||||||
auto enumInputs = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->DisconnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_sources(enumInputs, private_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate scenes and disconnect each one
|
|
||||||
{
|
|
||||||
auto enumScenes = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->DisconnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_scenes(enumScenes, private_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate all scene transitions and disconnect each one
|
|
||||||
{
|
|
||||||
obs_frontend_source_list transitions = {};
|
|
||||||
obs_frontend_get_transitions(&transitions);
|
|
||||||
for (size_t i = 0; i < transitions.sources.num; i++) {
|
|
||||||
obs_source_t *transition = transitions.sources.array[i];
|
|
||||||
eventHandler->DisconnectSourceSignals(transition);
|
|
||||||
}
|
|
||||||
obs_frontend_source_list_free(&transitions);
|
|
||||||
}
|
|
||||||
|
|
||||||
blog_debug("[EventHandler::OnFrontendEvent] Finished.");
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Config
|
// Config
|
||||||
@ -487,6 +406,96 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventHandler::FrontendFinishedLoadingMultiHandler()
|
||||||
|
{
|
||||||
|
blog_debug(
|
||||||
|
"[EventHandler::FrontendFinishedLoadingMultiHandler] OBS has finished loading. Connecting final handlers and enabling events...");
|
||||||
|
|
||||||
|
// Connect source signals and enable events only after OBS has fully loaded (to reduce extra logging).
|
||||||
|
_obsLoaded.store(true);
|
||||||
|
|
||||||
|
// In the case that plugins become hotloadable, this will have to go back into `EventHandler::EventHandler()`
|
||||||
|
// Enumerate inputs and connect each one
|
||||||
|
{
|
||||||
|
auto enumInputs = [](void *param, obs_source_t *source) {
|
||||||
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
eventHandler->ConnectSourceSignals(source);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
obs_enum_sources(enumInputs, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enumerate scenes and connect each one
|
||||||
|
{
|
||||||
|
auto enumScenes = [](void *param, obs_source_t *source) {
|
||||||
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
eventHandler->ConnectSourceSignals(source);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
obs_enum_scenes(enumScenes, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enumerate all scene transitions and connect each one
|
||||||
|
{
|
||||||
|
obs_frontend_source_list transitions = {};
|
||||||
|
obs_frontend_get_transitions(&transitions);
|
||||||
|
for (size_t i = 0; i < transitions.sources.num; i++) {
|
||||||
|
obs_source_t *transition = transitions.sources.array[i];
|
||||||
|
ConnectSourceSignals(transition);
|
||||||
|
}
|
||||||
|
obs_frontend_source_list_free(&transitions);
|
||||||
|
}
|
||||||
|
|
||||||
|
blog_debug("[EventHandler::FrontendFinishedLoadingMultiHandler] Finished.");
|
||||||
|
|
||||||
|
if (_obsLoadedCallback)
|
||||||
|
_obsLoadedCallback();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventHandler::FrontendExitMultiHandler()
|
||||||
|
{
|
||||||
|
HandleExitStarted();
|
||||||
|
|
||||||
|
blog_debug("[EventHandler::FrontendExitMultiHandler] OBS is unloading. Disabling events...");
|
||||||
|
|
||||||
|
// Disconnect source signals and disable events when OBS starts unloading (to reduce extra logging).
|
||||||
|
_obsLoaded.store(false);
|
||||||
|
|
||||||
|
// In the case that plugins become hotloadable, this will have to go back into `EventHandler::~EventHandler()`
|
||||||
|
// Enumerate inputs and disconnect each one
|
||||||
|
{
|
||||||
|
auto enumInputs = [](void *param, obs_source_t *source) {
|
||||||
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
eventHandler->DisconnectSourceSignals(source);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
obs_enum_sources(enumInputs, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enumerate scenes and disconnect each one
|
||||||
|
{
|
||||||
|
auto enumScenes = [](void *param, obs_source_t *source) {
|
||||||
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
eventHandler->DisconnectSourceSignals(source);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
obs_enum_scenes(enumScenes, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enumerate all scene transitions and disconnect each one
|
||||||
|
{
|
||||||
|
obs_frontend_source_list transitions = {};
|
||||||
|
obs_frontend_get_transitions(&transitions);
|
||||||
|
for (size_t i = 0; i < transitions.sources.num; i++) {
|
||||||
|
obs_source_t *transition = transitions.sources.array[i];
|
||||||
|
DisconnectSourceSignals(transition);
|
||||||
|
}
|
||||||
|
obs_frontend_source_list_free(&transitions);
|
||||||
|
}
|
||||||
|
|
||||||
|
blog_debug("[EventHandler::FrontendExitMultiHandler] Finished.");
|
||||||
|
}
|
||||||
|
|
||||||
// Only called for creation of a public source
|
// Only called for creation of a public source
|
||||||
void EventHandler::SourceCreatedMultiHandler(void *param, calldata_t *data)
|
void EventHandler::SourceCreatedMultiHandler(void *param, calldata_t *data)
|
||||||
{
|
{
|
||||||
|
@ -61,6 +61,8 @@ private:
|
|||||||
|
|
||||||
// Signal handler: frontend
|
// 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);
|
||||||
|
void FrontendFinishedLoadingMultiHandler();
|
||||||
|
void FrontendExitMultiHandler();
|
||||||
|
|
||||||
// Signal handler: libobs
|
// Signal handler: libobs
|
||||||
static void SourceCreatedMultiHandler(void *param, calldata_t *data);
|
static void SourceCreatedMultiHandler(void *param, calldata_t *data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user