| 267 | #endif |
| 268 | |
| 269 | Error SceneMultiplayer::send_command(int p_to, const uint8_t *p_packet, int p_packet_len) { |
| 270 | if (server_relay && get_unique_id() != 1 && p_to != 1 && multiplayer_peer->is_server_relay_supported()) { |
| 271 | // Send relay packet. |
| 272 | relay_buffer->seek(0); |
| 273 | relay_buffer->put_u8(NETWORK_COMMAND_SYS); |
| 274 | relay_buffer->put_u8(SYS_COMMAND_RELAY); |
| 275 | relay_buffer->put_32(p_to); // Set the destination. |
| 276 | relay_buffer->put_data(p_packet, p_packet_len); |
| 277 | multiplayer_peer->set_target_peer(1); |
| 278 | const Vector<uint8_t> data = relay_buffer->get_data_array(); |
| 279 | return _send(data.ptr(), relay_buffer->get_position()); |
| 280 | } |
| 281 | if (p_to > 0) { |
| 282 | ERR_FAIL_COND_V(!connected_peers.has(p_to), ERR_BUG); |
| 283 | multiplayer_peer->set_target_peer(p_to); |
| 284 | return _send(p_packet, p_packet_len); |
| 285 | } else { |
| 286 | for (const int &pid : connected_peers) { |
| 287 | if (p_to && pid == -p_to) { |
| 288 | continue; |
| 289 | } |
| 290 | multiplayer_peer->set_target_peer(pid); |
| 291 | _send(p_packet, p_packet_len); |
| 292 | } |
| 293 | return OK; |
| 294 | } |
| 295 | } |
| 296 | |
| 297 | void SceneMultiplayer::_process_sys(int p_from, const uint8_t *p_packet, int p_packet_len, MultiplayerPeer::TransferMode p_mode, int p_channel) { |
| 298 | ERR_FAIL_COND_MSG(p_packet_len < SYS_CMD_SIZE, "Invalid packet received. Size too small."); |
no test coverage detected