mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-07 09:05:57 -05:00
Add support for websocket vendor events
This commit is contained in:
@@ -33,6 +33,7 @@ public:
|
||||
void Load(obs_data_t *obj);
|
||||
void Save(obs_data_t *obj);
|
||||
std::string GetName() { return _name; }
|
||||
std::vector<std::string> &Events() { return _client.Events(); }
|
||||
|
||||
private:
|
||||
std::string _name = "";
|
||||
|
||||
@@ -13,6 +13,22 @@ using websocketpp::lib::bind;
|
||||
|
||||
obs_websocket_vendor vendor;
|
||||
|
||||
void ClearWebsocketMessages()
|
||||
{
|
||||
switcher->websocketMessages.clear();
|
||||
for (auto &connection : switcher->connections) {
|
||||
connection.Events().clear();
|
||||
}
|
||||
}
|
||||
|
||||
void SendWebsocketEvent(const std::string &eventMsg)
|
||||
{
|
||||
auto data = obs_data_create();
|
||||
obs_data_set_string(data, "message", eventMsg.c_str());
|
||||
obs_websocket_vendor_emit_event(vendor, VendorEvent, data);
|
||||
obs_data_release(data);
|
||||
}
|
||||
|
||||
void ReceiveWebsocketMessage(obs_data_t *request_data, obs_data_t *, void *)
|
||||
{
|
||||
if (!obs_data_has_user_value(request_data, "message")) {
|
||||
@@ -232,6 +248,31 @@ void WSConnection::HandleHello(obs_data_t *helloMsg)
|
||||
Send(response);
|
||||
}
|
||||
|
||||
void WSConnection::HandleEvent(obs_data_t *msg)
|
||||
{
|
||||
auto d = obs_data_get_obj(msg, "d");
|
||||
auto eventData = obs_data_get_obj(d, "eventData");
|
||||
if (strcmp(obs_data_get_string(eventData, "vendorName"), VendorName) !=
|
||||
0) {
|
||||
vblog(LOG_INFO, "ignoring vendor event from \"%s\"",
|
||||
obs_data_get_string(eventData, "vendorName"));
|
||||
return;
|
||||
}
|
||||
if (strcmp(obs_data_get_string(eventData, "eventType"), VendorEvent) !=
|
||||
0) {
|
||||
vblog(LOG_INFO, "ignoring event type\"%s\"",
|
||||
obs_data_get_string(eventData, "eventType"));
|
||||
return;
|
||||
}
|
||||
auto eventDataNested = obs_data_get_obj(eventData, "eventData");
|
||||
_messages.emplace_back(obs_data_get_string(eventDataNested, "message"));
|
||||
vblog(LOG_INFO, "received event msg \"%s\"",
|
||||
obs_data_get_string(eventDataNested, "message"));
|
||||
obs_data_release(eventDataNested);
|
||||
obs_data_release(eventData);
|
||||
obs_data_release(d);
|
||||
}
|
||||
|
||||
void WSConnection::HandleResponse(obs_data_t *response)
|
||||
{
|
||||
auto data = obs_data_get_obj(response, "d");
|
||||
@@ -278,6 +319,9 @@ void WSConnection::OnMessage(connection_hdl, client::message_ptr message)
|
||||
case 2: // Identified
|
||||
_status = Status::AUTHENTICATED;
|
||||
break;
|
||||
case 5: // Event (Vendor)
|
||||
HandleEvent(json);
|
||||
break;
|
||||
case 7: // RequestResponse
|
||||
HandleResponse(json);
|
||||
break;
|
||||
|
||||
@@ -24,6 +24,10 @@ typedef websocketpp::client<websocketpp::config::asio_client> client;
|
||||
|
||||
constexpr char VendorName[] = "AdvancedSceneSwitcher";
|
||||
constexpr char VendorRequest[] = "AdvancedSceneSwitcherMessage";
|
||||
constexpr char VendorEvent[] = "AdvancedSceneSwitcherEvent";
|
||||
|
||||
void ClearWebsocketMessages();
|
||||
void SendWebsocketEvent(const std::string &);
|
||||
|
||||
class WSConnection : public QObject {
|
||||
public:
|
||||
@@ -34,6 +38,7 @@ public:
|
||||
bool _reconnect, int reconnectDelay = 10);
|
||||
void Disconnect();
|
||||
void SendRequest(const std::string &msg);
|
||||
std::vector<std::string> &Events() { return _messages; }
|
||||
std::string GetFail() { return _failMsg; }
|
||||
|
||||
enum class Status {
|
||||
@@ -51,6 +56,7 @@ private:
|
||||
void Send(const std::string &);
|
||||
void ConnectThread();
|
||||
void HandleHello(obs_data_t *helloMsg);
|
||||
void HandleEvent(obs_data_t *event);
|
||||
void HandleResponse(obs_data_t *response);
|
||||
|
||||
client _client;
|
||||
@@ -66,4 +72,6 @@ private:
|
||||
std::string _failMsg = "";
|
||||
std::atomic<Status> _status = {Status::DISCONNECTED};
|
||||
std::atomic_bool _disconnect{false};
|
||||
|
||||
std::vector<std::string> _messages;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user