mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-04 23:10:08 +01:00
Avoid freeing network peer during signal emission.
Always keep a reference to the last used peer even when removing it from tree.
This commit is contained in:
@@ -6,6 +6,8 @@ const DEFAULT_PORT = 10567
|
|||||||
# Max number of players.
|
# Max number of players.
|
||||||
const MAX_PEERS = 12
|
const MAX_PEERS = 12
|
||||||
|
|
||||||
|
var peer = null
|
||||||
|
|
||||||
# Name for my player.
|
# Name for my player.
|
||||||
var player_name = "The Warrior"
|
var player_name = "The Warrior"
|
||||||
|
|
||||||
@@ -125,16 +127,16 @@ remote func ready_to_start(id):
|
|||||||
|
|
||||||
func host_game(new_player_name):
|
func host_game(new_player_name):
|
||||||
player_name = new_player_name
|
player_name = new_player_name
|
||||||
var host = NetworkedMultiplayerENet.new()
|
peer = NetworkedMultiplayerENet.new()
|
||||||
host.create_server(DEFAULT_PORT, MAX_PEERS)
|
peer.create_server(DEFAULT_PORT, MAX_PEERS)
|
||||||
get_tree().set_network_peer(host)
|
get_tree().set_network_peer(peer)
|
||||||
|
|
||||||
|
|
||||||
func join_game(ip, new_player_name):
|
func join_game(ip, new_player_name):
|
||||||
player_name = new_player_name
|
player_name = new_player_name
|
||||||
var client = NetworkedMultiplayerENet.new()
|
peer = NetworkedMultiplayerENet.new()
|
||||||
client.create_client(ip, DEFAULT_PORT)
|
peer.create_client(ip, DEFAULT_PORT)
|
||||||
get_tree().set_network_peer(client)
|
get_tree().set_network_peer(peer)
|
||||||
|
|
||||||
|
|
||||||
func get_player_list():
|
func get_player_list():
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ onready var join_button = $JoinButton
|
|||||||
onready var status_ok = $StatusOk
|
onready var status_ok = $StatusOk
|
||||||
onready var status_fail = $StatusFail
|
onready var status_fail = $StatusFail
|
||||||
|
|
||||||
|
var peer = null
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
# Connect all the callbacks related to networking.
|
# Connect all the callbacks related to networking.
|
||||||
get_tree().connect("network_peer_connected", self, "_player_connected")
|
get_tree().connect("network_peer_connected", self, "_player_connected")
|
||||||
@@ -46,7 +48,6 @@ func _connected_fail():
|
|||||||
_set_status("Couldn't connect", false)
|
_set_status("Couldn't connect", false)
|
||||||
|
|
||||||
get_tree().set_network_peer(null) # Remove peer.
|
get_tree().set_network_peer(null) # Remove peer.
|
||||||
|
|
||||||
host_button.set_disabled(false)
|
host_button.set_disabled(false)
|
||||||
join_button.set_disabled(false)
|
join_button.set_disabled(false)
|
||||||
|
|
||||||
@@ -80,15 +81,15 @@ func _set_status(text, isok):
|
|||||||
|
|
||||||
|
|
||||||
func _on_host_pressed():
|
func _on_host_pressed():
|
||||||
var host = NetworkedMultiplayerENet.new()
|
peer = NetworkedMultiplayerENet.new()
|
||||||
host.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
|
peer.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
|
||||||
var err = host.create_server(DEFAULT_PORT, 1) # Maximum of 1 peer, since it's a 2-player game.
|
var err = peer.create_server(DEFAULT_PORT, 1) # Maximum of 1 peer, since it's a 2-player game.
|
||||||
if err != OK:
|
if err != OK:
|
||||||
# Is another server running?
|
# Is another server running?
|
||||||
_set_status("Can't host, address in use.",false)
|
_set_status("Can't host, address in use.",false)
|
||||||
return
|
return
|
||||||
|
|
||||||
get_tree().set_network_peer(host)
|
get_tree().set_network_peer(peer)
|
||||||
host_button.set_disabled(true)
|
host_button.set_disabled(true)
|
||||||
join_button.set_disabled(true)
|
join_button.set_disabled(true)
|
||||||
_set_status("Waiting for player...", true)
|
_set_status("Waiting for player...", true)
|
||||||
@@ -100,9 +101,9 @@ func _on_join_pressed():
|
|||||||
_set_status("IP address is invalid", false)
|
_set_status("IP address is invalid", false)
|
||||||
return
|
return
|
||||||
|
|
||||||
var host = NetworkedMultiplayerENet.new()
|
peer = NetworkedMultiplayerENet.new()
|
||||||
host.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
|
peer.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
|
||||||
host.create_client(ip, DEFAULT_PORT)
|
peer.create_client(ip, DEFAULT_PORT)
|
||||||
get_tree().set_network_peer(host)
|
get_tree().set_network_peer(peer)
|
||||||
|
|
||||||
_set_status("Connecting...", true)
|
_set_status("Connecting...", true)
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ onready var _name_edit = $Panel/VBoxContainer/HBoxContainer/NameEdit
|
|||||||
onready var _host_edit = $Panel/VBoxContainer/HBoxContainer2/Hostname
|
onready var _host_edit = $Panel/VBoxContainer/HBoxContainer2/Hostname
|
||||||
onready var _game = $Panel/VBoxContainer/Game
|
onready var _game = $Panel/VBoxContainer/Game
|
||||||
|
|
||||||
|
var peer = null
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
#warning-ignore-all:return_value_discarded
|
#warning-ignore-all:return_value_discarded
|
||||||
get_tree().connect("network_peer_disconnected", self, "_peer_disconnected")
|
get_tree().connect("network_peer_disconnected", self, "_peer_disconnected")
|
||||||
@@ -68,10 +70,10 @@ func _peer_disconnected(id):
|
|||||||
|
|
||||||
|
|
||||||
func _on_Host_pressed():
|
func _on_Host_pressed():
|
||||||
var host = WebSocketServer.new()
|
peer = WebSocketServer.new()
|
||||||
host.listen(DEF_PORT, PoolStringArray(["ludus"]), true)
|
peer.listen(DEF_PORT, PoolStringArray(["ludus"]), true)
|
||||||
get_tree().connect("server_disconnected", self, "_close_network")
|
get_tree().connect("server_disconnected", self, "_close_network")
|
||||||
get_tree().set_network_peer(host)
|
get_tree().set_network_peer(peer)
|
||||||
_game.add_player(1, _name_edit.text)
|
_game.add_player(1, _name_edit.text)
|
||||||
start_game()
|
start_game()
|
||||||
|
|
||||||
@@ -81,9 +83,9 @@ func _on_Disconnect_pressed():
|
|||||||
|
|
||||||
|
|
||||||
func _on_Connect_pressed():
|
func _on_Connect_pressed():
|
||||||
var host = WebSocketClient.new()
|
peer = WebSocketClient.new()
|
||||||
host.connect_to_url("ws://" + _host_edit.text + ":" + str(DEF_PORT), PoolStringArray([PROTO_NAME]), true)
|
peer.connect_to_url("ws://" + _host_edit.text + ":" + str(DEF_PORT), PoolStringArray([PROTO_NAME]), true)
|
||||||
get_tree().connect("connection_failed", self, "_close_network")
|
get_tree().connect("connection_failed", self, "_close_network")
|
||||||
get_tree().connect("connected_to_server", self, "_connected")
|
get_tree().connect("connected_to_server", self, "_connected")
|
||||||
get_tree().set_network_peer(host)
|
get_tree().set_network_peer(peer)
|
||||||
start_game()
|
start_game()
|
||||||
|
|||||||
Reference in New Issue
Block a user