From ff8aa67c7b234cd04f239aa4f79e3f40c27fcb01 Mon Sep 17 00:00:00 2001 From: "Cyril B." <53737317+Cykyrios@users.noreply.github.com> Date: Sat, 27 Sep 2025 11:34:26 +0200 Subject: [PATCH] Make LFSConnection abstract --- .../src/connection/lfs_connection.gd | 26 +++++++------------ .../src/connection/lfs_connection_tcp.gd | 12 +++++---- .../src/connection/lfs_connection_udp.gd | 14 ++++++---- addons/godot_insim/src/insim/insim.gd | 14 +++++----- addons/godot_insim/src/outgauge/outgauge.gd | 4 +-- addons/godot_insim/src/outsim/outsim.gd | 4 +-- addons/godot_insim/test/insim/test_insim.gd | 19 +++++++++----- 7 files changed, 49 insertions(+), 44 deletions(-) diff --git a/addons/godot_insim/src/connection/lfs_connection.gd b/addons/godot_insim/src/connection/lfs_connection.gd index c4c1278..0ff9882 100644 --- a/addons/godot_insim/src/connection/lfs_connection.gd +++ b/addons/godot_insim/src/connection/lfs_connection.gd @@ -1,4 +1,4 @@ -class_name LFSConnection +@abstract class_name LFSConnection extends Node ## Base class for connection and data I/O with LFS ## @@ -25,29 +25,21 @@ var udp_port := 0 ## Dedicated UDP port for responses, see [code]docs/InSim.txt func _process(_delta: float) -> void: - _get_incoming_packets() + get_incoming_packets() -## Virtual function to be overridden, starting with a call to [code]super[/code]. ## Connects to the host at the given [param c_address] and [param c_port]; [param c_udp_port] can ## be used for TCP connections expecting UDP responses on a different port. -func _connect_to_host(c_address: String, c_port: int, c_udp_port := 0) -> void: - address = c_address - port = c_port - udp_port = c_udp_port +@abstract func connect_to_host(c_address: String, c_port: int, c_udp_port := 0) -> void -## Virtual function to be overridden. Disconnects from the host. -func _disconnect_from_host() -> void: - pass +## Disconnects from the host. +@abstract func disconnect_from_host() -> void -## Virtual function to be overridden. Reads incoming packets. -func _get_incoming_packets() -> void: - pass +## Reads incoming packets. +@abstract func get_incoming_packets() -> void -## Virtual function to be overridden. Sends a raw [param packet]. -@warning_ignore("unused_parameter") -func _send_packet(packet: PackedByteArray) -> bool: - return false +## Sends a raw [param packet]. +@abstract func send_packet(packet: PackedByteArray) -> bool diff --git a/addons/godot_insim/src/connection/lfs_connection_tcp.gd b/addons/godot_insim/src/connection/lfs_connection_tcp.gd index 6647aa0..3685cbe 100644 --- a/addons/godot_insim/src/connection/lfs_connection_tcp.gd +++ b/addons/godot_insim/src/connection/lfs_connection_tcp.gd @@ -11,8 +11,10 @@ func _init() -> void: stream = StreamPeerTCP.new() -func _connect_to_host(c_address: String, c_port: int, c_udp_port := 0) -> void: - super(c_address, c_port, c_udp_port) +func connect_to_host(c_address: String, c_port: int, c_udp_port := 0) -> void: + address = c_address + port = c_port + udp_port = c_udp_port var error := stream.connect_to_host(address, port) if error != OK: push_error("Connection error: %d" % [error]) @@ -40,11 +42,11 @@ func _connect_to_host(c_address: String, c_port: int, c_udp_port := 0) -> void: connection_failed.emit() -func _disconnect_from_host() -> void: +func disconnect_from_host() -> void: stream.disconnect_from_host() -func _get_incoming_packets() -> void: +func get_incoming_packets() -> void: if not stream: return var packet_buffer := PackedByteArray() @@ -67,7 +69,7 @@ func _get_incoming_packets() -> void: _discard = stream.poll() -func _send_packet(packet: PackedByteArray) -> bool: +func send_packet(packet: PackedByteArray) -> bool: var error := stream.put_data(packet) if error != OK: push_error("Error sending packet: %d" % [error]) diff --git a/addons/godot_insim/src/connection/lfs_connection_udp.gd b/addons/godot_insim/src/connection/lfs_connection_udp.gd index 750b808..15aa675 100644 --- a/addons/godot_insim/src/connection/lfs_connection_udp.gd +++ b/addons/godot_insim/src/connection/lfs_connection_udp.gd @@ -11,8 +11,12 @@ func _init() -> void: socket = PacketPeerUDP.new() -func _connect_to_host(c_address: String, c_port: int, c_udp_port := 0, is_out := false) -> void: - super(c_address, c_port, c_udp_port) +func connect_to_host( + c_address: String, c_port: int, c_udp_port := 0, is_out := false +) -> void: + address = c_address + port = c_port + udp_port = c_udp_port var error := -1 # I honestly have no idea why I have to do this, but socket.connect_to_host() doesn't work for # OutGauge/OutSim, packets aren't received. OTOH, socket.bind() returns 2 for InSim... @@ -27,11 +31,11 @@ func _connect_to_host(c_address: String, c_port: int, c_udp_port := 0, is_out := connection_failed.emit() -func _disconnect_from_host() -> void: +func disconnect_from_host() -> void: socket.close() -func _get_incoming_packets() -> void: +func get_incoming_packets() -> void: var packet_buffer := PackedByteArray() while socket.get_available_packet_count() > 0: packet_buffer = socket.get_packet() @@ -42,7 +46,7 @@ func _get_incoming_packets() -> void: packet_received.emit(packet_buffer) -func _send_packet(packet: PackedByteArray) -> bool: +func send_packet(packet: PackedByteArray) -> bool: if not socket.is_socket_connected(): await connected var error := socket.put_packet(packet) diff --git a/addons/godot_insim/src/insim/insim.gd b/addons/godot_insim/src/insim/insim.gd index bff188d..45faa73 100644 --- a/addons/godot_insim/src/insim/insim.gd +++ b/addons/godot_insim/src/insim/insim.gd @@ -1057,8 +1057,8 @@ func close() -> void: return send_packet(InSimTinyPacket.create(0, Tiny.TINY_CLOSE)) print("Closing InSim connection.") - lfs_connection._disconnect_from_host() - nlp_mci_connection._disconnect_from_host() + lfs_connection.disconnect_from_host() + nlp_mci_connection.disconnect_from_host() insim_connected = false ping_timer.stop() _initializing = false @@ -1110,7 +1110,7 @@ func initialize( lfs_connection.queue_free() await get_tree().process_frame if lfs_connection: - lfs_connection._disconnect_from_host() + lfs_connection.disconnect_from_host() else: if use_udp: lfs_connection = LFSConnectionUDP.new() @@ -1119,7 +1119,7 @@ func initialize( add_child(lfs_connection) _connect_lfs_connection_signals() _initializing = true - lfs_connection._connect_to_host(address, port, initialization_data.udp_port) + lfs_connection.connect_to_host(address, port, initialization_data.udp_port) ## Returns [code]true[/code] if this InSim instance is a host application (remote connected @@ -1212,7 +1212,7 @@ func send_packet(packet: InSimPacket, sender := "InSim") -> void: ): push_error("Cannot send packet: InSim is not connected.") packet.fill_buffer() - var packet_sent_successfully := lfs_connection._send_packet(packet.buffer) + var packet_sent_successfully := lfs_connection.send_packet(packet.buffer) if packet_sent_successfully: packet_sent.emit(packet, sender) @@ -1535,9 +1535,9 @@ func _on_connected_to_host() -> void: initialization_data.admin, initialization_data.i_name )) - nlp_mci_connection._disconnect_from_host() + nlp_mci_connection.disconnect_from_host() if initialization_data.udp_port != 0: - nlp_mci_connection._connect_to_host( + nlp_mci_connection.connect_to_host( lfs_connection.address, lfs_connection.udp_port, 0, true ) _reset_timeout_timer() diff --git a/addons/godot_insim/src/outgauge/outgauge.gd b/addons/godot_insim/src/outgauge/outgauge.gd index 9d3208c..6d1a8bf 100644 --- a/addons/godot_insim/src/outgauge/outgauge.gd +++ b/addons/godot_insim/src/outgauge/outgauge.gd @@ -32,12 +32,12 @@ func _ready() -> void: ## [b]Note:[/b] As OutGauge data is transmitted over UDP, there is no connection per se; this simply ## means the [OutGauge] instance will stop listening to packets. func close() -> void: - _lfs_connection._disconnect_from_host() + _lfs_connection.disconnect_from_host() ## Enables packet listening over UDP with the given [param address] and [param port]. func initialize(address := "127.0.0.1", port := 29_998) -> void: - _lfs_connection._connect_to_host(address, port, 0, true) + _lfs_connection.connect_to_host(address, port, 0, true) func _on_packet_received(packet_buffer: PackedByteArray) -> void: diff --git a/addons/godot_insim/src/outsim/outsim.gd b/addons/godot_insim/src/outsim/outsim.gd index 3587d2b..2e96f4c 100644 --- a/addons/godot_insim/src/outsim/outsim.gd +++ b/addons/godot_insim/src/outsim/outsim.gd @@ -47,13 +47,13 @@ func _ready() -> void: ## [b]Note:[/b] As OutSim data is transmitted over UDP, there is no connection per se; this simply ## means the [OutSim] instance will stop listening to packets. func close() -> void: - _lfs_connection._disconnect_from_host() + _lfs_connection.disconnect_from_host() ## Enables packet listening over UDP with the given [param address] and [param port]. func initialize(options: int, address := "127.0.0.1", port := 29_997) -> void: outsim_options = options - _lfs_connection._connect_to_host(address, port, 0, true) + _lfs_connection.connect_to_host(address, port, 0, true) func _on_packet_received(packet_buffer: PackedByteArray) -> void: diff --git a/addons/godot_insim/test/insim/test_insim.gd b/addons/godot_insim/test/insim/test_insim.gd index c3cd166..596c0ce 100644 --- a/addons/godot_insim/test/insim/test_insim.gd +++ b/addons/godot_insim/test/insim/test_insim.gd @@ -3,11 +3,21 @@ extends GdUnitTestSuite # TestSuite generated from const __source = "res://addons/godot_insim/src/insim/insim.gd" +var tcp_server: TCPServer = null +var insim: InSim = null + + +func before_test() -> void: + tcp_server = auto_free(TCPServer.new()) + var _error := tcp_server.listen(29_999, "127.0.0.1") + insim = mock(InSim, CALL_REAL_FUNC) + var lfs_connection := auto_free(LFSConnectionTCP.new()) as LFSConnectionTCP + insim.add_child(lfs_connection) + insim.lfs_connection = lfs_connection + insim.initialize("127.0.0.1", 29_999, InSimInitializationData.new()) + func test_send_message() -> void: - var insim := mock(InSim, CALL_REAL_FUNC) as InSim - insim.lfs_connection = auto_free(LFSConnection.new()) - insim.insim_connected = true insim.send_message("message") @warning_ignore("unsafe_method_access") var _interaction: GdUnitObjectInteractions = verify(insim, 1).send_message("message") @@ -118,9 +128,6 @@ func test_send_message_split_long_messages( ], ] ) -> void: - var insim := mock(InSim, CALL_REAL_FUNC) as InSim - insim.lfs_connection = auto_free(LFSConnection.new()) - insim.insim_connected = true insim.send_message(message) for split in splits: @warning_ignore("unsafe_method_access") -- GitLab