В случае если реплики недоступны нужно где-то хранить команды мастера в правильной последовательности, тогда при появлении реплики можно было их применить в правильном порядке. Для этого необходимо написать реализацию класса, у класса два метода:
GetByVersion - достает std::shared_ptr<Common::IStreamCommand> command нужной версии если это возможно или возвращает enum class EError : std::uint8_t { TooOld, TooNew }, в зависимости от ситуации.
TooOld - означает что запрошенная версия уже утеряна (например при подрезании буффера, ведь если его не уменьшать он будет бесконечно расти и поглотит всю память).
TooNew - в очереди еще не появилась команда с необходимой версией.
Version - внутрений для класса концепт, каждой команде задается уникальное число начиная с 1. Версия команды не должна повторяться в пределах работы программы.
На внутренюю реализацию никаких ограничений не накладывается.
В случае если реплики недоступны нужно где-то хранить команды мастера в правильной последовательности, тогда при появлении реплики можно было их применить в правильном порядке. Для этого необходимо написать реализацию класса, у класса два метода:
Push
- сохраняетstd::shared_ptr<Common::IStreamCommand> command
GetByVersion
- достаетstd::shared_ptr<Common::IStreamCommand> command
нужной версии если это возможно или возвращаетenum class EError : std::uint8_t { TooOld, TooNew }
, в зависимости от ситуации.TooOld
- означает что запрошенная версия уже утеряна (например при подрезании буффера, ведь если его не уменьшать он будет бесконечно расти и поглотит всю память).TooNew
- в очереди еще не появилась команда с необходимой версией.Version
- внутрений для класса концепт, каждой команде задается уникальное число начиная с 1. Версия команды не должна повторяться в пределах работы программы.На внутренюю реализацию никаких ограничений не накладывается.