You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
[MP] Add MultiplayerPeer disconnect_peer, close.
Update ENet, WebRTC, and WebSocket to support peer disconnection and unify the close function.
This commit is contained in:
@@ -22,12 +22,6 @@
|
||||
Three channels will be created for reliable, unreliable, and ordered transport. The value of [code]unreliable_lifetime[/code] will be passed to the [code]maxPacketLifetime[/code] option when creating unreliable and ordered channels (see [method WebRTCPeerConnection.create_data_channel]).
|
||||
</description>
|
||||
</method>
|
||||
<method name="close">
|
||||
<return type="void" />
|
||||
<description>
|
||||
Close all the add peer connections and channels, freeing all resources.
|
||||
</description>
|
||||
</method>
|
||||
<method name="create_client">
|
||||
<return type="int" enum="Error" />
|
||||
<param index="0" name="peer_id" type="int" />
|
||||
|
||||
@@ -42,7 +42,6 @@ void WebRTCMultiplayerPeer::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("has_peer", "peer_id"), &WebRTCMultiplayerPeer::has_peer);
|
||||
ClassDB::bind_method(D_METHOD("get_peer", "peer_id"), &WebRTCMultiplayerPeer::get_peer);
|
||||
ClassDB::bind_method(D_METHOD("get_peers"), &WebRTCMultiplayerPeer::get_peers);
|
||||
ClassDB::bind_method(D_METHOD("close"), &WebRTCMultiplayerPeer::close);
|
||||
}
|
||||
|
||||
void WebRTCMultiplayerPeer::set_target_peer(int p_peer_id) {
|
||||
@@ -352,6 +351,18 @@ void WebRTCMultiplayerPeer::remove_peer(int p_peer_id) {
|
||||
}
|
||||
}
|
||||
|
||||
void WebRTCMultiplayerPeer::disconnect_peer(int p_peer_id, bool p_force) {
|
||||
ERR_FAIL_COND(!peer_map.has(p_peer_id));
|
||||
if (p_force) {
|
||||
peer_map.erase(p_peer_id);
|
||||
if (network_mode == MODE_CLIENT && p_peer_id == TARGET_PEER_SERVER) {
|
||||
connection_status = CONNECTION_DISCONNECTED;
|
||||
}
|
||||
} else {
|
||||
peer_map[p_peer_id]->connection->close(); // Will be removed during next poll.
|
||||
}
|
||||
}
|
||||
|
||||
Error WebRTCMultiplayerPeer::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
|
||||
// Peer not available
|
||||
if (next_packet_peer == 0 || !peer_map.has(next_packet_peer)) {
|
||||
|
||||
@@ -98,28 +98,29 @@ public:
|
||||
bool has_peer(int p_peer_id);
|
||||
Dictionary get_peer(int p_peer_id);
|
||||
Dictionary get_peers();
|
||||
void close();
|
||||
|
||||
// PacketPeer
|
||||
Error get_packet(const uint8_t **r_buffer, int &r_buffer_size) override; ///< buffer is GONE after next get_packet
|
||||
Error put_packet(const uint8_t *p_buffer, int p_buffer_size) override;
|
||||
int get_available_packet_count() const override;
|
||||
int get_max_packet_size() const override;
|
||||
virtual Error get_packet(const uint8_t **r_buffer, int &r_buffer_size) override; ///< buffer is GONE after next get_packet
|
||||
virtual Error put_packet(const uint8_t *p_buffer, int p_buffer_size) override;
|
||||
virtual int get_available_packet_count() const override;
|
||||
virtual int get_max_packet_size() const override;
|
||||
|
||||
// MultiplayerPeer
|
||||
void set_target_peer(int p_peer_id) override;
|
||||
virtual void set_target_peer(int p_peer_id) override;
|
||||
|
||||
int get_unique_id() const override;
|
||||
int get_packet_peer() const override;
|
||||
int get_packet_channel() const override;
|
||||
TransferMode get_packet_mode() const override;
|
||||
virtual int get_unique_id() const override;
|
||||
virtual int get_packet_peer() const override;
|
||||
virtual int get_packet_channel() const override;
|
||||
virtual TransferMode get_packet_mode() const override;
|
||||
|
||||
bool is_server() const override;
|
||||
bool is_server_relay_supported() const override;
|
||||
virtual bool is_server() const override;
|
||||
virtual bool is_server_relay_supported() const override;
|
||||
|
||||
void poll() override;
|
||||
virtual void poll() override;
|
||||
virtual void close() override;
|
||||
virtual void disconnect_peer(int p_peer_id, bool p_force = false) override;
|
||||
|
||||
ConnectionStatus get_connection_status() const override;
|
||||
virtual ConnectionStatus get_connection_status() const override;
|
||||
};
|
||||
|
||||
#endif // WEBRTC_MULTIPLAYER_PEER_H
|
||||
|
||||
Reference in New Issue
Block a user