mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-06 16:00:08 +01:00
The signaling server protocol has been rewritten to use JSON format to be more readable. Lobbies now support both mesh and client/server modes (selected during creation). The client/server mode uses the SceneMultiplayer relay mode as implemented in beta4. The demo now uses an RPC for pinging, and connects to the MultiplayerAPI instead of using the raw MultiplayerPeer.
82 lines
1.9 KiB
GDScript
82 lines
1.9 KiB
GDScript
extends Control
|
|
|
|
@onready var client = $Client
|
|
@onready var host = $VBoxContainer/Connect/Host
|
|
@onready var room = $VBoxContainer/Connect/RoomSecret
|
|
@onready var mesh = $VBoxContainer/Connect/Mesh
|
|
|
|
func _ready():
|
|
client.lobby_joined.connect(_lobby_joined)
|
|
client.lobby_sealed.connect(_lobby_sealed)
|
|
client.connected.connect(_connected)
|
|
client.disconnected.connect(_disconnected)
|
|
|
|
multiplayer.connected_to_server.connect(_mp_server_connected)
|
|
multiplayer.connection_failed.connect(_mp_server_disconnect)
|
|
multiplayer.server_disconnected.connect(_mp_server_disconnect)
|
|
multiplayer.peer_connected.connect(_mp_peer_connected)
|
|
multiplayer.peer_disconnected.connect(_mp_peer_disconnected)
|
|
|
|
|
|
@rpc(any_peer, call_local)
|
|
func ping(argument):
|
|
_log("[Multiplayer] Ping from peer %d: arg: %s" % [multiplayer.get_remote_sender_id(), argument])
|
|
|
|
|
|
func _mp_server_connected():
|
|
_log("[Multiplayer] Server connected (I am %d)" % client.rtc_mp.get_unique_id())
|
|
|
|
|
|
func _mp_server_disconnect():
|
|
_log("[Multiplayer] Server disconnected (I am %d)" % client.rtc_mp.get_unique_id())
|
|
|
|
|
|
func _mp_peer_connected(id: int):
|
|
_log("[Multiplayer] Peer %d connected" % id)
|
|
|
|
|
|
func _mp_peer_disconnected(id: int):
|
|
_log("[Multiplayer] Peer %d disconnected" % id)
|
|
|
|
|
|
func _connected(id):
|
|
_log("[Signaling] Server connected with ID: %d" % id)
|
|
|
|
|
|
func _disconnected():
|
|
_log("[Signaling] Server disconnected: %d - %s" % [client.code, client.reason])
|
|
|
|
|
|
func _lobby_joined(lobby):
|
|
_log("[Signaling] Joined lobby %s" % lobby)
|
|
|
|
|
|
func _lobby_sealed():
|
|
_log("[Signaling] Lobby has been sealed")
|
|
|
|
|
|
func _log(msg):
|
|
print(msg)
|
|
$VBoxContainer/TextEdit.text += str(msg) + "\n"
|
|
|
|
|
|
func _on_peers_pressed():
|
|
_log(multiplayer.get_peers())
|
|
|
|
|
|
func _on_ping_pressed():
|
|
randomize()
|
|
ping.rpc(randf())
|
|
|
|
|
|
func _on_seal_pressed():
|
|
client.seal_lobby()
|
|
|
|
|
|
func _on_start_pressed():
|
|
client.start(host.text, room.text, mesh.button_pressed)
|
|
|
|
|
|
func _on_stop_pressed():
|
|
client.stop()
|