From d05942953efd1171357e646c68b3aabbf81728ab Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 23 Apr 2025 12:49:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/network.gd | 48 ++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/scripts/network.gd b/scripts/network.gd index ab71697..769eb68 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -1,10 +1,11 @@ class_name Network extends Node -const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb, 'udprawrx': navi.NaviSource} +const UDP_PROTO: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} const SERIAL_PROTO: = {'uart': spt25.SPT25} const MODBUS_PROTO: = {'mbcs': sch3.Sch3} +const UDPRX_PROTO: = {'udprawrx': navi.NaviSource} var tick: int = 0 @@ -54,6 +55,7 @@ var poll_sockets: Array[Socket] var tcp_sockets: Array var units: Dictionary var units_udp: Dictionary +var units_udprx: Dictionary var units_tcp: Dictionary var units_serial: Dictionary var units_modbus: Dictionary @@ -136,8 +138,16 @@ func _ready() -> void: for unit_name in settings.UnitProfiles: var st = settings.UnitProfiles[unit_name] var proto = st[0] - if proto in PROTOCOL_TYPES: - var unit = PROTOCOL_TYPES[proto].new(unit_name) + + if proto in UDPRX_PROTO: + var unit = UDPRX_PROTO[proto].new(unit_name) + var unit_key = settings.get_unit_key(unit_name) + units[unit_key] = unit + units_udp[unit_key] = unit + units_udprx[unit_key] = unit + + if proto in UDP_PROTO: + var unit = UDP_PROTO[proto].new(unit_name) var unit_key = settings.get_unit_key(unit_name) units[unit_key] = unit units_udp[unit_key] = unit @@ -191,17 +201,18 @@ func _ready() -> void: log.info('Модуль работы с сетью готов') -func poll_receive(sock: Socket) -> bool: +func poll_receive_udp(sock: Socket) -> bool: while sock.get_available_packet_count() > 0: var data: = sock.get_packet() var addr: = sock.get_packet_ip() var port: = sock.get_packet_port() var addr_port: = [addr, port] - if addr_port in units: + if units.has(addr_port): units[addr_port].parse(data, tick) - return false - if port in unit_keys: - units[unit_keys[port]].parse(data, tick) + if unit_keys.has(port): + var key = unit_keys[port] + if units.has(key): + units[key].parse(data, tick) return false @@ -257,26 +268,21 @@ func _process(_delta: float) -> void: RenderingServer.global_shader_parameter_set('tick_curent', tick) for addr in units_udp: var unit = units[addr] - match unit.process(tick): - Error.OK: - var sock = send_sockets[unit.name] - sock.send_to([addr[0], dst_ports[addr]], unit.tx_data.slice(0, unit.tx_len)) - Error.FAILED: - emit_signal('socket_error', [unit, sock_unicast]) + if Error.OK == unit.process(tick): + var sock = send_sockets[unit.name] + sock.send_to([addr[0], dst_ports[addr]], unit.tx_data.slice(0, unit.tx_len)) for key in units_serial: var unit_serial = units_serial[key] var serial = serials[key] - match unit_serial.process(tick): - Error.OK: serial.send_to(unit_serial.tx_data) - Error.FAILED: emit_signal('socket_error', [unit_serial, serial]) + if Error.OK == unit_serial.process(tick): + serial.send_to(unit_serial.tx_data) for key in units_modbus: var unit_modbus = units_modbus[key] unit_modbus.process(tick) for sock_unit in tcp_sockets: var sock = sock_unit[0] var unit_tcp = sock_unit[1] - match unit_tcp.process(tick): - Error.OK: sock.send_to(unit_tcp.tx_data) - Error.FAILED: emit_signal('socket_error', [unit_tcp, sock]) + if Error.OK == unit_tcp.process(tick): + sock.send_to(unit_tcp.tx_data) poll_receive_tcp(sock) - poll_sockets.any(func(sock): poll_receive(sock)) + poll_sockets.any(poll_receive_udp)