mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 16:41:02 +02:00
Merge pull request #13809 from birarda/feat/reliable-avatar-kill
make avatar kill packets from mixer reliable
This commit is contained in:
commit
d1a80e57be
2 changed files with 10 additions and 7 deletions
|
@ -447,18 +447,21 @@ void AvatarMixer::handleAvatarKilled(SharedNodePointer avatarNode) {
|
||||||
// send a kill packet for it to our other nodes
|
// send a kill packet for it to our other nodes
|
||||||
nodeList->eachMatchingNode([&](const SharedNodePointer& node) {
|
nodeList->eachMatchingNode([&](const SharedNodePointer& node) {
|
||||||
// we relay avatar kill packets to agents that are not upstream
|
// we relay avatar kill packets to agents that are not upstream
|
||||||
// and downstream avatar mixers, if the node that was just killed was being replicated
|
// and downstream avatar mixers, if the node that was just killed was being replicatedConnectedAgent
|
||||||
return (node->getType() == NodeType::Agent && !node->isUpstream()) ||
|
return node->getActiveSocket() &&
|
||||||
(avatarNode->isReplicated() && shouldReplicateTo(*avatarNode, *node));
|
((node->getType() == NodeType::Agent && !node->isUpstream()) ||
|
||||||
|
(avatarNode->isReplicated() && shouldReplicateTo(*avatarNode, *node)));
|
||||||
}, [&](const SharedNodePointer& node) {
|
}, [&](const SharedNodePointer& node) {
|
||||||
if (node->getType() == NodeType::Agent) {
|
if (node->getType() == NodeType::Agent) {
|
||||||
if (!killPacket) {
|
if (!killPacket) {
|
||||||
killPacket = NLPacket::create(PacketType::KillAvatar, NUM_BYTES_RFC4122_UUID + sizeof(KillAvatarReason));
|
killPacket = NLPacket::create(PacketType::KillAvatar, NUM_BYTES_RFC4122_UUID + sizeof(KillAvatarReason), true);
|
||||||
killPacket->write(avatarNode->getUUID().toRfc4122());
|
killPacket->write(avatarNode->getUUID().toRfc4122());
|
||||||
killPacket->writePrimitive(KillAvatarReason::AvatarDisconnected);
|
killPacket->writePrimitive(KillAvatarReason::AvatarDisconnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeList->sendUnreliablePacket(*killPacket, *node);
|
auto killPacketCopy = NLPacket::createCopy(*killPacket);
|
||||||
|
|
||||||
|
nodeList->sendPacket(std::move(killPacketCopy), *node);
|
||||||
} else {
|
} else {
|
||||||
// send a replicated kill packet to the downstream avatar mixer
|
// send a replicated kill packet to the downstream avatar mixer
|
||||||
if (!replicatedKillPacket) {
|
if (!replicatedKillPacket) {
|
||||||
|
|
|
@ -108,7 +108,7 @@ uint16_t AvatarMixerClientData::getLastBroadcastSequenceNumber(const QUuid& node
|
||||||
void AvatarMixerClientData::ignoreOther(SharedNodePointer self, SharedNodePointer other) {
|
void AvatarMixerClientData::ignoreOther(SharedNodePointer self, SharedNodePointer other) {
|
||||||
if (!isRadiusIgnoring(other->getUUID())) {
|
if (!isRadiusIgnoring(other->getUUID())) {
|
||||||
addToRadiusIgnoringSet(other->getUUID());
|
addToRadiusIgnoringSet(other->getUUID());
|
||||||
auto killPacket = NLPacket::create(PacketType::KillAvatar, NUM_BYTES_RFC4122_UUID + sizeof(KillAvatarReason));
|
auto killPacket = NLPacket::create(PacketType::KillAvatar, NUM_BYTES_RFC4122_UUID + sizeof(KillAvatarReason), true);
|
||||||
killPacket->write(other->getUUID().toRfc4122());
|
killPacket->write(other->getUUID().toRfc4122());
|
||||||
if (self->isIgnoreRadiusEnabled()) {
|
if (self->isIgnoreRadiusEnabled()) {
|
||||||
killPacket->writePrimitive(KillAvatarReason::TheirAvatarEnteredYourBubble);
|
killPacket->writePrimitive(KillAvatarReason::TheirAvatarEnteredYourBubble);
|
||||||
|
@ -116,7 +116,7 @@ void AvatarMixerClientData::ignoreOther(SharedNodePointer self, SharedNodePointe
|
||||||
killPacket->writePrimitive(KillAvatarReason::YourAvatarEnteredTheirBubble);
|
killPacket->writePrimitive(KillAvatarReason::YourAvatarEnteredTheirBubble);
|
||||||
}
|
}
|
||||||
setLastBroadcastTime(other->getUUID(), 0);
|
setLastBroadcastTime(other->getUUID(), 0);
|
||||||
DependencyManager::get<NodeList>()->sendUnreliablePacket(*killPacket, *self);
|
DependencyManager::get<NodeList>()->sendPacket(std::move(killPacket), *self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue