diff --git a/libraries/networking/src/MessagesClient.cpp b/libraries/networking/src/MessagesClient.cpp index cee7206c31..175c31beb8 100644 --- a/libraries/networking/src/MessagesClient.cpp +++ b/libraries/networking/src/MessagesClient.cpp @@ -106,6 +106,33 @@ void MessagesClient::sendMessage(const QString& channel, const QString& message) } } +// FIXME - we should keep track of the channels we are subscribed to locally, and +// in the event that they mixer goes away and/or comes back we should automatically +// resubscribe to those channels +void MessagesClient::subscribe(const QString& channel) { + qDebug() << "MessagesClient::subscribe() channel:" << channel; + auto nodeList = DependencyManager::get(); + SharedNodePointer messagesMixer = nodeList->soloNodeOfType(NodeType::MessagesMixer); + + if (messagesMixer) { + auto packetList = NLPacketList::create(PacketType::MessagesSubscribe, QByteArray(), true, true); + packetList->write(channel.toUtf8()); + nodeList->sendPacketList(std::move(packetList), *messagesMixer); + } +} + +void MessagesClient::unsubscribe(const QString& channel) { + qDebug() << "MessagesClient::unsubscribe() channel:" << channel; + auto nodeList = DependencyManager::get(); + SharedNodePointer messagesMixer = nodeList->soloNodeOfType(NodeType::MessagesMixer); + + if (messagesMixer) { + auto packetList = NLPacketList::create(PacketType::MessagesUnsubscribe, QByteArray(), true, true); + packetList->write(channel.toUtf8()); + nodeList->sendPacketList(std::move(packetList), *messagesMixer); + } +} + void MessagesClient::handleNodeKilled(SharedNodePointer node) { if (node->getType() != NodeType::MessagesMixer) { return; diff --git a/libraries/networking/src/MessagesClient.h b/libraries/networking/src/MessagesClient.h index 121e6041b1..2c699850f6 100644 --- a/libraries/networking/src/MessagesClient.h +++ b/libraries/networking/src/MessagesClient.h @@ -29,6 +29,8 @@ public: Q_INVOKABLE void init(); Q_INVOKABLE void sendMessage(const QString& channel, const QString& message); + Q_INVOKABLE void subscribe(const QString& channel); + Q_INVOKABLE void unsubscribe(const QString& channel); private slots: void handleMessagesPacket(QSharedPointer packetList, SharedNodePointer senderNode);