удалить AbstractMultiStageOperation
текущее положение вещей
для выполнения операций, у которых есть критерий завершения -- перемещение с отслеживанием текущей координаты -- добавлен набор классов cmd::AbstractMultiStageOperation + ряд наследников, реализующих разные действия
эти классы работают по принципу state machine, где ряд states определяет последовательность операций (посылок), которые нужно выоплнить (отправить)
например, перед запуском передвижения необходимо запихать параметры скорости
проблема
есть ряд сложностей
- поддерживать state machine неудобно
- переключение логики может быть неочевидно
- сложности с регистрацией операций на выполнение (введены какие-то ExecutionPolicy, которые по сути не используются)
- сложности с необходимостью вводить play/pause методы, чтобы "приостанавливать" выполнение операции, при частом переключении происходят всякие беды и приложенеи падает #71 (closed) #44 (closed)
- сложности с error propagation наверх до модуля выполнения операций
- слонжости с обработкой ошибок отдельных операций, ведь надо написать +- общий обработчик
- слонжости с обработкой самой операции -- в модуле выполнения операций добавляется лишняя ветка проверки на наследование + вытаскивать текущую операцию из несокльких слоёв матрешки
- сложности с пробросом прогресса выполнения многоступенчатой операции
- сложности с тестированием -- переключение состояний завязано на завершение отдельных операций, тесты должны быть очень большими, чтобы хоть немного продвинуться + там кажется была завязка на qt'шные таймеры слоты, которые мы не мжоем запускать в рамках google test -> еще прокол по тестам
- нельзя (в текущей реализации) создавать под-операции НЕ наследующиеся от Serial - неудобно
предлагаемое решение
- убить концепцию многоступенчатых операций
- ввести enum состояния завершения операции - Finished, Retry, Error
- модуль выполнения операций, получив сигнал
finished()будет проверять это состояние - если Finished -- помечаем объект операции на удаление и счастливо уходим дальше по очереди
- если Retry -- запускаем обработку этой операции снова (!)
- если Error -- думаем над ошибкой
- внутри метода обработки ответа можно ввести всяческие проверки, в крайнем случае сделать отдельные (но простые Serial) операции, например, перемещения в координату -- с информацией о проверках, которые должны выполниться, чтобы был Finished
- а весь необходимый набор операций, которые раньше были в состояниях многоступенчатой -- теперь будет создавать парсер!
old description
Summary
Area of the system
How does this currently work?
сейчас наследники cmd::AbstractMultiStageOperation могут выполнять только cmd::AbstractSerialOperation, т.к. предполагалось, что операции с переходными состояниями могут быть связаны только с исполнительтными механизмами (связь с которыми через serial port).
но это ограничивает возможности использования данного класса.
What is the desired way of working?
хотелось бы иметь возможность выполнять любые операции внутри многоступенчатых
Priority/Severity
- High (This will bring a huge increase in performance/productivity/usability, or is a legislative requirement)
- Medium (This will bring a good increase in performance/productivity/usability)
- Low (anything else e.g., trivial, minor improvements)