Files
uarep-ctl/scripts/capsrpb.gd

44 lines
1.6 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.

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)