1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

node-webrtc: don't inherit from std::variant

Signed-off-by: Philipp Jungkamp <Philipp.Jungkamp@opal-rt.com>
This commit is contained in:
Philipp Jungkamp 2023-06-15 15:34:35 +02:00
parent 41099255f8
commit ca85117674
5 changed files with 21 additions and 17 deletions

View file

@ -86,7 +86,7 @@ public:
void connect();
void disconnect();
void sendMessage(const SignalingMessage &msg);
void sendMessage(SignalingMessage);
void onMessage(std::function<void(SignalingMessage)> callback)
{

View file

@ -44,10 +44,10 @@ struct ControlMessage {
json_t * toJSON() const;
};
class SignalingMessage : public std::variant<std::monostate, RelayMessage, ControlMessage, rtc::Description, rtc::Candidate> {
public:
using variant::variant;
SignalingMessage(json_t *j);
struct SignalingMessage {
std::variant<std::monostate, RelayMessage, ControlMessage, rtc::Description, rtc::Candidate> message;
static SignalingMessage fromJSON(json_t *j);
json_t * toJSON() const;
std::string toString() const;
};

View file

@ -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<rtc::DataChannel> dc)

View file

@ -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);

View file

@ -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<RelayMessage>(rlys);
self.message.emplace<RelayMessage>(rlys);
}
else if (ctrl) {
emplace<ControlMessage>(ctrl);
self.message.emplace<ControlMessage>(ctrl);
}
else if (cand) {
emplace<rtc::Candidate>(cand, mid);
self.message.emplace<rtc::Candidate>(cand, mid);
}
else if (desc) {
emplace<rtc::Description>(desc, typ);
self.message.emplace<rtc::Description>(desc, typ);
}
return self;
}