Я сталкиваюсь с некоторой дилеммой дизайна. Как бы вы решили это?
Я получаю пакет через UDP в виде байта []. Затем я анализирую этот массив в объект пакета. Этот пакет имеет несколько атрибутов (например, имя пользователя, пароль, отметка времени).
Итак, я написал анализатор атрибутов, который анализирует байт [] в объект атрибута. Атрибут имеет разные свойства, такие как AttributeId и Value. Проблема в том, что эти значения свойств могут иметь разные типы (например, имя пользователя и пароль имеют тип строки ascii, отметка времени имеет тип long et c ..)
В какой-то момент эти атрибуты сравниваются с записями в базе данных, для целей проверки подлинности, только на этом этапе важно точно знать, какой это тип.
Я думал о производном от абстрактного класса Attribute, но поскольку типы значений различны, это не сильно поможет.
Как вы обычно обрабатываете ситуацию такого типа?
РЕДАКТИРОВАТЬ: Отправитель сообщения не находится под моим контролем и следует RF C 2865 . Пример того, как может выглядеть сообщение.
- 1-й байт - Код типа сообщения
- Следующий байт - Идентификатор клиента
- Следующие 2 байта - Длина сообщения (количество байтов)
- Следующие 16 байтов - Псевдослучайный токен
- Остальные байты - Атрибуты запроса
Все эти атрибуты следуют этому формату.