#pragma once #include #include #include #include #include "types/EventSubscription.h" #include "../obs-websocket.h" #include "../utils/Obs.h" #include "../plugin-macros.generated.h" template T* GetCalldataPointer(const calldata_t *data, const char* name) { void *ptr = nullptr; calldata_get_ptr(data, name, &ptr); return reinterpret_cast(ptr); } class EventHandler { public: EventHandler(); ~EventHandler(); typedef std::function BroadcastCallback; void SetBroadcastCallback(BroadcastCallback cb); typedef std::function ObsLoadedCallback; void SetObsLoadedCallback(ObsLoadedCallback cb); void ProcessSubscription(uint64_t eventSubscriptions); void ProcessUnsubscription(uint64_t eventSubscriptions); private: BroadcastCallback _broadcastCallback; ObsLoadedCallback _obsLoadedCallback; std::atomic _obsLoaded; std::atomic _inputVolumeMetersRef; std::atomic _inputActiveStateChangedRef; std::atomic _inputShowStateChangedRef; std::atomic _sceneItemTransformChangedRef; void ConnectSourceSignals(obs_source_t *source); void DisconnectSourceSignals(obs_source_t *source); void BroadcastEvent(uint64_t requiredIntent, std::string eventType, json eventData = nullptr, uint8_t rpcVersion = 0); // 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 SourceDestroyedMultiHandler(void *param, calldata_t *data); static void SourceRemovedMultiHandler(void *param, calldata_t *data); // Signal handler: source static void SourceRenamedMultiHandler(void *param, calldata_t *data); 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); // 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 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); void HandleReplayBufferSaved(); // 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 // 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); };