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 {