sadr0b0t / babbler-robots

0 stars 1 forks source link

Стратегия опроса устройства: глобальный таймер, а не таймаут в колбэке #17

Closed sadr0b0t closed 7 years ago

sadr0b0t commented 7 years ago

В babbler-cnc.js мы регулярно спрашиваем текущую позицию рабочего инструмента (pos) и текущий статус устройства (status: woring/stopped).

Сейчас мы отправляем соответствующую команду, ждем колбэк с ответом, в нем ставим таймаут на такей же запрос и т.п. При подключении устройства мы запускаем процесс первым запросом (получается типа рекурсия), при отключении - прекращаем процесс (не отправляем новый запрос в колбэке).

Это работает, но есть потенциальный косяк:

// TODO: если отключить устройство после того, как вызван setTimeout(getPos),
// а потом опять подключить до того, как он вызовет getPos, мы 
// получим два рекурсивных getPos (один из таймаута, еще один - отсюда)

Поэтому лучше завести глобальный регулярный таймер, который просто будет слать запросы по таймауту. А чтобы не перегружать систему дублирующимися командами, на очередной тик отправлять новый запрос только в том случае, если пришел ответ (или сообщение об ошибке) на старый.

sadr0b0t commented 7 years ago

и вот исправлено https://github.com/1i7/babbler-robots/commit/519cd6b73258926980f25e160cfb2bf1de5d3c68