You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Missing some bits, and added connection status.
This commit is contained in:
@@ -12,11 +12,16 @@ void NetworkedMultiplayerPeer::_bind_methods() {
|
|||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("poll"), &NetworkedMultiplayerPeer::poll );
|
ObjectTypeDB::bind_method(_MD("poll"), &NetworkedMultiplayerPeer::poll );
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method(_MD("get_connection_status"), &NetworkedMultiplayerPeer::get_connection_status );
|
||||||
|
|
||||||
BIND_CONSTANT( TRANSFER_MODE_UNRELIABLE );
|
BIND_CONSTANT( TRANSFER_MODE_UNRELIABLE );
|
||||||
BIND_CONSTANT( TRANSFER_MODE_RELIABLE );
|
BIND_CONSTANT( TRANSFER_MODE_RELIABLE );
|
||||||
BIND_CONSTANT( TRANSFER_MODE_ORDERED );
|
BIND_CONSTANT( TRANSFER_MODE_ORDERED );
|
||||||
|
|
||||||
|
BIND_CONSTANT( CONNECTION_DISCONNECTED );
|
||||||
|
BIND_CONSTANT( CONNECTION_CONNECTING );
|
||||||
|
BIND_CONSTANT( CONNECTION_CONNECTED );
|
||||||
|
|
||||||
ADD_SIGNAL( MethodInfo("peer_connected",PropertyInfo(Variant::STRING,"id")));
|
ADD_SIGNAL( MethodInfo("peer_connected",PropertyInfo(Variant::STRING,"id")));
|
||||||
ADD_SIGNAL( MethodInfo("peer_disconnected",PropertyInfo(Variant::STRING,"id")));
|
ADD_SIGNAL( MethodInfo("peer_disconnected",PropertyInfo(Variant::STRING,"id")));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,12 @@ public:
|
|||||||
TRANSFER_MODE_ORDERED
|
TRANSFER_MODE_ORDERED
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ConnectionStatus {
|
||||||
|
CONNECTION_DISCONNECTED,
|
||||||
|
CONNECTION_CONNECTING,
|
||||||
|
CONNECTION_CONNECTED,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
virtual void set_transfer_mode(TransferMode p_mode)=0;
|
virtual void set_transfer_mode(TransferMode p_mode)=0;
|
||||||
virtual void set_target_peer(const StringName& p_peer_id)=0;
|
virtual void set_target_peer(const StringName& p_peer_id)=0;
|
||||||
@@ -26,12 +32,14 @@ public:
|
|||||||
virtual StringName get_packet_peer() const=0;
|
virtual StringName get_packet_peer() const=0;
|
||||||
virtual int get_packet_channel() const=0;
|
virtual int get_packet_channel() const=0;
|
||||||
|
|
||||||
|
|
||||||
virtual void poll()=0;
|
virtual void poll()=0;
|
||||||
|
|
||||||
|
virtual ConnectionStatus get_connection_status() const=0;
|
||||||
|
|
||||||
NetworkedMultiplayerPeer();
|
NetworkedMultiplayerPeer();
|
||||||
};
|
};
|
||||||
|
|
||||||
VARIANT_ENUM_CAST( NetworkedMultiplayerPeer::TransferMode )
|
VARIANT_ENUM_CAST( NetworkedMultiplayerPeer::TransferMode )
|
||||||
|
VARIANT_ENUM_CAST( NetworkedMultiplayerPeer::ConnectionStatus )
|
||||||
|
|
||||||
#endif // NetworkedMultiplayerPeer_H
|
#endif // NetworkedMultiplayerPeer_H
|
||||||
|
|||||||
@@ -50,12 +50,37 @@ Error NetworkedMultiplayerENet::create_server(int p_port, int p_max_clients, int
|
|||||||
|
|
||||||
active=true;
|
active=true;
|
||||||
server=true;
|
server=true;
|
||||||
|
connection_status=CONNECTION_CONNECTED;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
Error NetworkedMultiplayerENet::create_client(const IP_Address& p_ip,int p_port, int p_max_channels, int p_in_bandwidth, int p_out_bandwidth){
|
Error NetworkedMultiplayerENet::create_client(const IP_Address& p_ip,int p_port, int p_max_channels, int p_in_bandwidth, int p_out_bandwidth){
|
||||||
|
|
||||||
ERR_FAIL_COND_V(active,ERR_ALREADY_IN_USE);
|
ERR_FAIL_COND_V(active,ERR_ALREADY_IN_USE);
|
||||||
|
|
||||||
|
host = enet_host_create (NULL /* create a client host */,
|
||||||
|
1 /* only allow 1 outgoing connection */,
|
||||||
|
p_max_channels /* allow up 2 channels to be used, 0 and 1 */,
|
||||||
|
p_in_bandwidth /* 56K modem with 56 Kbps downstream bandwidth */,
|
||||||
|
p_out_bandwidth /* 56K modem with 14 Kbps upstream bandwidth */);
|
||||||
|
|
||||||
|
ERR_FAIL_COND_V(!host,ERR_CANT_CREATE);
|
||||||
|
|
||||||
|
|
||||||
|
ENetAddress address;
|
||||||
|
address.host=p_ip.host;
|
||||||
|
address.port=p_port;
|
||||||
|
|
||||||
|
/* Initiate the connection, allocating the two channels 0 and 1. */
|
||||||
|
ENetPeer *peer = enet_host_connect (host, & address, p_max_channels, 0);
|
||||||
|
|
||||||
|
if (peer == NULL) {
|
||||||
|
enet_host_destroy(host);
|
||||||
|
ERR_FAIL_COND_V(!peer,ERR_CANT_CREATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//technically safe to ignore the peer or anything else.
|
||||||
|
|
||||||
|
connection_status=CONNECTION_CONNECTING;
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -83,6 +108,8 @@ void NetworkedMultiplayerENet::poll(){
|
|||||||
|
|
||||||
peer_map[*new_id]=event.peer;
|
peer_map[*new_id]=event.peer;
|
||||||
|
|
||||||
|
connection_status=CONNECTION_CONNECTED; //if connecting, this means it connected t something!
|
||||||
|
|
||||||
emit_signal("peer_connected",*new_id);
|
emit_signal("peer_connected",*new_id);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
@@ -110,6 +137,9 @@ void NetworkedMultiplayerENet::poll(){
|
|||||||
//destroy packet later..
|
//destroy packet later..
|
||||||
|
|
||||||
}break;
|
}break;
|
||||||
|
case ENET_EVENT_TYPE_NONE: {
|
||||||
|
//do nothing
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -123,14 +153,8 @@ void NetworkedMultiplayerENet::disconnect() {
|
|||||||
enet_host_destroy(host);
|
enet_host_destroy(host);
|
||||||
active=false;
|
active=false;
|
||||||
incoming_packets.clear();
|
incoming_packets.clear();
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkedMultiplayerENet::_bind_methods() {
|
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("create_server","port","max_clients","max_channels","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_server,DEFVAL(32),DEFVAL(1),DEFVAL(0),DEFVAL(0));
|
|
||||||
ObjectTypeDB::bind_method(_MD("create_client","ip","port","max_channels","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_client,DEFVAL(1),DEFVAL(0),DEFVAL(0));
|
|
||||||
ObjectTypeDB::bind_method(_MD("disconnect"),&NetworkedMultiplayerENet::disconnect);
|
|
||||||
|
|
||||||
|
connection_status=CONNECTION_DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NetworkedMultiplayerENet::get_available_packet_count() const {
|
int NetworkedMultiplayerENet::get_available_packet_count() const {
|
||||||
@@ -207,6 +231,20 @@ void NetworkedMultiplayerENet::_pop_current_packet() const {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetworkedMultiplayerPeer::ConnectionStatus NetworkedMultiplayerENet::get_connection_status() const {
|
||||||
|
|
||||||
|
return connection_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkedMultiplayerENet::_bind_methods() {
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method(_MD("create_server","port","max_clients","max_channels","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_server,DEFVAL(32),DEFVAL(1),DEFVAL(0),DEFVAL(0));
|
||||||
|
ObjectTypeDB::bind_method(_MD("create_client","ip","port","max_channels","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_client,DEFVAL(1),DEFVAL(0),DEFVAL(0));
|
||||||
|
ObjectTypeDB::bind_method(_MD("disconnect"),&NetworkedMultiplayerENet::disconnect);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
NetworkedMultiplayerENet::NetworkedMultiplayerENet(){
|
NetworkedMultiplayerENet::NetworkedMultiplayerENet(){
|
||||||
|
|
||||||
active=false;
|
active=false;
|
||||||
@@ -214,7 +252,9 @@ NetworkedMultiplayerENet::NetworkedMultiplayerENet(){
|
|||||||
send_channel=0;
|
send_channel=0;
|
||||||
current_packet.packet=NULL;
|
current_packet.packet=NULL;
|
||||||
transfer_mode=TRANSFER_MODE_ORDERED;
|
transfer_mode=TRANSFER_MODE_ORDERED;
|
||||||
|
connection_status=CONNECTION_DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkedMultiplayerENet::~NetworkedMultiplayerENet(){
|
NetworkedMultiplayerENet::~NetworkedMultiplayerENet(){
|
||||||
|
|
||||||
if (active) {
|
if (active) {
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ class NetworkedMultiplayerENet : public NetworkedMultiplayerPeer {
|
|||||||
ENetPeer *peer;
|
ENetPeer *peer;
|
||||||
ENetHost *host;
|
ENetHost *host;
|
||||||
|
|
||||||
|
ConnectionStatus connection_status;
|
||||||
|
|
||||||
Map<StringName,ENetPeer*> peer_map;
|
Map<StringName,ENetPeer*> peer_map;
|
||||||
|
|
||||||
struct Packet {
|
struct Packet {
|
||||||
@@ -60,6 +62,7 @@ public:
|
|||||||
|
|
||||||
virtual int get_max_packet_size() const;
|
virtual int get_max_packet_size() const;
|
||||||
|
|
||||||
|
virtual ConnectionStatus get_connection_status() const;
|
||||||
|
|
||||||
NetworkedMultiplayerENet();
|
NetworkedMultiplayerENet();
|
||||||
~NetworkedMultiplayerENet();
|
~NetworkedMultiplayerENet();
|
||||||
|
|||||||
Reference in New Issue
Block a user