Есть некое устройство. Подключается к компьютеру через COM или USB.
Протокол обмена:
Компьютер посылает запрос — устройство присылает ответ. В случае ошибки, ответ может и не прийти.
При некоторых событиях устройство может послать сообщение компьютеру само, без запроса.
Пока я использую самую примитивную реализацию: посылаю запрос и некоторое время жду ответа. В первом приближении это работает, но валится, если устройство само пришлет сообщение.
Хочется сделать более надежную реализацию. Мне это видится как-то так:
Две очереди: посланных и принятых сообщений. Функция, которая формирует из них третью очередь — пар запрос-ответ. Причем, в третьей очереди могут быть и неполные пары: запрос без ответа, и ответ без запроса.
Принципы спаривания сообщений:
1) По времени. Ответ должен прийти в течение некоторого промежутка времени после отправления запроса.
2) По смыслу. Есть функция, определяющая, может ли данное сообщение быть ответом на данный запрос.
Не хочется изобретать велосипед. Наверняка есть и теория всего этого дела, и готовые библиотечные реализации, и open-source программы. Подскажите, пожалуйста, куда копать. Ссылки, книги, ключевые слова для поиска...