Browse Source

Improve error explanations related to NetworkedMultiplayerENet

Hugo Locurcio 5 years ago
parent
commit
61bf5bf73f
1 changed files with 43 additions and 43 deletions
  1. 43 43
      modules/enet/networked_multiplayer_enet.cpp

+ 43 - 43
modules/enet/networked_multiplayer_enet.cpp

@@ -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;
 }