Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Описание протокола NYA Protocol
- # Перечислим типы команд/ответов и их коды
- # enum8 говорит, что это перечисляемое поле занимает один байт в пакете
- enum8 T_nya_command
- {
- # Запрос кота
- KISKIS 0x00 # Кис-кис
- JRATIDI 0x01 # Жрать иди
- # Разные пакеты ответов в зависимости от текущего состояния запрашиваемого
- NYA 0x10 # Ня, нейтральный ответ
- MURMUR 0x11 # Мур-мур, положительный ответ
- PSHH 0xFF # Error
- }
- # Структура, которая будет получать содержимое поля, содержащего код пакета
- # Помним, мы её в MSG_HEADER_TYPE обозвали как T_packet_header_type
- # Это описание структуры наложится на данные UDP-пакета и поля примут какие-то осмысленные значения
- # Структура чисто внутрення и нужна для разбора пакета
- struct T_packet_header_type
- {
- byte_order little_endian;
- uint8 start_code; # Стартовый код, он нам не интересен, хотя можно и проверить
- T_nya_command command; # Код команды
- uint16 length; # Длина пакета, не включая заголовок
- # Дальше все паеты разные, так что фиг с ними, всё важное уже вытащили
- # Здесь можно объявлять всякие разные переменные, которые потом везде использовать
- # Например, запомним длину пакета, включая заголовок (1 + 1 + 2 байта)
- var uint16 size = length + 4;
- }
- # Теперь опишем все пакеты так, как они будут показаны в wireshark
- # Заголовок
- struct T_nya_header
- {
- byte_order little_endian;
- uint8 start_code; # Стартовый код
- T_nya_command command;
- uint16 length;
- }
- # Сообщение "Кис-кис" с запросом состояния
- struct T_nya_KISKIS_request
- {
- T_nya_header Header;
- uint8 request_type; # Зачем нам нужен кот: играть, мацать, скормить и т.д.
- }
- # Сообщение "Жрать иди" с указанием типа корма и его количества
- struct T_nya_JRATIDI_request
- {
- T_nya_header Header;
- uint8 food_type; # что кушать
- uint8 count; # количество, шт
- }
- # Ответ кота "Мур"
- struct T_nya_MURMUR_response
- {
- T_nya_header Header;
- uint32 murmurlevel; # Уровень замурчательности кота
- }
- # Ответ кота "мяу"
- struct T_nya_NYA_response
- {
- T_nya_header Header;
- uint8 action; # чем занят кот
- }
- # Ответ кота "пшшшшш"
- struct T_nya_PSHH_response
- {
- T_nya_header Header;
- uint8 errno; # что коту не понравилось в ваших действиях
- }
- # Выбиратор типа сообщения
- # Передаётся один аргумент типа T_nya_command
- # Не забываем ставить пробелы вокруг двоеточий, а то атата
- switch T_packet_switch T_nya_command
- {
- case T_nya_command::KISKIS : T_nya_KISKIS_request "" ;
- case T_nya_command::JRATIDI : T_nya_JRATIDI_request "" ;
- case T_nya_command::NYA : T_nya_NYA_response "" ;
- case T_nya_command::MURMUR : T_nya_MURMUR_response "" ;
- case T_nya_command::PSHH : T_nya_PSHH_response "" ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement