neon-sprawl/client/addons/gdUnit4/src/network/GdUnitServer.gd

42 lines
1.2 KiB
GDScript

@tool
extends Node
var _client_id: int
@onready var _server: GdUnitTcpServer = $TcpServer
@warning_ignore("return_value_discarded")
func _ready() -> void:
var result := _server.start()
if result.is_error():
push_error(result.error_message())
return
var server_port :int = result.value()
Engine.set_meta("gdunit_server_port", server_port)
_server.client_connected.connect(_on_client_connected)
_server.client_disconnected.connect(_on_client_disconnected)
_server.rpc_data.connect(_receive_rpc_data)
func _on_client_connected(client_id: int) -> void:
_client_id = client_id
GdUnitSignals.instance().gdunit_client_connected.emit(client_id)
func _on_client_disconnected(client_id: int) -> void:
GdUnitSignals.instance().gdunit_client_disconnected.emit(client_id)
func _receive_rpc_data(p_rpc: RPC) -> void:
if p_rpc is RPCMessage:
var rpc_message: RPCMessage = p_rpc
GdUnitSignals.instance().gdunit_message.emit(rpc_message.message())
return
if p_rpc is RPCGdUnitEvent:
var rpc_event: RPCGdUnitEvent = p_rpc
var event := rpc_event.event()
GdUnitSignals.instance().gdunit_event.emit(event)
if event.type() == GdUnitEvent.SESSION_CLOSE and _server != null:
_server.disconnect_client(_client_id)