setting up GDUnit
Some checks failed
Create tag and build when new code gets to main / Export (push) Failing after 3m40s
Some checks failed
Create tag and build when new code gets to main / Export (push) Failing after 3m40s
This commit is contained in:
124
addons/gdUnit4/src/network/GdUnitTcpClient.gd
Normal file
124
addons/gdUnit4/src/network/GdUnitTcpClient.gd
Normal 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)
|
||||
Reference in New Issue
Block a user