added NodeActivated signal to make it easier for users to know when a recently added node has an active socket

This commit is contained in:
Brad Hefta-Gaub 2015-11-17 16:31:34 -08:00
parent 073215d067
commit 293914b84f
4 changed files with 17 additions and 20 deletions

View file

@ -530,11 +530,21 @@ SharedNodePointer LimitedNodeList::addOrUpdateNode(const QUuid& uuid, NodeType_t
qCDebug(networking) << "Added" << *newNode;
emit nodeAdded(newNodePointer);
if (newNodePointer->getActiveSocket()) {
emit nodeActivated(newNodePointer);
} else {
connect(newNodePointer.data(), &NetworkPeer::socketActivated, this, [=] {
emit nodeActivated(newNodePointer);
disconnect(newNodePointer.data(), &NetworkPeer::socketActivated, this, 0);
});
}
return newNodePointer;
}
}
std::unique_ptr<NLPacket> LimitedNodeList::constructPingPacket(PingType_t pingType) {
int packetSize = sizeof(PingType_t) + sizeof(quint64);

View file

@ -239,6 +239,7 @@ signals:
void uuidChanged(const QUuid& ownerUUID, const QUuid& oldUUID);
void nodeAdded(SharedNodePointer);
void nodeKilled(SharedNodePointer);
void nodeActivated(SharedNodePointer);
void localSockAddrChanged(const HifiSockAddr& localSockAddr);
void publicSockAddrChanged(const HifiSockAddr& publicSockAddr);

View file

@ -27,7 +27,7 @@ MessagesClient::MessagesClient() {
auto nodeList = DependencyManager::get<NodeList>();
auto& packetReceiver = nodeList->getPacketReceiver();
packetReceiver.registerMessageListener(PacketType::MessagesData, this, "handleMessagesPacket");
connect(nodeList.data(), &LimitedNodeList::nodeAdded, this, &MessagesClient::handleNodeAdded);
connect(nodeList.data(), &LimitedNodeList::nodeActivated, this, &MessagesClient::handleNodeActivated);
}
void MessagesClient::init() {
@ -99,22 +99,10 @@ void MessagesClient::unsubscribe(const QString& channel) {
}
}
void MessagesClient::handleNodeAdded(SharedNodePointer node) {
void MessagesClient::handleNodeActivated(SharedNodePointer node) {
if (node->getType() == NodeType::MessagesMixer) {
if (!node->getActiveSocket()) {
connect(node.data(), &NetworkPeer::socketActivated, this, &MessagesClient::socketActivated);
} else {
resubscribeToAll();
for (const auto& channel : _subscribedChannels) {
subscribe(channel);
}
}
}
void MessagesClient::socketActivated(const HifiSockAddr& sockAddr) {
resubscribeToAll();
}
void MessagesClient::resubscribeToAll() {
for (const auto& channel : _subscribedChannels) {
subscribe(channel);
}
}
}

View file

@ -37,11 +37,9 @@ signals:
private slots:
void handleMessagesPacket(QSharedPointer<NLPacketList> packetList, SharedNodePointer senderNode);
void handleNodeAdded(SharedNodePointer node);
void socketActivated(const HifiSockAddr& sockAddr);
void handleNodeActivated(SharedNodePointer node);
protected:
void resubscribeToAll();
QSet<QString> _subscribedChannels;
};