From cd0ba31533c4552042a93022c40fb3866a3ac9be Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 19 Aug 2019 18:15:50 +0200 Subject: [PATCH] Fix WebSocketServer relaying message 2 times. The WebSocketMultiplayerPeer was relaying the same message two times, both in _server_relay and _process_multiplayer (which was only supposed to store the packet, given the server was one of the destination). _process_multiplayer now only store the packet, and calls _server_relay which will relay the message to other clients if needed. (cherry picked from commit d1539db2c6e42b4425adb8f8373eda155bc8b735) --- modules/websocket/websocket_multiplayer_peer.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/modules/websocket/websocket_multiplayer_peer.cpp b/modules/websocket/websocket_multiplayer_peer.cpp index 6aab8a7e813..0feaa740bf4 100644 --- a/modules/websocket/websocket_multiplayer_peer.cpp +++ b/modules/websocket/websocket_multiplayer_peer.cpp @@ -299,8 +299,6 @@ void WebSocketMultiplayerPeer::_process_multiplayer(Ref p_peer, u ERR_FAIL_COND(type != SYS_NONE); // Only server sends sys messages ERR_FAIL_COND(from != p_peer_id); // Someone is cheating - _server_relay(from, to, in_buffer, size); // Relay if needed - if (to == 1) { // This is for the server _store_pkt(from, to, in_buffer, data_size); @@ -315,13 +313,9 @@ void WebSocketMultiplayerPeer::_process_multiplayer(Ref p_peer, u // All but one, for us if not excluded if (_peer_id != -(int32_t)p_peer_id) _store_pkt(from, to, in_buffer, data_size); - - } else { - - // Send to specific peer - ERR_FAIL_COND(!_peer_map.has(to)); - get_peer(to)->put_packet(in_buffer, size); } + // Relay if needed (i.e. "to" includes a peer that is not the server) + _server_relay(from, to, in_buffer, size); } else {