extends Node
## Test scene for HyperswarmMultiplayerPeer.
## Run two instances: one as server, one as client.
@export var is_server: bool = true
@export var server_port: int = 9514
@export var server_address: String = "127.0.0.1"
@onready var status_label: Label = $UI/VBox/StatusLabel
@onready var log_text: RichTextLabel = $UI/VBox/LogText
@onready var input_field: LineEdit = $UI/VBox/HBox/InputField
@onready var send_button: Button = $UI/VBox/HBox/SendButton
var peer: HyperswarmMultiplayerPeer
func _ready() -> void:
peer = HyperswarmMultiplayerPeer.new()
send_button.pressed.connect(_on_send)
input_field.text_submitted.connect(func(_t: String): _on_send())
if is_server:
_start_server()
else:
_start_client()
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
func _start_server() -> void:
var err := peer.create_server(server_port)
if err != OK:
_log("Failed to start server: %d" % err)
return
_log("Server started on port %d" % server_port)
_log("Unique ID: %d" % peer.get_unique_id())
status_label.text = "Server (port %d)" % server_port
func _start_client() -> void:
var err := peer.create_client(server_address, server_port)
if err != OK:
_log("Failed to connect: %d" % err)
return
_log("Connecting to %s:%d..." % [server_address, server_port])
status_label.text = "Client (connecting...)"
func _on_peer_connected(id: int) -> void:
_log("Peer connected: %d" % id)
status_label.text = "Connected (peer %d)" % multiplayer.get_unique_id()
func _on_peer_disconnected(id: int) -> void:
_log("Peer disconnected: %d" % id)
func _on_send() -> void:
var text := input_field.text.strip_edges()
if text == "":
return
input_field.text = ""
_log("[Me] %s" % text)
rpc("_receive_message", text)
@rpc("any_peer", "reliable")
func _receive_message(text: String) -> void:
var sender := multiplayer.get_remote_sender_id()
_log("[Peer %d] %s" % [sender, text])
func _log(msg: String) -> void:
log_text.append_text(msg + "\n")
print(msg)