#pragma once #include "qsacn_global.h" #include "qsacnuniverse.h" #include "node.h" #include #include #include #include /** * @brief The QSacnNode class */ class QT_EXPORT QSacnNode : public QObject , public sACN::Node { Q_OBJECT public: explicit QSacnNode(QObject *parent = nullptr, QUuid = QUuid::createUuid(), QString fctn = "OpenLCP QSacnNode", bool ipv4 = true, bool ipv6 = true); virtual ~QSacnNode(); // sACN::RLP::Component void sendUDP(const ACN::PDU::Stream, const ACN::SDT::UDP::ipAddress&) const override; void sendTCP(const ACN::PDU::Stream, const ACN::SDT::UDP::ipAddress&) const override; public slots: void setIPv4(const bool) override; void setIPv6(const bool) override; void subscribe(const uint16_t) override; void unsubscribe(const uint16_t) override; void create(const uint16_t) override; void terminate(const uint16_t) override; signals: void discoveryUpdates(); void subscribing(QSacnUniverse*); void unsubscribing(QSacnUniverse*); void creating(QSacnUniverse*); void terminating(QSacnUniverse*); private: void udpReceive(); QUdpSocket * rx_socket_; QUdpSocket * tx_socket_; 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); }; };