diff --git a/src/requesthandler/RequestHandler.cpp b/src/requesthandler/RequestHandler.cpp index 51e812fb..c117ef4e 100644 --- a/src/requesthandler/RequestHandler.cpp +++ b/src/requesthandler/RequestHandler.cpp @@ -12,6 +12,7 @@ const std::map RequestHandler::_handlerMap {"GetStudioModeEnabled", &RequestHandler::GetStudioModeEnabled}, {"SetStudioModeEnabled", &RequestHandler::SetStudioModeEnabled}, {"Sleep", &RequestHandler::Sleep}, + {"Compare", &RequestHandler::Compare}, // Config {"GetPersistentData", &RequestHandler::GetPersistentData}, diff --git a/src/requesthandler/RequestHandler.h b/src/requesthandler/RequestHandler.h index e4326e70..80b53958 100644 --- a/src/requesthandler/RequestHandler.h +++ b/src/requesthandler/RequestHandler.h @@ -33,6 +33,7 @@ class RequestHandler { RequestResult GetStudioModeEnabled(const Request&); RequestResult SetStudioModeEnabled(const Request&); RequestResult Sleep(const Request&); + RequestResult Compare(const Request&); // Config RequestResult GetPersistentData(const Request&); diff --git a/src/requesthandler/RequestHandler_General.cpp b/src/requesthandler/RequestHandler_General.cpp index e49d5110..cae72ec7 100644 --- a/src/requesthandler/RequestHandler_General.cpp +++ b/src/requesthandler/RequestHandler_General.cpp @@ -165,3 +165,32 @@ RequestResult RequestHandler::Sleep(const Request& request) return RequestResult::Error(RequestStatus::UnsupportedRequestBatchExecutionType); } } + +RequestResult RequestHandler::Compare(const Request& request) +{ + RequestStatus::RequestStatus statusCode; + std::string comment; + if (!(request.ValidateBasic("compareValueOne", statusCode, comment) && request.ValidateBasic("compareValueTwo", statusCode, comment) && request.ValidateNumber("newRequestIndex", statusCode, comment, 0))) + return RequestResult::Error(statusCode, comment); + + if (!(request.RequestBatchExecutionType == OBS_WEBSOCKET_REQUEST_BATCH_EXECUTION_TYPE_SERIAL_REALTIME || request.RequestBatchExecutionType == OBS_WEBSOCKET_REQUEST_BATCH_EXECUTION_TYPE_SERIAL_FRAME)) + return RequestResult::Error(RequestStatus::UnsupportedRequestBatchExecutionType); + + bool invert = false; + if (request.Contains("compareInvert")) { + if (!request.ValidateOptionalBoolean("compareInvert", statusCode, comment)) + return RequestResult::Error(statusCode, comment); + invert = request.RequestData["compareInvert"]; + } + + bool result = (request.RequestData["compareValueOne"] == request.RequestData["compareValueTwo"]); + if (invert) + result = !result; + + json responseData; + responseData["compareResult"] = result; + RequestResult ret = RequestResult::Success(responseData); + if (result) + ret.NewRequestIndex = request.RequestData["newRequestIndex"]; + return ret; +} diff --git a/src/requesthandler/rpc/RequestResult.cpp b/src/requesthandler/rpc/RequestResult.cpp index e7b964d0..4aca1a46 100644 --- a/src/requesthandler/rpc/RequestResult.cpp +++ b/src/requesthandler/rpc/RequestResult.cpp @@ -4,7 +4,8 @@ RequestResult::RequestResult(RequestStatus::RequestStatus statusCode, json respo StatusCode(statusCode), ResponseData(responseData), Comment(comment), - SleepFrames(0) + SleepFrames(0), + NewRequestIndex(0) { } diff --git a/src/requesthandler/rpc/RequestResult.h b/src/requesthandler/rpc/RequestResult.h index 565218b8..974c1e19 100644 --- a/src/requesthandler/rpc/RequestResult.h +++ b/src/requesthandler/rpc/RequestResult.h @@ -12,4 +12,5 @@ struct RequestResult json ResponseData; std::string Comment; size_t SleepFrames; + size_t NewRequestIndex; };