Есть прибор, который может по TCP/IP интерфейсу получать команды и возвращать ответ. Доступны следующие команды:

ЗапросОтветКомментарий
"start\n""OK\n" / "Error $code\n" / Empty

Вместо $code подставлен код ошибки. Empty означает, что ответ не пришел в течение одной секунды.

Команда переводит прибор в инициализированное состояние.

"stop\n""OK\n" / "Error $code\n" / EmptyПереводит прибор в неинициализированное состояние
"read\n""result=$result\n"/ "Error $code\n" / EmptyСчитывает текущее показание прибора в формате 00.000

Требуется:

Дополнительное условие:

В случае нештатного прерывания программы, должен отсылаться запрос на выключение прибора.

Дополнительная задача:

Сделать асинхронное считывание данных, то есть при запросе передается действие, которое нужно совершить после считывания и очередь выполнения освобождается.