obs-websocket/src/eventhandler/EventHandler.h

124 lines
5.2 KiB
C
Raw Normal View History

2021-05-10 22:48:41 +00:00
#pragma once
2021-05-10 23:54:48 +00:00
#include <atomic>
2021-05-10 23:54:48 +00:00
#include <obs.hpp>
#include <obs-frontend-api.h>
#include <util/platform.h>
#include "types/EventSubscription.h"
2021-05-10 23:54:48 +00:00
#include "../obs-websocket.h"
#include "../utils/Obs.h"
2021-09-04 17:47:51 +00:00
#include "../plugin-macros.generated.h"
2021-05-10 23:54:48 +00:00
2021-05-14 02:11:19 +00:00
template <typename T> T* GetCalldataPointer(const calldata_t *data, const char* name) {
void *ptr = nullptr;
2021-05-14 02:11:19 +00:00
calldata_get_ptr(data, name, &ptr);
return reinterpret_cast<T*>(ptr);
}
2021-05-10 23:54:48 +00:00
class EventHandler
{
public:
EventHandler();
2021-05-10 23:54:48 +00:00
~EventHandler();
typedef std::function<void(uint64_t, std::string, json, uint8_t)> BroadcastCallback;
void SetBroadcastCallback(BroadcastCallback cb);
typedef std::function<void()> ObsLoadedCallback;
void SetObsLoadedCallback(ObsLoadedCallback cb);
void ProcessSubscription(uint64_t eventSubscriptions);
void ProcessUnsubscription(uint64_t eventSubscriptions);
2021-05-10 23:54:48 +00:00
private:
BroadcastCallback _broadcastCallback;
ObsLoadedCallback _obsLoadedCallback;
2021-05-10 23:54:48 +00:00
std::atomic<bool> _obsLoaded;
std::atomic<uint64_t> _inputVolumeMetersRef;
std::atomic<uint64_t> _inputActiveStateChangedRef;
std::atomic<uint64_t> _inputShowStateChangedRef;
std::atomic<uint64_t> _sceneItemTransformChangedRef;
2021-05-11 05:46:53 +00:00
void ConnectSourceSignals(obs_source_t *source);
void DisconnectSourceSignals(obs_source_t *source);
2021-09-04 17:47:51 +00:00
void BroadcastEvent(uint64_t requiredIntent, std::string eventType, json eventData = nullptr, uint8_t rpcVersion = 0);
2021-05-14 02:11:19 +00:00
// Signal handler: frontend
2021-05-10 23:54:48 +00:00
static void OnFrontendEvent(enum obs_frontend_event event, void *private_data);
2021-05-14 02:11:19 +00:00
// Signal handler: libobs
static void SourceCreatedMultiHandler(void *param, calldata_t *data);
static void SourceDestroyedMultiHandler(void *param, calldata_t *data);
2021-05-14 02:11:19 +00:00
static void SourceRemovedMultiHandler(void *param, calldata_t *data);
// Signal handler: source
static void SourceRenamedMultiHandler(void *param, calldata_t *data);
2021-06-01 04:44:03 +00:00
static void SourceMediaPauseMultiHandler(void *param, calldata_t *data);
static void SourceMediaPlayMultiHandler(void *param, calldata_t *data);
static void SourceMediaRestartMultiHandler(void *param, calldata_t *data);
static void SourceMediaStopMultiHandler(void *param, calldata_t *data);
static void SourceMediaNextMultiHandler(void *param, calldata_t *data);
static void SourceMediaPreviousMultiHandler(void *param, calldata_t *data);
2021-05-14 02:11:19 +00:00
2021-05-14 02:11:19 +00:00
// General
void HandleExitStarted();
void HandleStudioModeStateChanged(bool enabled);
// Config
void HandleCurrentSceneCollectionChanging();
2021-05-14 02:11:19 +00:00
void HandleCurrentSceneCollectionChanged();
void HandleSceneCollectionListChanged();
void HandleCurrentProfileChanging();
2021-05-14 02:11:19 +00:00
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 HandleSceneListChanged();
// Inputs
void HandleInputCreated(obs_source_t *source);
void HandleInputRemoved(obs_source_t *source);
void HandleInputNameChanged(obs_source_t *source, std::string oldInputName, std::string inputName);
static void HandleInputActiveStateChanged(void *param, calldata_t *data); // Direct callback
static void HandleInputShowStateChanged(void *param, calldata_t *data); // Direct callback
static void HandleInputMuteStateChanged(void *param, calldata_t *data); // Direct callback
static void HandleInputVolumeChanged(void *param, calldata_t *data); // Direct callback
static void HandleInputAudioSyncOffsetChanged(void *param, calldata_t *data); // Direct callback
static void HandleInputAudioTracksChanged(void *param, calldata_t *data); // Direct callback
static void HandleInputAudioMonitorTypeChanged(void *param, calldata_t *data); // Direct callback
// Transitions
void HandleTransitionCreated(obs_source_t *source);
void HandleTransitionRemoved(obs_source_t *source);
void HandleTransitionNameChanged(obs_source_t *source, std::string oldTransitionName, std::string transitionName);
// Outputs
void HandleStreamStateChanged(ObsOutputState state);
void HandleRecordStateChanged(ObsOutputState state);
void HandleReplayBufferStateChanged(ObsOutputState state);
void HandleVirtualcamStateChanged(ObsOutputState state);
2021-06-13 03:34:24 +00:00
void HandleReplayBufferSaved();
2021-06-01 04:44:03 +00:00
// Scene Items
static void HandleSceneItemCreated(void *param, calldata_t *data); // Direct callback
static void HandleSceneItemRemoved(void *param, calldata_t *data); // Direct callback
static void HandleSceneItemListReindexed(void *param, calldata_t *data); // Direct callback
static void HandleSceneItemEnableStateChanged(void *param, calldata_t *data); // Direct callback
static void HandleSceneItemLockStateChanged(void *param, calldata_t *data); // Direct callback
static void HandleSceneItemTransformChanged(void *param, calldata_t *data); // Direct callback
2021-06-01 04:44:03 +00:00
// Media Inputs
static void HandleMediaInputPlaybackStarted(void *param, calldata_t *data); // Direct callback
static void HandleMediaInputPlaybackEnded(void *param, calldata_t *data); // Direct callback
void HandleMediaInputActionTriggered(obs_source_t *source, ObsMediaInputAction action);
2021-05-10 23:54:48 +00:00
};