Files
uarep-ctl/scripts/capsrpb.gd
2025-09-18 23:24:42 +03:00

46 lines
1.8 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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