diff --git a/src/WSEvents.h b/src/WSEvents.h index 8a6bbec4..c6d83dcf 100644 --- a/src/WSEvents.h +++ b/src/WSEvents.h @@ -49,6 +49,9 @@ public: const char* GetRecordingTimecode(); obs_data_t* GetStats(); + void broadcastUpdate(const char* updateType, + obs_data_t* additionalFields); + bool HeartbeatIsActive; private slots: @@ -70,9 +73,6 @@ private: uint64_t _lastBytesSent; uint64_t _lastBytesSentTime; - void broadcastUpdate(const char* updateType, - obs_data_t* additionalFields); - void OnSceneChange(); void OnSceneListChange(); void OnSceneCollectionChange(); diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 53d43fc1..ef07b6cb 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -36,6 +36,8 @@ QHash WSRequestHandler::messageM { "SetFilenameFormatting", WSRequestHandler::HandleSetFilenameFormatting }, { "GetFilenameFormatting", WSRequestHandler::HandleGetFilenameFormatting }, + { "BroadcastWebSocketMessage", WSRequestHandler::HandleBroadcastWebSocketMessage }, + { "SetCurrentScene", WSRequestHandler::HandleSetCurrentScene }, { "GetCurrentScene", WSRequestHandler::HandleGetCurrentScene }, { "GetSceneList", WSRequestHandler::HandleGetSceneList }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index b2eefa3d..19b90853 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -74,6 +74,8 @@ class WSRequestHandler : public QObject { static HandlerResponse HandleSetFilenameFormatting(WSRequestHandler* req); static HandlerResponse HandleGetFilenameFormatting(WSRequestHandler* req); + static HandlerResponse HandleBroadcastWebSocketMessage(WSRequestHandler* req); + static HandlerResponse HandleSetCurrentScene(WSRequestHandler* req); static HandlerResponse HandleGetCurrentScene(WSRequestHandler* req); static HandlerResponse HandleGetSceneList(WSRequestHandler* req); diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp index 0ca572af..3b278bd0 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -231,6 +231,45 @@ HandlerResponse WSRequestHandler::HandleGetStats(WSRequestHandler* req) { return req->SendOKResponse(response); } +/** + * Broadcast some Data (String) to all connected Websocket-Clients + * + * @param {String} `realm` Some Identifier to be choosen by the client + * @param {String} `data` User-defined data String + * + * @api requests + * @name Authenticate + * @category general + * @since 0.3 + */ +HandlerResponse WSRequestHandler::HandleBroadcastWebSocketMessage(WSRequestHandler* req) { + if (!req->hasField("realm") || !req->hasField("data")) { + return req->SendErrorResponse("missing request parameters"); + } + + QString realm = obs_data_get_string(req->data, "realm"); + QString data = obs_data_get_string(req->data, "data"); + + if (realm.isEmpty()) { + return req->SendErrorResponse("realm not specified!"); + } + + if (data.isEmpty()) { + return req->SendErrorResponse("data not specified!"); + } + + auto events = GetEventsSystem(); + + OBSDataAutoRelease broadcastData = obs_data_create(); + obs_data_set_string(broadcastData, "realm", realm.toUtf8().constData()); + obs_data_set_string(broadcastData, "data", data.toUtf8().constData()); + + events->broadcastUpdate("BroadcastWebSocketMessage", broadcastData); + + return req->SendOKResponse(); +} + + /** * Get basic OBS video information *