extends Node ## Реализация "Протокол информационного сопряжения ## СПО АСУ изделия «МП‑550» с СПО «Управления КАПС РПБ»" const ONLINE_TIMEOUT = 5.0 ## Время ожидания пакета от ячейки, секунды const BUFFER_SIZE = 2048 ## Размер приёмного буфера для датаграмм class CapsRpb: signal line_changed(unit: CapsRpb) signal data_received(unit: CapsRpb) signal command_fail(unit: CapsRpb) signal parse_error(unit: CapsRpb, msg: String) static var json_conv: = JSON.new() var online: = false var name: String var json_dic: Dictionary var tick: = 0.0 var tick_rx: = 0.0 func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) func _init(nm): self.name = nm func parse(data): tick_rx = tick if not online: online = true emit_signal('line_changed', self) var utf8_data = data.get_string_from_utf8() if Error.OK == json_conv.parse(utf8_data): json_dic.merge(json_conv.get_data(), true) emit_signal('data_received', self) else: var msg = json_conv.get_error_message() emit_signal('parse_error', self, msg) func process(delta: float): tick += delta if online and ((tick - tick_rx) > ONLINE_TIMEOUT): online = false emit_signal('line_changed', self)