Merge pull request #35862 from Calinou/improve-enet-error-messages
Improve error explanations related to NetworkedMultiplayerENet
This commit is contained in:
commit
cb68d832f2
|
@ -49,7 +49,7 @@ void NetworkedMultiplayerENet::set_target_peer(int p_peer) {
|
|||
|
||||
int NetworkedMultiplayerENet::get_packet_peer() const {
|
||||
|
||||
ERR_FAIL_COND_V(!active, 1);
|
||||
ERR_FAIL_COND_V_MSG(!active, 1, "The multiplayer instance isn't currently active.");
|
||||
ERR_FAIL_COND_V(incoming_packets.size() == 0, 1);
|
||||
|
||||
return incoming_packets.front()->get().from;
|
||||
|
@ -57,7 +57,7 @@ int NetworkedMultiplayerENet::get_packet_peer() const {
|
|||
|
||||
int NetworkedMultiplayerENet::get_packet_channel() const {
|
||||
|
||||
ERR_FAIL_COND_V(!active, -1);
|
||||
ERR_FAIL_COND_V_MSG(!active, -1, "The multiplayer instance isn't currently active.");
|
||||
ERR_FAIL_COND_V(incoming_packets.size() == 0, -1);
|
||||
|
||||
return incoming_packets.front()->get().channel;
|
||||
|
@ -65,7 +65,7 @@ int NetworkedMultiplayerENet::get_packet_channel() const {
|
|||
|
||||
int NetworkedMultiplayerENet::get_last_packet_channel() const {
|
||||
|
||||
ERR_FAIL_COND_V(!active, -1);
|
||||
ERR_FAIL_COND_V_MSG(!active, -1, "The multiplayer instance isn't currently active.");
|
||||
ERR_FAIL_COND_V(!current_packet.packet, -1);
|
||||
|
||||
return current_packet.channel;
|
||||
|
@ -73,11 +73,11 @@ int NetworkedMultiplayerENet::get_last_packet_channel() const {
|
|||
|
||||
Error NetworkedMultiplayerENet::create_server(int p_port, int p_max_clients, int p_in_bandwidth, int p_out_bandwidth) {
|
||||
|
||||
ERR_FAIL_COND_V(active, ERR_ALREADY_IN_USE);
|
||||
ERR_FAIL_COND_V(p_port < 0 || p_port > 65535, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V(p_max_clients < 1 || p_max_clients > 4095, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V(p_in_bandwidth < 0, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V(p_out_bandwidth < 0, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V_MSG(active, ERR_ALREADY_IN_USE, "The multiplayer instance is already active.");
|
||||
ERR_FAIL_COND_V_MSG(p_port < 0 || p_port > 65535, ERR_INVALID_PARAMETER, "The port number must be set between 0 and 65535 (inclusive).");
|
||||
ERR_FAIL_COND_V_MSG(p_max_clients < 1 || p_max_clients > 4095, ERR_INVALID_PARAMETER, "The number of clients must be set between 1 and 4095 (inclusive).");
|
||||
ERR_FAIL_COND_V_MSG(p_in_bandwidth < 0, ERR_INVALID_PARAMETER, "The incoming bandwidth limit must be greater than or equal to 0 (0 disables the limit).");
|
||||
ERR_FAIL_COND_V_MSG(p_out_bandwidth < 0, ERR_INVALID_PARAMETER, "The outgoing bandwidth limit must be greater than or equal to 0 (0 disables the limit).");
|
||||
|
||||
ENetAddress address;
|
||||
memset(&address, 0, sizeof(address));
|
||||
|
@ -104,7 +104,7 @@ Error NetworkedMultiplayerENet::create_server(int p_port, int p_max_clients, int
|
|||
p_in_bandwidth /* limit incoming bandwidth if > 0 */,
|
||||
p_out_bandwidth /* limit outgoing bandwidth if > 0 */);
|
||||
|
||||
ERR_FAIL_COND_V(!host, ERR_CANT_CREATE);
|
||||
ERR_FAIL_COND_V_MSG(!host, ERR_CANT_CREATE, "Couldn't create an ENet multiplayer server.");
|
||||
|
||||
_setup_compressor();
|
||||
active = true;
|
||||
|
@ -116,11 +116,11 @@ Error NetworkedMultiplayerENet::create_server(int p_port, int p_max_clients, int
|
|||
}
|
||||
Error NetworkedMultiplayerENet::create_client(const String &p_address, int p_port, int p_in_bandwidth, int p_out_bandwidth, int p_client_port) {
|
||||
|
||||
ERR_FAIL_COND_V(active, ERR_ALREADY_IN_USE);
|
||||
ERR_FAIL_COND_V(p_port < 0 || p_port > 65535, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V(p_client_port < 0 || p_client_port > 65535, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V(p_in_bandwidth < 0, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V(p_out_bandwidth < 0, ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V_MSG(active, ERR_ALREADY_IN_USE, "The multiplayer instance is already active.");
|
||||
ERR_FAIL_COND_V_MSG(p_port < 0 || p_port > 65535, ERR_INVALID_PARAMETER, "The server port number must be set between 0 and 65535 (inclusive).");
|
||||
ERR_FAIL_COND_V_MSG(p_client_port < 0 || p_client_port > 65535, ERR_INVALID_PARAMETER, "The client port number must be set between 0 and 65535 (inclusive).");
|
||||
ERR_FAIL_COND_V_MSG(p_in_bandwidth < 0, ERR_INVALID_PARAMETER, "The incoming bandwidth limit must be greater than or equal to 0 (0 disables the limit).");
|
||||
ERR_FAIL_COND_V_MSG(p_out_bandwidth < 0, ERR_INVALID_PARAMETER, "The outgoing bandwidth limit must be greater than or equal to 0 (0 disables the limit).");
|
||||
|
||||
if (p_client_port != 0) {
|
||||
ENetAddress c_client;
|
||||
|
@ -135,7 +135,7 @@ Error NetworkedMultiplayerENet::create_client(const String &p_address, int p_por
|
|||
if (bind_ip.is_wildcard()) {
|
||||
c_client.host = 0;
|
||||
} else {
|
||||
ERR_FAIL_COND_V(!bind_ip.is_ipv4(), ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V_MSG(!bind_ip.is_ipv4(), ERR_INVALID_PARAMETER, "Wildcard IP addresses are only permitted in IPv4, not IPv6.");
|
||||
c_client.host = *(uint32_t *)bind_ip.get_ipv4();
|
||||
}
|
||||
#endif
|
||||
|
@ -155,7 +155,7 @@ Error NetworkedMultiplayerENet::create_client(const String &p_address, int p_por
|
|||
p_out_bandwidth /* limit outgoing bandwidth if > 0 */);
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V(!host, ERR_CANT_CREATE);
|
||||
ERR_FAIL_COND_V_MSG(!host, ERR_CANT_CREATE, "Couldn't create the ENet client host.");
|
||||
|
||||
_setup_compressor();
|
||||
|
||||
|
@ -169,14 +169,14 @@ Error NetworkedMultiplayerENet::create_client(const String &p_address, int p_por
|
|||
ip = IP::get_singleton()->resolve_hostname(p_address, IP::TYPE_IPV4);
|
||||
#endif
|
||||
|
||||
ERR_FAIL_COND_V(!ip.is_valid(), ERR_CANT_RESOLVE);
|
||||
ERR_FAIL_COND_V_MSG(!ip.is_valid(), ERR_CANT_RESOLVE, "Couldn't resolve the server IP address or domain name.");
|
||||
}
|
||||
|
||||
ENetAddress address;
|
||||
#ifdef GODOT_ENET
|
||||
enet_address_set_ip(&address, ip.get_ipv6(), 16);
|
||||
#else
|
||||
ERR_FAIL_COND_V(!ip.is_ipv4(), ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V_MSG(!ip.is_ipv4(), ERR_INVALID_PARAMETER, "Connecting to an IPv6 server isn't supported when using vanilla ENet. Recompile Godot with the bundled ENet library.");
|
||||
address.host = *(uint32_t *)ip.get_ipv4();
|
||||
#endif
|
||||
address.port = p_port;
|
||||
|
@ -188,7 +188,7 @@ Error NetworkedMultiplayerENet::create_client(const String &p_address, int p_por
|
|||
|
||||
if (peer == NULL) {
|
||||
enet_host_destroy(host);
|
||||
ERR_FAIL_COND_V(!peer, ERR_CANT_CREATE);
|
||||
ERR_FAIL_COND_V_MSG(!peer, ERR_CANT_CREATE, "Couldn't connect to the ENet multiplayer server.");
|
||||
}
|
||||
|
||||
// Technically safe to ignore the peer or anything else.
|
||||
|
@ -203,7 +203,7 @@ Error NetworkedMultiplayerENet::create_client(const String &p_address, int p_por
|
|||
|
||||
void NetworkedMultiplayerENet::poll() {
|
||||
|
||||
ERR_FAIL_COND(!active);
|
||||
ERR_FAIL_COND_MSG(!active, "The multiplayer instance isn't currently active.");
|
||||
|
||||
_pop_current_packet();
|
||||
|
||||
|
@ -435,14 +435,14 @@ void NetworkedMultiplayerENet::poll() {
|
|||
}
|
||||
|
||||
bool NetworkedMultiplayerENet::is_server() const {
|
||||
ERR_FAIL_COND_V(!active, false);
|
||||
ERR_FAIL_COND_V_MSG(!active, false, "The multiplayer instance isn't currently active.");
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
void NetworkedMultiplayerENet::close_connection(uint32_t wait_usec) {
|
||||
|
||||
ERR_FAIL_COND(!active);
|
||||
ERR_FAIL_COND_MSG(!active, "The multiplayer instance isn't currently active.");
|
||||
|
||||
_pop_current_packet();
|
||||
|
||||
|
@ -474,9 +474,9 @@ void NetworkedMultiplayerENet::close_connection(uint32_t wait_usec) {
|
|||
|
||||
void NetworkedMultiplayerENet::disconnect_peer(int p_peer, bool now) {
|
||||
|
||||
ERR_FAIL_COND(!active);
|
||||
ERR_FAIL_COND(!is_server());
|
||||
ERR_FAIL_COND(!peer_map.has(p_peer));
|
||||
ERR_FAIL_COND_MSG(!active, "The multiplayer instance isn't currently active.");
|
||||
ERR_FAIL_COND_MSG(!is_server(), "Can't disconnect a peer when not acting as a server.");
|
||||
ERR_FAIL_COND_MSG(!peer_map.has(p_peer), vformat("Peer ID %d not found in the list of peers.", p_peer));
|
||||
|
||||
if (now) {
|
||||
int *id = (int *)peer_map[p_peer]->data;
|
||||
|
@ -515,7 +515,7 @@ int NetworkedMultiplayerENet::get_available_packet_count() const {
|
|||
|
||||
Error NetworkedMultiplayerENet::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
|
||||
|
||||
ERR_FAIL_COND_V(incoming_packets.size() == 0, ERR_UNAVAILABLE);
|
||||
ERR_FAIL_COND_V_MSG(incoming_packets.size() == 0, ERR_UNAVAILABLE, "No incoming packets available.");
|
||||
|
||||
_pop_current_packet();
|
||||
|
||||
|
@ -530,8 +530,8 @@ Error NetworkedMultiplayerENet::get_packet(const uint8_t **r_buffer, int &r_buff
|
|||
|
||||
Error NetworkedMultiplayerENet::put_packet(const uint8_t *p_buffer, int p_buffer_size) {
|
||||
|
||||
ERR_FAIL_COND_V(!active, ERR_UNCONFIGURED);
|
||||
ERR_FAIL_COND_V(connection_status != CONNECTION_CONNECTED, ERR_UNCONFIGURED);
|
||||
ERR_FAIL_COND_V_MSG(!active, ERR_UNCONFIGURED, "The multiplayer instance isn't currently active.");
|
||||
ERR_FAIL_COND_V_MSG(connection_status != CONNECTION_CONNECTED, ERR_UNCONFIGURED, "The multiplayer instance isn't currently connected to any server or client.");
|
||||
|
||||
int packet_flags = 0;
|
||||
int channel = SYSCH_RELIABLE;
|
||||
|
@ -562,7 +562,7 @@ Error NetworkedMultiplayerENet::put_packet(const uint8_t *p_buffer, int p_buffer
|
|||
if (target_peer != 0) {
|
||||
|
||||
E = peer_map.find(ABS(target_peer));
|
||||
ERR_FAIL_COND_V_MSG(!E, ERR_INVALID_PARAMETER, "Invalid target peer '" + itos(target_peer) + "'.");
|
||||
ERR_FAIL_COND_V_MSG(!E, ERR_INVALID_PARAMETER, vformat("Invalid target peer: %d", target_peer));
|
||||
}
|
||||
|
||||
ENetPacket *packet = enet_packet_create(NULL, p_buffer_size + 8, packet_flags);
|
||||
|
@ -650,7 +650,7 @@ uint32_t NetworkedMultiplayerENet::_gen_unique_id() const {
|
|||
|
||||
int NetworkedMultiplayerENet::get_unique_id() const {
|
||||
|
||||
ERR_FAIL_COND_V(!active, 0);
|
||||
ERR_FAIL_COND_V_MSG(!active, 0, "The multiplayer instance isn't currently active.");
|
||||
return unique_id;
|
||||
}
|
||||
|
||||
|
@ -706,7 +706,7 @@ size_t NetworkedMultiplayerENet::enet_compress(void *context, const ENetBuffer *
|
|||
mode = Compression::MODE_ZSTD;
|
||||
} break;
|
||||
default: {
|
||||
ERR_FAIL_V(0);
|
||||
ERR_FAIL_V_MSG(0, vformat("Invalid ENet compression mode: %d", enet->compression_mode));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -781,9 +781,9 @@ void NetworkedMultiplayerENet::enet_compressor_destroy(void *context) {
|
|||
|
||||
IP_Address NetworkedMultiplayerENet::get_peer_address(int p_peer_id) const {
|
||||
|
||||
ERR_FAIL_COND_V(!peer_map.has(p_peer_id), IP_Address());
|
||||
ERR_FAIL_COND_V(!is_server() && p_peer_id != 1, IP_Address());
|
||||
ERR_FAIL_COND_V(peer_map[p_peer_id] == NULL, IP_Address());
|
||||
ERR_FAIL_COND_V_MSG(!peer_map.has(p_peer_id), IP_Address(), vformat("Peer ID %d not found in the list of peers.", p_peer_id));
|
||||
ERR_FAIL_COND_V_MSG(!is_server() && p_peer_id != 1, IP_Address(), "Can't get the address of peers other than the server (ID -1) when acting as a client.");
|
||||
ERR_FAIL_COND_V_MSG(peer_map[p_peer_id] == NULL, IP_Address(), vformat("Peer ID %d found in the list of peers, but is null.", p_peer_id));
|
||||
|
||||
IP_Address out;
|
||||
#ifdef GODOT_ENET
|
||||
|
@ -797,9 +797,9 @@ IP_Address NetworkedMultiplayerENet::get_peer_address(int p_peer_id) const {
|
|||
|
||||
int NetworkedMultiplayerENet::get_peer_port(int p_peer_id) const {
|
||||
|
||||
ERR_FAIL_COND_V(!peer_map.has(p_peer_id), 0);
|
||||
ERR_FAIL_COND_V(!is_server() && p_peer_id != 1, 0);
|
||||
ERR_FAIL_COND_V(peer_map[p_peer_id] == NULL, 0);
|
||||
ERR_FAIL_COND_V_MSG(!peer_map.has(p_peer_id), 0, vformat("Peer ID %d not found in the list of peers.", p_peer_id));
|
||||
ERR_FAIL_COND_V_MSG(!is_server() && p_peer_id != 1, 0, "Can't get the address of peers other than the server (ID -1) when acting as a client.");
|
||||
ERR_FAIL_COND_V_MSG(peer_map[p_peer_id] == NULL, 0, vformat("Peer ID %d found in the list of peers, but is null.", p_peer_id));
|
||||
#ifdef GODOT_ENET
|
||||
return peer_map[p_peer_id]->address.port;
|
||||
#else
|
||||
|
@ -809,8 +809,8 @@ int NetworkedMultiplayerENet::get_peer_port(int p_peer_id) const {
|
|||
|
||||
void NetworkedMultiplayerENet::set_transfer_channel(int p_channel) {
|
||||
|
||||
ERR_FAIL_COND(p_channel < -1 || p_channel >= channel_count);
|
||||
ERR_FAIL_COND_MSG(p_channel == SYSCH_CONFIG, "Channel " + itos(SYSCH_CONFIG) + " is reserved.");
|
||||
ERR_FAIL_COND_MSG(p_channel < -1 || p_channel >= channel_count, vformat("The transfer channel must be set between 0 and %d, inclusive (got %d).", channel_count - 1, p_channel));
|
||||
ERR_FAIL_COND_MSG(p_channel == SYSCH_CONFIG, vformat("The channel %d is reserved.", SYSCH_CONFIG));
|
||||
transfer_channel = p_channel;
|
||||
}
|
||||
|
||||
|
@ -820,8 +820,8 @@ int NetworkedMultiplayerENet::get_transfer_channel() const {
|
|||
|
||||
void NetworkedMultiplayerENet::set_channel_count(int p_channel) {
|
||||
|
||||
ERR_FAIL_COND(active);
|
||||
ERR_FAIL_COND(p_channel < SYSCH_MAX);
|
||||
ERR_FAIL_COND_MSG(active, "The channel count can't be set while the multiplayer instance is active.");
|
||||
ERR_FAIL_COND_MSG(p_channel < SYSCH_MAX, vformat("The channel count must be greater than or equal to %d to account for reserved channels (got %d).", SYSCH_MAX, p_channel));
|
||||
channel_count = p_channel;
|
||||
}
|
||||
|
||||
|
@ -838,7 +838,7 @@ bool NetworkedMultiplayerENet::is_always_ordered() const {
|
|||
}
|
||||
|
||||
void NetworkedMultiplayerENet::set_server_relay_enabled(bool p_enabled) {
|
||||
ERR_FAIL_COND(active);
|
||||
ERR_FAIL_COND_MSG(active, "Server relaying can't be toggled while the multiplayer instance is active.");
|
||||
|
||||
server_relay = p_enabled;
|
||||
}
|
||||
|
@ -916,7 +916,7 @@ NetworkedMultiplayerENet::~NetworkedMultiplayerENet() {
|
|||
// Sets IP for ENet to bind when using create_server or create_client
|
||||
// if no IP is set, then ENet bind to ENET_HOST_ANY
|
||||
void NetworkedMultiplayerENet::set_bind_ip(const IP_Address &p_ip) {
|
||||
ERR_FAIL_COND(!p_ip.is_valid() && !p_ip.is_wildcard());
|
||||
ERR_FAIL_COND_MSG(!p_ip.is_valid() && !p_ip.is_wildcard(), vformat("Invalid bind IP address: %s", String(p_ip)));
|
||||
|
||||
bind_ip = p_ip;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue