#Peer connected signal does not fire on Godot 4.2

2 messages · Page 1 of 1 (latest)

valid citrus
#

I don't know if this is the expected behaviour. I'm using ENetMultiplayerPeer to create a multiplayer server and connect to it.
The signal peer_connected is only received by the host, not the rest of the peers.

You can reproduce this if you create a scene with a default Node and attach the following script (see next message)

Debug this scene by launching 3 instances. When host launches, and first client connects, it works properly, the host receives peer_connected signal. But when the second client connects, only host receives peer_connected signal, the first client doesn't receive anything.

#
extends Node

var network: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
var max_players: int = 4

func _process(delta):
    if Input.is_action_just_pressed("ui_left"):
        start_server(54545)
    if Input.is_action_just_pressed("ui_right"):
        connect_to_server("127.0.0.1", 54545)

func start_server(port: int) -> String:
    network.create_server(port, max_players)
    multiplayer.multiplayer_peer = network
    multiplayer.multiplayer_peer.peer_connected.connect(_peer_connected)
    multiplayer.multiplayer_peer.peer_disconnected.connect(_peer_disconnected)
    print("I am " + str(get_tree().get_multiplayer().get_unique_id()) + ". Server started")
    return ""

func connect_to_server(ip: String, port: int) -> String:
    network.create_client(ip, port)
    multiplayer.multiplayer_peer = network
    while multiplayer.multiplayer_peer.get_connection_status() == MultiplayerPeer.CONNECTION_CONNECTING:
        await get_tree().create_timer(0.01).timeout
    if multiplayer.multiplayer_peer.get_connection_status() == MultiplayerPeer.CONNECTION_DISCONNECTED:
        print("Failed to start multiplayer client.")
        return "Error while starting multiplayer client"
    multiplayer.multiplayer_peer.peer_connected.connect(_peer_connected)
    multiplayer.multiplayer_peer.peer_disconnected.connect(_peer_disconnected)
    print("I am " + str(get_tree().get_multiplayer().get_unique_id()) + ". Connected to server successfully")
    return ""

func _peer_connected(player_id):
    print("I am " + str(get_tree().get_multiplayer().get_unique_id()) + ". Player " + str(player_id) + " connected")

func _peer_disconnected(player_id):
    print("I am " + str(get_tree().get_multiplayer().get_unique_id()) + "Player " + str(player_id) + " disconnected")