Пишу приложение, которое управляет некоторым устройством по com-порту. Информационный обмен осуществляется по принципу запрос-ответ, но устройство так же может само отправлять сообщения без команды от приложения (при обнаружении неисправности или изменении состояния).
Необходимо реализовать возможность удаленного управления этим устройством и написать программу-клиента. У первого приложения появляется два режима работы - "ручной", в котором управление устройством осуществляется через интерфейс программы, и "удаленный" - управление по сети с клиентской прогрммы на другой машине. Структурно это выглядит так:
Client <---tcp---> Server <---com---> Device
Варианты решения:
Первый вариант - продублировать все команды из прокотола взаимодействия компа и устройства (Server-Device) в протоколе взаимодействия двух компов (Client-Server). Очевидный минус - слишком много рутины, если протокол большой - нужно продублировать каждую команду, в каждой проверить корректность входных аргументов, отдельно все это оттестировать...
Второй вариант - в протоколе TCP сделать одну команду - "Отправить массив байт в устройство", таким образом Server выступает в роли шлюза - данные никак не анализирует, а всё, что ему пришло в этой команде просто перенаправляет в com-порт, если режим работы "удаленный". А получив ответ от устройства этот массив байт передает по сети клиенту.
Третий вариант - что-то вроде web-сервиса, NetRemoting и тд. Что бы клиентское ПО создало прокси-объект и всё взаимодействие осуществляло через него. С этими технологиями не работал ни разу, поэтому если этот вариант жизнеспособный, подскажите, пожалуйста, в каком направлении двигаться.
Есть ли более удачные решения?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть много кнопок с одинаковым стилем, в которых изменяется только иконка и название и toolTipКак создать универсальный стиль для них?
Пробовал вернуть HBITMAP из unmanaged dll на c++, но его C# не хочет переваривать, описал его как возвращаемый IntPtr, пишет о невозможности преобразования...