42 lines
1.2 KiB
GDScript
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)
|