45 lines
1.3 KiB
GDScript
45 lines
1.3 KiB
GDScript
extends Node
|
|
|
|
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())
|
|
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)
|