Рефактор

This commit is contained in:
sasha80
2025-04-23 12:49:36 +03:00
parent bbb6630314
commit d05942953e

View File

@@ -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)