diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 89416e2c..ea559748 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -17,6 +17,8 @@ * with this program. If not, see */ +#include + #include #include "Config.h" @@ -24,121 +26,123 @@ #include "WSRequestHandler.h" +using namespace std::placeholders; + const QHash WSRequestHandler::messageMap { -// { "GetVersion", &WSRequestHandler::GetVersion }, -// { "GetAuthRequired", &WSRequestHandler::GetAuthRequired }, -// { "Authenticate", &WSRequestHandler::Authenticate }, + { "GetVersion", &WSRequestHandler::GetVersion }, + { "GetAuthRequired", &WSRequestHandler::GetAuthRequired }, + { "Authenticate", &WSRequestHandler::Authenticate }, -// { "GetStats", &WSRequestHandler::GetStats }, -// { "SetHeartbeat", &WSRequestHandler::SetHeartbeat }, -// { "GetVideoInfo", &WSRequestHandler::GetVideoInfo }, + { "GetStats", &WSRequestHandler::GetStats }, + { "SetHeartbeat", &WSRequestHandler::SetHeartbeat }, + { "GetVideoInfo", &WSRequestHandler::GetVideoInfo }, -// { "SetFilenameFormatting", &WSRequestHandler::SetFilenameFormatting }, -// { "GetFilenameFormatting", &WSRequestHandler::GetFilenameFormatting }, + { "SetFilenameFormatting", &WSRequestHandler::SetFilenameFormatting }, + { "GetFilenameFormatting", &WSRequestHandler::GetFilenameFormatting }, -// { "BroadcastCustomMessage", &WSRequestHandler::BroadcastCustomMessage }, + { "BroadcastCustomMessage", &WSRequestHandler::BroadcastCustomMessage }, -// { "SetCurrentScene", &WSRequestHandler::SetCurrentScene }, -// { "GetCurrentScene", &WSRequestHandler::GetCurrentScene }, -// { "GetSceneList", &WSRequestHandler::GetSceneList }, + { "SetCurrentScene", &WSRequestHandler::SetCurrentScene }, + { "GetCurrentScene", &WSRequestHandler::GetCurrentScene }, + { "GetSceneList", &WSRequestHandler::GetSceneList }, -// { "SetSourceRender", &WSRequestHandler::SetSceneItemRender }, // Retrocompat -// { "SetSceneItemRender", &WSRequestHandler::SetSceneItemRender }, -// { "SetSceneItemPosition", &WSRequestHandler::SetSceneItemPosition }, -// { "SetSceneItemTransform", &WSRequestHandler::SetSceneItemTransform }, -// { "SetSceneItemCrop", &WSRequestHandler::SetSceneItemCrop }, -// { "GetSceneItemProperties", &WSRequestHandler::GetSceneItemProperties }, -// { "SetSceneItemProperties", &WSRequestHandler::SetSceneItemProperties }, -// { "ResetSceneItem", &WSRequestHandler::ResetSceneItem }, -// { "DeleteSceneItem", &WSRequestHandler::DeleteSceneItem }, -// { "DuplicateSceneItem", &WSRequestHandler::DuplicateSceneItem }, -// { "ReorderSceneItems", &WSRequestHandler::ReorderSceneItems }, + { "SetSourceRender", &WSRequestHandler::SetSceneItemRender }, // Retrocompat + { "SetSceneItemRender", &WSRequestHandler::SetSceneItemRender }, + { "SetSceneItemPosition", &WSRequestHandler::SetSceneItemPosition }, + { "SetSceneItemTransform", &WSRequestHandler::SetSceneItemTransform }, + { "SetSceneItemCrop", &WSRequestHandler::SetSceneItemCrop }, + { "GetSceneItemProperties", &WSRequestHandler::GetSceneItemProperties }, + { "SetSceneItemProperties", &WSRequestHandler::SetSceneItemProperties }, + { "ResetSceneItem", &WSRequestHandler::ResetSceneItem }, + { "DeleteSceneItem", &WSRequestHandler::DeleteSceneItem }, + { "DuplicateSceneItem", &WSRequestHandler::DuplicateSceneItem }, + { "ReorderSceneItems", &WSRequestHandler::ReorderSceneItems }, -// { "GetStreamingStatus", &WSRequestHandler::GetStreamingStatus }, -// { "StartStopStreaming", &WSRequestHandler::StartStopStreaming }, -// { "StartStopRecording", &WSRequestHandler::StartStopRecording }, + { "GetStreamingStatus", &WSRequestHandler::GetStreamingStatus }, + { "StartStopStreaming", &WSRequestHandler::StartStopStreaming }, + { "StartStopRecording", &WSRequestHandler::StartStopRecording }, -// { "StartStreaming", &WSRequestHandler::StartStreaming }, -// { "StopStreaming", &WSRequestHandler::StopStreaming }, + { "StartStreaming", &WSRequestHandler::StartStreaming }, + { "StopStreaming", &WSRequestHandler::StopStreaming }, -// { "StartRecording", &WSRequestHandler::StartRecording }, -// { "StopRecording", &WSRequestHandler::StopRecording }, -// { "PauseRecording", &WSRequestHandler::PauseRecording }, -// { "ResumeRecording", &WSRequestHandler::ResumeRecording }, + { "StartRecording", &WSRequestHandler::StartRecording }, + { "StopRecording", &WSRequestHandler::StopRecording }, + { "PauseRecording", &WSRequestHandler::PauseRecording }, + { "ResumeRecording", &WSRequestHandler::ResumeRecording }, -// { "StartStopReplayBuffer", &WSRequestHandler::StartStopReplayBuffer }, -// { "StartReplayBuffer", &WSRequestHandler::StartReplayBuffer }, -// { "StopReplayBuffer", &WSRequestHandler::StopReplayBuffer }, -// { "SaveReplayBuffer", &WSRequestHandler::SaveReplayBuffer }, + { "StartStopReplayBuffer", &WSRequestHandler::StartStopReplayBuffer }, + { "StartReplayBuffer", &WSRequestHandler::StartReplayBuffer }, + { "StopReplayBuffer", &WSRequestHandler::StopReplayBuffer }, + { "SaveReplayBuffer", &WSRequestHandler::SaveReplayBuffer }, -// { "SetRecordingFolder", &WSRequestHandler::SetRecordingFolder }, -// { "GetRecordingFolder", &WSRequestHandler::GetRecordingFolder }, + { "SetRecordingFolder", &WSRequestHandler::SetRecordingFolder }, + { "GetRecordingFolder", &WSRequestHandler::GetRecordingFolder }, -// { "GetTransitionList", &WSRequestHandler::GetTransitionList }, -// { "GetCurrentTransition", &WSRequestHandler::GetCurrentTransition }, -// { "SetCurrentTransition", &WSRequestHandler::SetCurrentTransition }, -// { "SetTransitionDuration", &WSRequestHandler::SetTransitionDuration }, -// { "GetTransitionDuration", &WSRequestHandler::GetTransitionDuration }, + { "GetTransitionList", &WSRequestHandler::GetTransitionList }, + { "GetCurrentTransition", &WSRequestHandler::GetCurrentTransition }, + { "SetCurrentTransition", &WSRequestHandler::SetCurrentTransition }, + { "SetTransitionDuration", &WSRequestHandler::SetTransitionDuration }, + { "GetTransitionDuration", &WSRequestHandler::GetTransitionDuration }, -// { "SetVolume", &WSRequestHandler::SetVolume }, -// { "GetVolume", &WSRequestHandler::GetVolume }, -// { "ToggleMute", &WSRequestHandler::ToggleMute }, -// { "SetMute", &WSRequestHandler::SetMute }, -// { "GetMute", &WSRequestHandler::GetMute }, -// { "SetSyncOffset", &WSRequestHandler::SetSyncOffset }, -// { "GetSyncOffset", &WSRequestHandler::GetSyncOffset }, -// { "GetSpecialSources", &WSRequestHandler::GetSpecialSources }, -// { "GetSourcesList", &WSRequestHandler::GetSourcesList }, -// { "GetSourceTypesList", &WSRequestHandler::GetSourceTypesList }, -// { "GetSourceSettings", &WSRequestHandler::GetSourceSettings }, -// { "SetSourceSettings", &WSRequestHandler::SetSourceSettings }, -// { "TakeSourceScreenshot", &WSRequestHandler::TakeSourceScreenshot }, + { "SetVolume", &WSRequestHandler::SetVolume }, + { "GetVolume", &WSRequestHandler::GetVolume }, + { "ToggleMute", &WSRequestHandler::ToggleMute }, + { "SetMute", &WSRequestHandler::SetMute }, + { "GetMute", &WSRequestHandler::GetMute }, + { "SetSyncOffset", &WSRequestHandler::SetSyncOffset }, + { "GetSyncOffset", &WSRequestHandler::GetSyncOffset }, + { "GetSpecialSources", &WSRequestHandler::GetSpecialSources }, + { "GetSourcesList", &WSRequestHandler::GetSourcesList }, + { "GetSourceTypesList", &WSRequestHandler::GetSourceTypesList }, + { "GetSourceSettings", &WSRequestHandler::GetSourceSettings }, + { "SetSourceSettings", &WSRequestHandler::SetSourceSettings }, + { "TakeSourceScreenshot", &WSRequestHandler::TakeSourceScreenshot }, -// { "GetSourceFilters", &WSRequestHandler::GetSourceFilters }, -// { "GetSourceFilterInfo", &WSRequestHandler::GetSourceFilterInfo }, -// { "AddFilterToSource", &WSRequestHandler::AddFilterToSource }, -// { "RemoveFilterFromSource", &WSRequestHandler::RemoveFilterFromSource }, -// { "ReorderSourceFilter", &WSRequestHandler::ReorderSourceFilter }, -// { "MoveSourceFilter", &WSRequestHandler::MoveSourceFilter }, -// { "SetSourceFilterSettings", &WSRequestHandler::SetSourceFilterSettings }, -// { "SetSourceFilterVisibility", &WSRequestHandler::SetSourceFilterVisibility }, + { "GetSourceFilters", &WSRequestHandler::GetSourceFilters }, + { "GetSourceFilterInfo", &WSRequestHandler::GetSourceFilterInfo }, + { "AddFilterToSource", &WSRequestHandler::AddFilterToSource }, + { "RemoveFilterFromSource", &WSRequestHandler::RemoveFilterFromSource }, + { "ReorderSourceFilter", &WSRequestHandler::ReorderSourceFilter }, + { "MoveSourceFilter", &WSRequestHandler::MoveSourceFilter }, + { "SetSourceFilterSettings", &WSRequestHandler::SetSourceFilterSettings }, + { "SetSourceFilterVisibility", &WSRequestHandler::SetSourceFilterVisibility }, -// { "SetCurrentSceneCollection", &WSRequestHandler::SetCurrentSceneCollection }, -// { "GetCurrentSceneCollection", &WSRequestHandler::GetCurrentSceneCollection }, -// { "ListSceneCollections", &WSRequestHandler::ListSceneCollections }, + { "SetCurrentSceneCollection", &WSRequestHandler::SetCurrentSceneCollection }, + { "GetCurrentSceneCollection", &WSRequestHandler::GetCurrentSceneCollection }, + { "ListSceneCollections", &WSRequestHandler::ListSceneCollections }, -// { "SetCurrentProfile", &WSRequestHandler::SetCurrentProfile }, -// { "GetCurrentProfile", &WSRequestHandler::GetCurrentProfile }, -// { "ListProfiles", &WSRequestHandler::ListProfiles }, + { "SetCurrentProfile", &WSRequestHandler::SetCurrentProfile }, + { "GetCurrentProfile", &WSRequestHandler::GetCurrentProfile }, + { "ListProfiles", &WSRequestHandler::ListProfiles }, -// { "SetStreamSettings", &WSRequestHandler::SetStreamSettings }, -// { "GetStreamSettings", &WSRequestHandler::GetStreamSettings }, -// { "SaveStreamSettings", &WSRequestHandler::SaveStreamSettings }, -// #if BUILD_CAPTIONS -// { "SendCaptions", &WSRequestHandler::SendCaptions }, -// #endif + { "SetStreamSettings", &WSRequestHandler::SetStreamSettings }, + { "GetStreamSettings", &WSRequestHandler::GetStreamSettings }, + { "SaveStreamSettings", &WSRequestHandler::SaveStreamSettings }, +#if BUILD_CAPTIONS + { "SendCaptions", &WSRequestHandler::SendCaptions }, +#endif -// { "GetStudioModeStatus", &WSRequestHandler::GetStudioModeStatus }, -// { "GetPreviewScene", &WSRequestHandler::GetPreviewScene }, -// { "SetPreviewScene", &WSRequestHandler::SetPreviewScene }, -// { "TransitionToProgram", &WSRequestHandler::TransitionToProgram }, -// { "EnableStudioMode", &WSRequestHandler::EnableStudioMode }, -// { "DisableStudioMode", &WSRequestHandler::DisableStudioMode }, -// { "ToggleStudioMode", &WSRequestHandler::ToggleStudioMode }, + { "GetStudioModeStatus", &WSRequestHandler::GetStudioModeStatus }, + { "GetPreviewScene", &WSRequestHandler::GetPreviewScene }, + { "SetPreviewScene", &WSRequestHandler::SetPreviewScene }, + { "TransitionToProgram", &WSRequestHandler::TransitionToProgram }, + { "EnableStudioMode", &WSRequestHandler::EnableStudioMode }, + { "DisableStudioMode", &WSRequestHandler::DisableStudioMode }, + { "ToggleStudioMode", &WSRequestHandler::ToggleStudioMode }, -// { "SetTextGDIPlusProperties", &WSRequestHandler::SetTextGDIPlusProperties }, -// { "GetTextGDIPlusProperties", &WSRequestHandler::GetTextGDIPlusProperties }, + { "SetTextGDIPlusProperties", &WSRequestHandler::SetTextGDIPlusProperties }, + { "GetTextGDIPlusProperties", &WSRequestHandler::GetTextGDIPlusProperties }, -// { "SetTextFreetype2Properties", &WSRequestHandler::SetTextFreetype2Properties }, -// { "GetTextFreetype2Properties", &WSRequestHandler::GetTextFreetype2Properties }, + { "SetTextFreetype2Properties", &WSRequestHandler::SetTextFreetype2Properties }, + { "GetTextFreetype2Properties", &WSRequestHandler::GetTextFreetype2Properties }, -// { "GetBrowserSourceProperties", &WSRequestHandler::GetBrowserSourceProperties }, -// { "SetBrowserSourceProperties", &WSRequestHandler::SetBrowserSourceProperties }, + { "GetBrowserSourceProperties", &WSRequestHandler::GetBrowserSourceProperties }, + { "SetBrowserSourceProperties", &WSRequestHandler::SetBrowserSourceProperties }, -// { "ListOutputs", &WSRequestHandler::ListOutputs }, -// { "GetOutputInfo", &WSRequestHandler::GetOutputInfo }, -// { "StartOutput", &WSRequestHandler::StartOutput }, -// { "StopOutput", &WSRequestHandler::StopOutput } + { "ListOutputs", &WSRequestHandler::ListOutputs }, + { "GetOutputInfo", &WSRequestHandler::GetOutputInfo }, + { "StartOutput", &WSRequestHandler::StartOutput }, + { "StopOutput", &WSRequestHandler::StopOutput } }; const QSet WSRequestHandler::authNotRequired { @@ -191,12 +195,12 @@ RpcResponse WSRequestHandler::processRequest(const RpcRequest& request){ return RpcResponse::fail(request, "Not Authenticated"); } - RpcResponse (*handlerFunc)(const RpcRequest&) = (messageMap[request.methodName()]); + RpcMethodHandler handlerFunc = messageMap[request.methodName()]; if (!handlerFunc) { return RpcResponse::fail(request, "invalid request type"); } - return handlerFunc(request); + return std::bind(handlerFunc, _1)(request); } // HandlerResponse WSRequestHandler::SendOKResponse(obs_data_t* additionalFields) { diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 2f9e510d..da93330b 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -33,6 +33,7 @@ with this program. If not, see #include "obs-websocket.h" +class WSRequestHandler; typedef RpcResponse(WSRequestHandler::*RpcMethodHandler)(const RpcRequest&); class WSRequestHandler {