В babbler-cnc.js мы регулярно спрашиваем текущую позицию рабочего инструмента (pos) и текущий статус устройства (status: woring/stopped).
Сейчас мы отправляем соответствующую команду, ждем колбэк с ответом, в нем ставим таймаут на такей же запрос и т.п. При подключении устройства мы запускаем процесс первым запросом (получается типа рекурсия), при отключении - прекращаем процесс (не отправляем новый запрос в колбэке).
Это работает, но есть потенциальный косяк:
// TODO: если отключить устройство после того, как вызван setTimeout(getPos),
// а потом опять подключить до того, как он вызовет getPos, мы
// получим два рекурсивных getPos (один из таймаута, еще один - отсюда)
Поэтому лучше завести глобальный регулярный таймер, который просто будет слать запросы по таймауту. А чтобы не перегружать систему дублирующимися командами, на очередной тик отправлять новый запрос только в том случае, если пришел ответ (или сообщение об ошибке) на старый.
В babbler-cnc.js мы регулярно спрашиваем текущую позицию рабочего инструмента (pos) и текущий статус устройства (status: woring/stopped).
Сейчас мы отправляем соответствующую команду, ждем колбэк с ответом, в нем ставим таймаут на такей же запрос и т.п. При подключении устройства мы запускаем процесс первым запросом (получается типа рекурсия), при отключении - прекращаем процесс (не отправляем новый запрос в колбэке).
Это работает, но есть потенциальный косяк:
Поэтому лучше завести глобальный регулярный таймер, который просто будет слать запросы по таймауту. А чтобы не перегружать систему дублирующимися командами, на очередной тик отправлять новый запрос только в том случае, если пришел ответ (или сообщение об ошибке) на старый.