diff --git a/scripts/network.gd b/scripts/network.gd index ab71697b..769eb686 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)