diff --git a/include/villas/nodes/webrtc/signaling_client.hpp b/include/villas/nodes/webrtc/signaling_client.hpp index 7dc21cae6..608b45aab 100644 --- a/include/villas/nodes/webrtc/signaling_client.hpp +++ b/include/villas/nodes/webrtc/signaling_client.hpp @@ -86,7 +86,7 @@ public: void connect(); void disconnect(); - void sendMessage(const SignalingMessage &msg); + void sendMessage(SignalingMessage); void onMessage(std::function callback) { diff --git a/include/villas/nodes/webrtc/signaling_message.hpp b/include/villas/nodes/webrtc/signaling_message.hpp index db4279995..ac9b93539 100644 --- a/include/villas/nodes/webrtc/signaling_message.hpp +++ b/include/villas/nodes/webrtc/signaling_message.hpp @@ -44,10 +44,10 @@ struct ControlMessage { json_t * toJSON() const; }; -class SignalingMessage : public std::variant { -public: - using variant::variant; - SignalingMessage(json_t *j); +struct SignalingMessage { + std::variant message; + + static SignalingMessage fromJSON(json_t *j); json_t * toJSON() const; std::string toString() const; }; diff --git a/lib/nodes/webrtc/peer_connection.cpp b/lib/nodes/webrtc/peer_connection.cpp index 77e5cd56f..df9e575f8 100644 --- a/lib/nodes/webrtc/peer_connection.cpp +++ b/lib/nodes/webrtc/peer_connection.cpp @@ -147,7 +147,7 @@ void PeerConnection::onLocalDescription(rtc::Description desc) auto lock = std::unique_lock { mutex }; - client->sendMessage(desc); + client->sendMessage({ desc }); } void PeerConnection::onLocalCandidate(rtc::Candidate cand) @@ -156,7 +156,7 @@ void PeerConnection::onLocalCandidate(rtc::Candidate cand) auto lock = std::unique_lock { mutex }; - client->sendMessage(cand); + client->sendMessage({ cand }); } void PeerConnection::onConnectionStateChange(rtc::PeerConnection::State state) @@ -327,7 +327,7 @@ void PeerConnection::onSignalingMessage(SignalingMessage msg) [&](auto other){ logger->warn("unknown signaling message"); } - }, msg); + }, msg.message); } void PeerConnection::onDataChannel(std::shared_ptr dc) diff --git a/lib/nodes/webrtc/signaling_client.cpp b/lib/nodes/webrtc/signaling_client.cpp index a2cfd2d68..e5864df3b 100644 --- a/lib/nodes/webrtc/signaling_client.cpp +++ b/lib/nodes/webrtc/signaling_client.cpp @@ -206,14 +206,14 @@ int SignalingClient::receive(void *in, size_t len) logger->debug("Signaling message received: {:.{}}", (char *)in, len); - cbMessage(SignalingMessage { json }); + cbMessage(SignalingMessage::fromJSON(json)); json_decref(json); return 0; } -void SignalingClient::sendMessage(const SignalingMessage &msg) +void SignalingClient::sendMessage(SignalingMessage msg) { outgoingMessages.push(msg); diff --git a/lib/nodes/webrtc/signaling_message.cpp b/lib/nodes/webrtc/signaling_message.cpp index 38150f699..fa2380bf6 100644 --- a/lib/nodes/webrtc/signaling_message.cpp +++ b/lib/nodes/webrtc/signaling_message.cpp @@ -139,7 +139,7 @@ json_t * SignalingMessage::toJSON() const [](auto &other){ return (json_t *) { nullptr }; } - }, *this); + }, message); } std::string SignalingMessage::toString() const @@ -160,11 +160,13 @@ std::string SignalingMessage::toString() const [](auto other){ return fmt::format("invalid signaling message"); } - }, *this); + }, message); } -SignalingMessage::SignalingMessage(json_t *json) +SignalingMessage SignalingMessage::fromJSON(json_t *json) { + auto self = SignalingMessage { std::monostate() }; + // relay message json_t *rlys = nullptr; // control message @@ -193,15 +195,17 @@ SignalingMessage::SignalingMessage(json_t *json) throw RuntimeError("Failed to decode signaling message"); if (rlys) { - emplace(rlys); + self.message.emplace(rlys); } else if (ctrl) { - emplace(ctrl); + self.message.emplace(ctrl); } else if (cand) { - emplace(cand, mid); + self.message.emplace(cand, mid); } else if (desc) { - emplace(desc, typ); + self.message.emplace(desc, typ); } + + return self; }