mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 10:37:56 +02:00
make domain server reliably broadcast all node disconnects
This commit is contained in:
parent
8f6600facf
commit
d1ace7914e
2 changed files with 13 additions and 5 deletions
|
@ -2985,6 +2985,8 @@ void DomainServer::nodeKilled(SharedNodePointer node) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
broadcastNodeDisconnect(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedAssignmentPointer DomainServer::dequeueMatchingAssignment(const QUuid& assignmentUUID, NodeType_t nodeType) {
|
SharedAssignmentPointer DomainServer::dequeueMatchingAssignment(const QUuid& assignmentUUID, NodeType_t nodeType) {
|
||||||
|
@ -3170,18 +3172,23 @@ void DomainServer::handleKillNode(SharedNodePointer nodeToKill) {
|
||||||
const QUuid& nodeUUID = nodeToKill->getUUID();
|
const QUuid& nodeUUID = nodeToKill->getUUID();
|
||||||
|
|
||||||
limitedNodeList->killNodeWithUUID(nodeUUID);
|
limitedNodeList->killNodeWithUUID(nodeUUID);
|
||||||
|
}
|
||||||
|
|
||||||
static auto removedNodePacket = NLPacket::create(PacketType::DomainServerRemovedNode, NUM_BYTES_RFC4122_UUID);
|
void DomainServer::broadcastNodeDisconnect(const SharedNodePointer& disconnectedNode) {
|
||||||
|
auto limitedNodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
|
|
||||||
|
static auto removedNodePacket = NLPacket::create(PacketType::DomainServerRemovedNode, NUM_BYTES_RFC4122_UUID, true);
|
||||||
|
|
||||||
removedNodePacket->reset();
|
removedNodePacket->reset();
|
||||||
removedNodePacket->write(nodeUUID.toRfc4122());
|
removedNodePacket->write(disconnectedNode->getUUID().toRfc4122());
|
||||||
|
|
||||||
// broadcast out the DomainServerRemovedNode message
|
// broadcast out the DomainServerRemovedNode message
|
||||||
limitedNodeList->eachMatchingNode([this, &nodeToKill](const SharedNodePointer& otherNode) -> bool {
|
limitedNodeList->eachMatchingNode([this, &disconnectedNode](const SharedNodePointer& otherNode) -> bool {
|
||||||
// only send the removed node packet to nodes that care about the type of node this was
|
// only send the removed node packet to nodes that care about the type of node this was
|
||||||
return isInInterestSet(otherNode, nodeToKill);
|
return isInInterestSet(otherNode, disconnectedNode);
|
||||||
}, [&limitedNodeList](const SharedNodePointer& otherNode){
|
}, [&limitedNodeList](const SharedNodePointer& otherNode){
|
||||||
limitedNodeList->sendUnreliablePacket(*removedNodePacket, *otherNode);
|
auto removedNodePacketCopy = NLPacket::createCopy(*removedNodePacket);
|
||||||
|
limitedNodeList->sendPacket(std::move(removedNodePacketCopy), *otherNode);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,7 @@ private:
|
||||||
unsigned int countConnectedUsers();
|
unsigned int countConnectedUsers();
|
||||||
|
|
||||||
void handleKillNode(SharedNodePointer nodeToKill);
|
void handleKillNode(SharedNodePointer nodeToKill);
|
||||||
|
void broadcastNodeDisconnect(const SharedNodePointer& disconnnectedNode);
|
||||||
|
|
||||||
void sendDomainListToNode(const SharedNodePointer& node, const HifiSockAddr& senderSockAddr);
|
void sendDomainListToNode(const SharedNodePointer& node, const HifiSockAddr& senderSockAddr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue