Я пишу клиентскую программу для управления сервером, который, в свою очередь, управляет большим оборудованием. Сервер должен получать команды для инициализации, запуска, остановки и управления оборудованием.
Соединение клиента с сервером осуществляется через сокет TCP или UDP. Каждая команда инкапсулируется в соответствующее сообщение с использованием протокола SCADA (например, Modbus или DNP3).
Часть фазы инициализации включает в себя отправку последовательности команд от клиента к серверу. В некоторых случаях между командами должна быть задержка в секундах, чтобы предотвратить одновременную инициализацию нескольких подсистем. Значение задержки зависит от типа команды.
Я думаю, что шаблон проектирования команд является хорошим подходом для подражания. Клиент создает экземпляр ConcreteCommands, а Invoker помещает его в очередь. Я не уверен, как включить переменную задержку и есть ли лучший шаблон, включающий таймер и очередь для обработки отправки сообщений с переменной задержкой.
Я использую С#, но это, вероятно, не имеет значения, поскольку это скорее вопрос шаблона проектирования.