Вопрос по архитектуре приложения

177
21 февраля 2019, 18:20

Пишу приложение, которое управляет некоторым устройством по com-порту. Информационный обмен осуществляется по принципу запрос-ответ, но устройство так же может само отправлять сообщения без команды от приложения (при обнаружении неисправности или изменении состояния).

Необходимо реализовать возможность удаленного управления этим устройством и написать программу-клиента. У первого приложения появляется два режима работы - "ручной", в котором управление устройством осуществляется через интерфейс программы, и "удаленный" - управление по сети с клиентской прогрммы на другой машине. Структурно это выглядит так:

Client <---tcp---> Server <---com---> Device

Варианты решения:

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

Второй вариант - в протоколе TCP сделать одну команду - "Отправить массив байт в устройство", таким образом Server выступает в роли шлюза - данные никак не анализирует, а всё, что ему пришло в этой команде просто перенаправляет в com-порт, если режим работы "удаленный". А получив ответ от устройства этот массив байт передает по сети клиенту.

Третий вариант - что-то вроде web-сервиса, NetRemoting и тд. Что бы клиентское ПО создало прокси-объект и всё взаимодействие осуществляло через него. С этими технологиями не работал ни разу, поэтому если этот вариант жизнеспособный, подскажите, пожалуйста, в каком направлении двигаться.

Есть ли более удачные решения?

READ ALSO
Юнит-тесты и Tuple

Юнит-тесты и Tuple

После того как прогоняю этот тест:

155
WPF: Создание универсального стиля для кнопки

WPF: Создание универсального стиля для кнопки

Есть много кнопок с одинаковым стилем, в которых изменяется только иконка и название и toolTipКак создать универсальный стиль для них?

245
Вернуть BITMAP из unmanaget dll

Вернуть BITMAP из unmanaget dll

Пробовал вернуть HBITMAP из unmanaged dll на c++, но его C# не хочет переваривать, описал его как возвращаемый IntPtr, пишет о невозможности преобразования...

154
Почему выводит не все флаги

Почему выводит не все флаги

Есть готовые enum-ы

186