Шаблон проектирования команд клиент-сервер с переменными задержками

Я пишу клиентскую программу для управления сервером, который, в свою очередь, управляет большим оборудованием. Сервер должен получать команды для инициализации, запуска, остановки и управления оборудованием.

Соединение клиента с сервером осуществляется через сокет TCP или UDP. Каждая команда инкапсулируется в соответствующее сообщение с использованием протокола SCADA (например, Modbus или DNP3).

Часть фазы инициализации включает в себя отправку последовательности команд от клиента к серверу. В некоторых случаях между командами должна быть задержка в секундах, чтобы предотвратить одновременную инициализацию нескольких подсистем. Значение задержки зависит от типа команды.

Я думаю, что шаблон проектирования команд является хорошим подходом для подражания. Клиент создает экземпляр ConcreteCommands, а Invoker помещает его в очередь. Я не уверен, как включить переменную задержку и есть ли лучший шаблон, включающий таймер и очередь для обработки отправки сообщений с переменной задержкой.

Я использую С#, но это, вероятно, не имеет значения, поскольку это скорее вопрос шаблона проектирования.


person sdbol    schedule 18.08.2012    source источник


Ответы (1)


Похоже, вам нужно сохранить сопоставление типов для задержки. Когда ваш сервер запускается, можете ли вы кэшировать эти задержки? Затем вызвать метод, который обрабатывает команду после указанной задержки?

При запуске сервера:

Dictionary<Type, int> typeToDelayMapping = GetTypeToDelayMapping();

Когда команда достигает сервера, сервер может вызвать это:

InvokeCommand(ICommand command, int delayTimeInMilliseconds)

Вот так:

InvokeCommand(command, typeToDelayMapping[type]);
person Bob Horn    schedule 18.08.2012
comment
Вероятно, это просто небольшая модификация шаблона проектирования Command, чтобы добавить в хранилище последовательность команд и необходимую задержку. Спасибо. - person sdbol; 19.08.2012