Спецификация протокола в XML - PullRequest
1 голос
/ 11 июня 2010

Есть ли способ указать пакетный протокол в XML, чтобы (де) сериализация могла происходить автоматически?

Контекст выглядит следующим образом.У меня есть устройство, которое общается через последовательный порт.Он отправляет и получает поток байтов, состоящий из «пакетов».Пакет - это набор элементарных типов данных и (иногда) других пакетов.Некоторые элементы пакетов являются условными;их включение зависит от более ранних элементов.

У меня есть приложение C #, которое связывается с этим устройством.Естественно, я не хочу работать на уровне байтов в моем приложении;Я хочу отделить протокол от кода моего приложения.Поэтому мне нужно преобразовать поток байтов в структуры (классы).

В настоящее время я реализовал протокол в C #, определив класс для каждого пакета.Эти классы определяют порядок и тип элементов для каждого пакета.Сделать членов класса условным делом сложно, поэтому информация о протоколе заканчивается в функциях.

Я представляю XML, который выглядит следующим образом (обратите внимание, что мой опыт разработки XML ограничен):

<packet>
  <field name="Author" type="int32" />
  <field name="Nickname" type="bytes" size="4">
    <condition type="range">
      <field>Author</field>
      <min>3</min>
      <max>6</min>
    </condition>
  </field>
</packet>

.NETесть что-то под названием «двоичный сериализатор», но я не думаю, что это то, что я ищу.

Есть ли способ разделить протокол и код, даже если пакеты «включают» другие пакеты и имеют условныеэлементы?

1 Ответ

0 голосов
/ 12 июня 2010

Возможно, частичный ответ поможет вам понять, где я пытаюсь получить.

Если пока нет «библиотеки протоколов», я мог бы реализовать это сам. Возможно, мне придется использовать (что-то вроде) эти четыре шага:

  1. Разработка XML для хранения правил, из которых могут быть построены пакеты.
  2. Используйте 'Abstract Factory Pattern' , который создает объекты с общей темой.
  3. Разобрать байтовый массив в промежуточные классы, созданные во время выполнения.
  4. Использование отражения для сопоставления этих промежуточных классов с классами, определенными во время разработки.

Это , а не определенный ответ. И, очевидно, я не хочу изобретать велосипед; если есть готовое решение, я его возьму.

...