setting up GDUnit
Some checks failed
Create tag and build when new code gets to main / Export (push) Failing after 3m40s

This commit is contained in:
2026-01-25 18:19:26 +01:00
parent 39d6ab1c5f
commit c28d97de2d
471 changed files with 29716 additions and 16 deletions

View File

@@ -0,0 +1,124 @@
class_name GdUnitTcpClient
extends GdUnitTcpNode
signal connection_succeeded(message: String)
signal connection_failed(message: String)
var _client_name: String
var _debug := false
var _host: String
var _port: int
var _client_id: int
var _connected: bool
var _stream: StreamPeerTCP
func _init(client_name := "GdUnit4 TCP Client", debug := false) -> void:
_client_name = client_name
_debug = debug
func _ready() -> void:
_connected = false
_stream = StreamPeerTCP.new()
#_stream.set_big_endian(true)
func stop() -> void:
console("Disconnecting from server")
if _stream != null:
rpc_send(_stream, RPCClientDisconnect.new().with_id(_client_id))
if _stream != null:
_stream.disconnect_from_host()
_connected = false
func start(host: String, port: int) -> GdUnitResult:
_host = host
_port = port
if _connected:
return GdUnitResult.warn("Client already connected ... %s:%d" % [_host, _port])
# Connect client to server
if _stream.get_status() != StreamPeerTCP.STATUS_CONNECTED:
var err := _stream.connect_to_host(host, port)
#prints("connect_to_host", host, port, err)
if err != OK:
return GdUnitResult.error("GdUnit4: Can't establish client, error code: %s" % err)
return GdUnitResult.success("GdUnit4: Client connected checked port %d" % port)
func _process(_delta: float) -> void:
match _stream.get_status():
StreamPeerTCP.STATUS_NONE:
return
StreamPeerTCP.STATUS_CONNECTING:
set_process(false)
# wait until client is connected to server
for retry in 10:
@warning_ignore("return_value_discarded")
_stream.poll()
console("Waiting to connect ..")
if _stream.get_status() == StreamPeerTCP.STATUS_CONNECTING:
await get_tree().create_timer(0.500).timeout
if _stream.get_status() == StreamPeerTCP.STATUS_CONNECTED:
set_process(true)
return
set_process(true)
_stream.disconnect_from_host()
console("Connection failed")
connection_failed.emit("Connect to TCP Server %s:%d faild!" % [_host, _port])
StreamPeerTCP.STATUS_CONNECTED:
if not _connected:
var rpc_data :RPC = null
set_process(false)
while rpc_data == null:
await get_tree().create_timer(0.500).timeout
rpc_data = rpc_receive()
set_process(true)
_client_id = (rpc_data as RPCClientConnect).client_id()
console("Connected to Server: %d" % _client_id)
connection_succeeded.emit("Connect to TCP Server %s:%d success." % [_host, _port])
_connected = true
process_rpc()
StreamPeerTCP.STATUS_ERROR:
console("Connection failed")
_stream.disconnect_from_host()
connection_failed.emit("Connect to TCP Server %s:%d faild!" % [_host, _port])
return
func is_client_connected() -> bool:
return _connected
func process_rpc() -> void:
if _stream.get_available_bytes() > 0:
var rpc_data := rpc_receive()
if rpc_data is RPCClientDisconnect:
stop()
func send(data: RPC) -> void:
rpc_send(_stream, data)
func rpc_receive() -> RPC:
return receive_packages(_stream).front()
func console(value: Variant) -> void:
if _debug:
print(_client_name, ": ", value)
func _on_connection_failed(message: String) -> void:
console("Connection faild by: " + message)
func _on_connection_succeeded(message: String) -> void:
console("Connected: " + message)