extends Node


class YeMSTG extends unit.Unit:
    static var json_conv: = JSON.new()
    var online_timeout: float = 5000  ## Должен быть равен наибольшему времени дотоверности из всех кластеров
    var info: = Dictionary()  ## Доклад о состоянии
    var cmd: = Dictionary()   ## Команда
    var cnt: int = 0  ## Счётчик отправленных пакетов

    func _init(unit_name) -> void:
        super._init(unit_name)
        cmd_state = CmdState.DONE

    func parse(data: PackedByteArray, now_tick: int):
        self.rx_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):
            info.merge(json_conv.get_data(), true)
            emit_signal('data_received', info)
        else:
            var msg: = json_conv.get_error_message()
            emit_signal('parse_error', self, msg)

    func process(now_tick: int):
        if online and ((now_tick - rx_tick) > online_timeout):
            online = false
            emit_signal('line_changed', self)
        var rc = Error.ERR_BUSY
        if cmd_state == CmdState.SEND:
            tx_data = JSON.stringify(cmd).to_utf8_buffer()
            tx_len = tx_data.size()
            cmd_state = CmdState.DONE
            rc = Error.OK
        return rc
