[MP] Avoid error spam in relay protocol when clients disconnect

When multiple clients are connected, and the server is using the relay
sub-protocol, it might happen that a client disconnects while a packet
sent to it from another peer is still in transit.

In that case, when the packet reaches the server for relaying, it used
to generate an error (as the destination client did no longer exists).

This commit changes check to suppress the error message while still
skipping the packet.
This commit is contained in:
Fabio Alessandrelli 2024-08-06 09:51:28 +02:00
parent 3978628c6c
commit 531c72f30d
1 changed files with 4 additions and 2 deletions

View File

@ -307,8 +307,10 @@ void SceneMultiplayer::_process_sys(int p_from, const uint8_t *p_packet, int p_p
int len = p_packet_len - SYS_CMD_SIZE; int len = p_packet_len - SYS_CMD_SIZE;
bool should_process = false; bool should_process = false;
if (get_unique_id() == 1) { // I am the server. if (get_unique_id() == 1) { // I am the server.
// Direct messages to server should not go through relay. // The requested target might have disconnected while the packet was in transit.
ERR_FAIL_COND(peer > 0 && !connected_peers.has(peer)); if (unlikely(peer > 0 && !connected_peers.has(peer))) {
return;
}
// Send relay packet. // Send relay packet.
relay_buffer->seek(0); relay_buffer->seek(0);
relay_buffer->put_u8(NETWORK_COMMAND_SYS); relay_buffer->put_u8(NETWORK_COMMAND_SYS);