class ServeTelemetry(LineReceiver):
    """Serve the telemetry"""
    def __init__(self, producer, raw_source, header):
        print('initing {}'.format(self.__class__))
        self._producer = producer
        self._is_commander = False
        self._raw_telemetry_source = raw_source
        self._command_parser = CommandParser()
        self._header = header

    def connectionMade(self):
        self.proxy = ProducerConsumerBufferProxy(self._producer, self)
        self.transport.registerProducer(self.proxy, True)
        self.proxy.write(self._header + '\r\n')
        self.proxy.resumeProducing()

    def lineReceived(self, line):
        print('from {} received line {}'.format(self.transport.getPeer(),
                                                line))
        if line == 'commander':
            self._is_commander = True
            self._command_parser
        elif self._is_commander:
            valid, command = self._command_parser.parse_command(line.rstrip())
            if valid:
                self._raw_telemetry_source.async_tx(command)
            else:
                print('command not valid')

    def connectionLost(self, reason):
        print('connection lost from {}'.format(self.transport.getPeer()))
        self.transport.unregisterProducer()
class ServeTelemetry(LineReceiver):
    """Serve the telemetry"""
    def __init__(self, producer, raw_source, header):
        print('initing {}'.format(self.__class__))
        self._producer = producer
        self._is_commander = False
        self._raw_telemetry_source = raw_source
        self._command_parser = CommandParser()
        self._header = header

    def connectionMade(self):
        self.proxy = ProducerConsumerBufferProxy(self._producer, self)
        self.transport.registerProducer(self.proxy, True)
        self.proxy.write(self._header+'\r\n')
        self.proxy.resumeProducing()

    def lineReceived(self, line):
        print('from {} received line {}'.format(
            self.transport.getPeer(), line))
        if line == 'commander':
            self._is_commander = True
            self._command_parser
        elif self._is_commander:
            valid, command = self._command_parser.parse_command(line.rstrip())
            if valid:
                self._raw_telemetry_source.async_tx(command)
            else:
                print('command not valid')


    def connectionLost(self, reason):
        print('connection lost from {}'.format(self.transport.getPeer()))
        self.transport.unregisterProducer()