/* obs-websocket Copyright (C) 2016-2021 Stephane Lepin Copyright (C) 2020-2021 Kyle Manning This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see */ #pragma once #include #include #include #include "rpc/Request.h" #include "rpc/RequestResult.h" #include "types/RequestStatus.h" #include "types/RequestBatchExecutionType.h" #include "../websocketserver/rpc/WebSocketSession.h" #include "../obs-websocket.h" #include "../utils/Obs.h" #include "../plugin-macros.generated.h" class RequestHandler; typedef RequestResult(RequestHandler::*RequestMethodHandler)(const Request&); class RequestHandler { public: RequestHandler(SessionPtr session); RequestResult ProcessRequest(const Request& request); std::vector GetRequestList(); private: // General RequestResult GetVersion(const Request&); RequestResult GetStats(const Request&); RequestResult BroadcastCustomEvent(const Request&); RequestResult CallVendorRequest(const Request&); RequestResult GetHotkeyList(const Request&); RequestResult TriggerHotkeyByName(const Request&); RequestResult TriggerHotkeyByKeySequence(const Request&); RequestResult Sleep(const Request&); // Config RequestResult GetPersistentData(const Request&); RequestResult SetPersistentData(const Request&); RequestResult GetSceneCollectionList(const Request&); RequestResult SetCurrentSceneCollection(const Request&); RequestResult CreateSceneCollection(const Request&); RequestResult GetProfileList(const Request&); RequestResult SetCurrentProfile(const Request&); RequestResult CreateProfile(const Request&); RequestResult RemoveProfile(const Request&); RequestResult GetProfileParameter(const Request&); RequestResult SetProfileParameter(const Request&); RequestResult GetVideoSettings(const Request&); RequestResult SetVideoSettings(const Request&); RequestResult GetStreamServiceSettings(const Request&); RequestResult SetStreamServiceSettings(const Request&); RequestResult GetRecordDirectory(const Request&); // Sources RequestResult GetSourceActive(const Request&); RequestResult GetSourceScreenshot(const Request&); RequestResult SaveSourceScreenshot(const Request&); RequestResult GetSourcePrivateSettings(const Request&); RequestResult SetSourcePrivateSettings(const Request&); // Scenes RequestResult GetSceneList(const Request&); RequestResult GetGroupList(const Request&); RequestResult GetCurrentProgramScene(const Request&); RequestResult SetCurrentProgramScene(const Request&); RequestResult GetCurrentPreviewScene(const Request&); RequestResult SetCurrentPreviewScene(const Request&); RequestResult CreateScene(const Request&); RequestResult RemoveScene(const Request&); RequestResult SetSceneName(const Request&); RequestResult GetSceneSceneTransitionOverride(const Request&); RequestResult SetSceneSceneTransitionOverride(const Request&); // Inputs RequestResult GetInputList(const Request&); RequestResult GetInputKindList(const Request&); RequestResult GetSpecialInputs(const Request&); RequestResult CreateInput(const Request&); RequestResult RemoveInput(const Request&); RequestResult SetInputName(const Request&); RequestResult GetInputDefaultSettings(const Request&); RequestResult GetInputSettings(const Request&); RequestResult SetInputSettings(const Request&); RequestResult GetInputMute(const Request&); RequestResult SetInputMute(const Request&); RequestResult ToggleInputMute(const Request&); RequestResult GetInputVolume(const Request&); RequestResult SetInputVolume(const Request&); RequestResult GetInputAudioBalance(const Request&); RequestResult SetInputAudioBalance(const Request&); RequestResult GetInputAudioSyncOffset(const Request&); RequestResult SetInputAudioSyncOffset(const Request&); RequestResult GetInputAudioMonitorType(const Request&); RequestResult SetInputAudioMonitorType(const Request&); RequestResult GetInputAudioTracks(const Request&); RequestResult SetInputAudioTracks(const Request&); RequestResult GetInputPropertiesListPropertyItems(const Request&); RequestResult PressInputPropertiesButton(const Request&); // Transitions RequestResult GetTransitionKindList(const Request&); RequestResult GetSceneTransitionList(const Request&); RequestResult GetCurrentSceneTransition(const Request&); RequestResult SetCurrentSceneTransition(const Request&); RequestResult SetCurrentSceneTransitionDuration(const Request&); RequestResult SetCurrentSceneTransitionSettings(const Request&); RequestResult GetCurrentSceneTransitionCursor(const Request&); RequestResult TriggerStudioModeTransition(const Request&); RequestResult SetTBarPosition(const Request&); // Filters RequestResult GetSourceFilterList(const Request&); RequestResult GetSourceFilterDefaultSettings(const Request&); RequestResult CreateSourceFilter(const Request&); RequestResult RemoveSourceFilter(const Request&); RequestResult SetSourceFilterName(const Request&); RequestResult GetSourceFilter(const Request&); RequestResult SetSourceFilterIndex(const Request&); RequestResult SetSourceFilterSettings(const Request&); RequestResult SetSourceFilterEnabled(const Request&); // Scene Items RequestResult GetSceneItemList(const Request&); RequestResult GetGroupSceneItemList(const Request&); RequestResult GetSceneItemId(const Request&); RequestResult CreateSceneItem(const Request&); RequestResult RemoveSceneItem(const Request&); RequestResult DuplicateSceneItem(const Request&); RequestResult GetSceneItemTransform(const Request&); RequestResult SetSceneItemTransform(const Request&); RequestResult GetSceneItemEnabled(const Request&); RequestResult SetSceneItemEnabled(const Request&); RequestResult GetSceneItemLocked(const Request&); RequestResult SetSceneItemLocked(const Request&); RequestResult GetSceneItemIndex(const Request&); RequestResult SetSceneItemIndex(const Request&); RequestResult GetSceneItemBlendMode(const Request&); RequestResult SetSceneItemBlendMode(const Request&); RequestResult GetSceneItemPrivateSettings(const Request&); RequestResult SetSceneItemPrivateSettings(const Request&); // Outputs RequestResult GetVirtualCamStatus(const Request&); RequestResult ToggleVirtualCam(const Request&); RequestResult StartVirtualCam(const Request&); RequestResult StopVirtualCam(const Request&); RequestResult GetReplayBufferStatus(const Request&); RequestResult ToggleReplayBuffer(const Request&); RequestResult StartReplayBuffer(const Request&); RequestResult StopReplayBuffer(const Request&); RequestResult SaveReplayBuffer(const Request&); RequestResult GetLastReplayBufferReplay(const Request&); // Stream RequestResult GetStreamStatus(const Request&); RequestResult ToggleStream(const Request&); RequestResult StartStream(const Request&); RequestResult StopStream(const Request&); RequestResult SendStreamCaption(const Request&); // Record RequestResult GetRecordStatus(const Request&); RequestResult ToggleRecord(const Request&); RequestResult StartRecord(const Request&); RequestResult StopRecord(const Request&); RequestResult ToggleRecordPause(const Request&); RequestResult PauseRecord(const Request&); RequestResult ResumeRecord(const Request&); // Media Inputs RequestResult GetMediaInputStatus(const Request&); RequestResult SetMediaInputCursor(const Request&); RequestResult OffsetMediaInputCursor(const Request&); RequestResult TriggerMediaInputAction(const Request&); // Ui RequestResult GetStudioModeEnabled(const Request&); RequestResult SetStudioModeEnabled(const Request&); RequestResult OpenInputPropertiesDialog(const Request&); RequestResult OpenInputFiltersDialog(const Request&); RequestResult OpenInputInteractDialog(const Request&); SessionPtr _session; static const std::unordered_map _handlerMap; };