Рефактор
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user