From 76d8b688fd14fbf8ab2e342b8aafa85b7a836216 Mon Sep 17 00:00:00 2001 From: Juliane Holzt Date: Mon, 22 Jul 2019 01:05:21 +0200 Subject: [PATCH 1/7] Add Code for BroadcastWebSocketMessage --- src/WSEvents.h | 6 ++--- src/WSRequestHandler.cpp | 2 ++ src/WSRequestHandler.h | 2 ++ src/WSRequestHandler_General.cpp | 39 ++++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) 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 * From 0195e13bdc4a0aa84f683fcbd6143ae28585591a Mon Sep 17 00:00:00 2001 From: Juliane Holzt Date: Tue, 23 Jul 2019 21:47:55 +0200 Subject: [PATCH 2/7] Implement proposed changes to Broadcast --- src/WSRequestHandler_General.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp index 3b278bd0..fce08ab7 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -235,12 +235,12 @@ HandlerResponse WSRequestHandler::HandleGetStats(WSRequestHandler* req) { * 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 + * @param {Object} `data` User-defined data String * - * @api requests - * @name Authenticate + * @api general + * @name BroadcastWebSocketMessage * @category general - * @since 0.3 + * @since 4.7.0 */ HandlerResponse WSRequestHandler::HandleBroadcastWebSocketMessage(WSRequestHandler* req) { if (!req->hasField("realm") || !req->hasField("data")) { @@ -248,13 +248,13 @@ HandlerResponse WSRequestHandler::HandleBroadcastWebSocketMessage(WSRequestHandl } QString realm = obs_data_get_string(req->data, "realm"); - QString data = obs_data_get_string(req->data, "data"); + OBSDataAutoRelease data = obs_data_get_obj(req->data, "data"); if (realm.isEmpty()) { return req->SendErrorResponse("realm not specified!"); } - if (data.isEmpty()) { + if (!data) { return req->SendErrorResponse("data not specified!"); } @@ -262,7 +262,7 @@ HandlerResponse WSRequestHandler::HandleBroadcastWebSocketMessage(WSRequestHandl OBSDataAutoRelease broadcastData = obs_data_create(); obs_data_set_string(broadcastData, "realm", realm.toUtf8().constData()); - obs_data_set_string(broadcastData, "data", data.toUtf8().constData()); + obs_data_set_obj(broadcastData, "data", data); events->broadcastUpdate("BroadcastWebSocketMessage", broadcastData); From a827afb05bb549ccdb9d83ad3dd475dd79cd5100 Mon Sep 17 00:00:00 2001 From: Juliane Holzt Date: Wed, 24 Jul 2019 01:56:53 +0200 Subject: [PATCH 3/7] Comment fix --- src/WSRequestHandler_General.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp index fce08ab7..c98bb37e 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -235,7 +235,7 @@ HandlerResponse WSRequestHandler::HandleGetStats(WSRequestHandler* req) { * Broadcast some Data (String) to all connected Websocket-Clients * * @param {String} `realm` Some Identifier to be choosen by the client - * @param {Object} `data` User-defined data String + * @param {Object} `data` User-defined data * * @api general * @name BroadcastWebSocketMessage From 635870ba4b4caec264903eee747d3c092e076d15 Mon Sep 17 00:00:00 2001 From: Juliane Holzt Date: Wed, 24 Jul 2019 05:36:47 +0200 Subject: [PATCH 4/7] more comment fixes --- src/WSRequestHandler_General.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp index c98bb37e..d1ed57a4 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -232,7 +232,7 @@ HandlerResponse WSRequestHandler::HandleGetStats(WSRequestHandler* req) { } /** - * Broadcast some Data (String) to all connected Websocket-Clients + * Broadcast some data to all connected WebSocket clients * * @param {String} `realm` Some Identifier to be choosen by the client * @param {Object} `data` User-defined data From e3ff9c013e9872241814f71e017fc10e2e0085df Mon Sep 17 00:00:00 2001 From: Juliane Holzt Date: Thu, 25 Jul 2019 14:47:47 +0200 Subject: [PATCH 5/7] change function name, language --- src/WSRequestHandler.cpp | 2 +- src/WSRequestHandler.h | 2 +- src/WSRequestHandler_General.cpp | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index ef07b6cb..4af1ad14 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -36,7 +36,7 @@ QHash WSRequestHandler::messageM { "SetFilenameFormatting", WSRequestHandler::HandleSetFilenameFormatting }, { "GetFilenameFormatting", WSRequestHandler::HandleGetFilenameFormatting }, - { "BroadcastWebSocketMessage", WSRequestHandler::HandleBroadcastWebSocketMessage }, + { "BroadcastCustomMessage", WSRequestHandler::HandleBroadcastCustomMessage }, { "SetCurrentScene", WSRequestHandler::HandleSetCurrentScene }, { "GetCurrentScene", WSRequestHandler::HandleGetCurrentScene }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 19b90853..4dea020b 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -74,7 +74,7 @@ class WSRequestHandler : public QObject { static HandlerResponse HandleSetFilenameFormatting(WSRequestHandler* req); static HandlerResponse HandleGetFilenameFormatting(WSRequestHandler* req); - static HandlerResponse HandleBroadcastWebSocketMessage(WSRequestHandler* req); + static HandlerResponse HandleBroadcastCustomMessage(WSRequestHandler* req); static HandlerResponse HandleSetCurrentScene(WSRequestHandler* req); static HandlerResponse HandleGetCurrentScene(WSRequestHandler* req); diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp index d1ed57a4..dbb16039 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -232,17 +232,17 @@ HandlerResponse WSRequestHandler::HandleGetStats(WSRequestHandler* req) { } /** - * Broadcast some data to all connected WebSocket clients + * Broadcast custom message to all connected WebSocket clients * - * @param {String} `realm` Some Identifier to be choosen by the client + * @param {String} `realm` Identifier to be choosen by the client * @param {Object} `data` User-defined data * * @api general - * @name BroadcastWebSocketMessage + * @name BroadcastCustomMessage * @category general * @since 4.7.0 */ -HandlerResponse WSRequestHandler::HandleBroadcastWebSocketMessage(WSRequestHandler* req) { +HandlerResponse WSRequestHandler::HandleBroadcastCustomMessage(WSRequestHandler* req) { if (!req->hasField("realm") || !req->hasField("data")) { return req->SendErrorResponse("missing request parameters"); } @@ -264,7 +264,7 @@ HandlerResponse WSRequestHandler::HandleBroadcastWebSocketMessage(WSRequestHandl obs_data_set_string(broadcastData, "realm", realm.toUtf8().constData()); obs_data_set_obj(broadcastData, "data", data); - events->broadcastUpdate("BroadcastWebSocketMessage", broadcastData); + events->broadcastUpdate("CustomMessage", broadcastData); return req->SendOKResponse(); } From 8d39752bdab073d45eb93ed506d2ad2c2c192752 Mon Sep 17 00:00:00 2001 From: Juliane Holzt Date: Thu, 25 Jul 2019 17:00:32 +0200 Subject: [PATCH 6/7] Move event emitting code --- src/WSEvents.cpp | 19 +++++++++++++++++++ src/WSEvents.h | 6 ++++-- src/WSRequestHandler_General.cpp | 7 +------ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index 5be8e9eb..07bac4e3 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -1505,6 +1505,25 @@ void WSEvents::OnStudioModeSwitched(bool checked) { broadcastUpdate("StudioModeSwitched", data); } +/** + * A custom broadcast message was received + * + * @param {String} `realm` Identifier provided by the sender + * @param {Object} `data` User-defined data + * + * @api events + * @name BroadcastCustomMessage + * @category general + * @since 4.7.0 + */ +void WSEvents::OnBroadcastCustomMessage(QString realm, OBSDataAutoRelease data) { + OBSDataAutoRelease broadcastData = obs_data_create(); + obs_data_set_string(broadcastData, "realm", realm.toUtf8().constData()); + obs_data_set_obj(broadcastData, "data", data); + + broadcastUpdate("BroadcastCustomMessage", broadcastData); +} + /** * @typedef {Object} `OBSStats` * @property {double} `fps` Current framerate. diff --git a/src/WSEvents.h b/src/WSEvents.h index c6d83dcf..a35adcaa 100644 --- a/src/WSEvents.h +++ b/src/WSEvents.h @@ -49,8 +49,7 @@ public: const char* GetRecordingTimecode(); obs_data_t* GetStats(); - void broadcastUpdate(const char* updateType, - obs_data_t* additionalFields); + void OnBroadcastCustomMessage(QString realm, OBSDataAutoRelease data); bool HeartbeatIsActive; @@ -73,6 +72,9 @@ 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_General.cpp b/src/WSRequestHandler_General.cpp index dbb16039..59c6bedf 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -259,12 +259,7 @@ HandlerResponse WSRequestHandler::HandleBroadcastCustomMessage(WSRequestHandler* } auto events = GetEventsSystem(); - - OBSDataAutoRelease broadcastData = obs_data_create(); - obs_data_set_string(broadcastData, "realm", realm.toUtf8().constData()); - obs_data_set_obj(broadcastData, "data", data); - - events->broadcastUpdate("CustomMessage", broadcastData); + events->OnBroadcastCustomMessage(realm, data); return req->SendOKResponse(); } From 4af46ac2b965120134cc8bf3f5dc3826143c81e9 Mon Sep 17 00:00:00 2001 From: Juliane Holzt Date: Thu, 25 Jul 2019 17:20:31 +0200 Subject: [PATCH 7/7] use obs_data_t* in Event function --- src/WSEvents.cpp | 2 +- src/WSEvents.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index 07bac4e3..e6e35602 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -1516,7 +1516,7 @@ void WSEvents::OnStudioModeSwitched(bool checked) { * @category general * @since 4.7.0 */ -void WSEvents::OnBroadcastCustomMessage(QString realm, OBSDataAutoRelease data) { +void WSEvents::OnBroadcastCustomMessage(QString realm, obs_data_t* data) { OBSDataAutoRelease broadcastData = obs_data_create(); obs_data_set_string(broadcastData, "realm", realm.toUtf8().constData()); obs_data_set_obj(broadcastData, "data", data); diff --git a/src/WSEvents.h b/src/WSEvents.h index a35adcaa..af6e2da3 100644 --- a/src/WSEvents.h +++ b/src/WSEvents.h @@ -49,7 +49,7 @@ public: const char* GetRecordingTimecode(); obs_data_t* GetStats(); - void OnBroadcastCustomMessage(QString realm, OBSDataAutoRelease data); + void OnBroadcastCustomMessage(QString realm, obs_data_t* data); bool HeartbeatIsActive;