#pragma once #include "qsacnnode_global.h" #include "sacn/node.h" #include "sdt/udp.h" #include #include #include #include /** * @brief The QSacnNode class */ class QT_EXPORT QSacnNode : public QUdpSocket , public sACN::Node { Q_OBJECT public: explicit QSacnNode(QObject *parent = nullptr, QUuid = QUuid::createUuid()); // rlp component void rlpSend(const ACN::PDU::Stream, const ACN::SDT::UDP::ipAddress&) override; // reciever QSacnUniverse * universe(const uint16_t u) {return rx_universes_.value(u); } void subscribe(const uint16_t universe = 1) override; void unsubscribe(const uint16_t) override; // source QSacnUniverse * source(const uint16_t u) {return tx_universes_.value(u); } void create(const uint16_t) override; void terminate(const uint16_t) override; signals: void foundUniverse( std::shared_ptr); private: void udpReceive(); QHash rx_universes_; QHash tx_universes_; public: /// \cite sACN 9.3.1 Allocation of IPv4 Multicast Addresses /// /// Multicast addresses are from the IPv4 Local Scope. static QHostAddress IPv4MulticastAddress(const uint16_t universe) { sACN::ipAddress ip = sACN::IPv4MulticastAddress(universe); return QHostAddress(ip.address.ipv4.value); }; /// \cite sACN 9.3.2 Allocation of IPv6 Multicast Addresses static QHostAddress IPv6MulticastAddress(const uint16_t universe) { sACN::ipAddress ip = sACN::IPv6MulticastAddress(universe); return QHostAddress(ip.address.ipv6.bytes); }; };