class_name STC extends Node ## Реализация "Протокол информационного сопряжения. ## СПО АСУ изделия «МП‑550» с СПО «Управления КАПС РПБ». const ONLINE_TIMEOUT = 3000 ## Время ожидания пакета от КАПС РПБ, мс. const BUFFER_SIZE = 2048 ## Размер приёмного буфера для датаграмм. class CapsRpb extends unit.Unit: static var json_conv: = JSON.new() ## Аппарат для разбора сообщений. var json_dic: Dictionary var tick: = 0 ## Тик время последнего обновления, мс. var tx_stack: Array ## Массив пакетов для отправки. var source_addr: Array ## Адрес отправителя данных func _to_string() -> String: return String('CapsRpb(\"%s\")' % self.name) func _init(unit_name): self.name = unit_name func parse(data: PackedByteArray, now_tick: int): tick = now_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(now_tick: int): if online and ((now_tick - tick) > ONLINE_TIMEOUT): online = false emit_signal('line_changed', self) if len(tx_stack): tx_data = tx_stack[0] tx_len = len(tx_data) tx_stack.remove_at(0) return Error.OK else: return Error.ERR_BUSY