Advertisement
teplofizik

nyaproto.fdesc

Jun 21st, 2013
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. # Описание протокола NYA Protocol
  2.  
  3. # Перечислим типы команд/ответов и их коды
  4. # enum8 говорит, что это перечисляемое поле занимает один байт в пакете
  5. enum8 T_nya_command
  6. {
  7. # Запрос кота
  8. KISKIS 0x00 # Кис-кис
  9. JRATIDI 0x01 # Жрать иди
  10.  
  11. # Разные пакеты ответов в зависимости от текущего состояния запрашиваемого
  12. NYA 0x10 # Ня, нейтральный ответ
  13. MURMUR 0x11 # Мур-мур, положительный ответ
  14.  
  15. PSHH 0xFF # Error
  16. }
  17.  
  18. # Структура, которая будет получать содержимое поля, содержащего код пакета
  19. # Помним, мы её в MSG_HEADER_TYPE обозвали как T_packet_header_type
  20. # Это описание структуры наложится на данные UDP-пакета и поля примут какие-то осмысленные значения
  21. # Структура чисто внутрення и нужна для разбора пакета
  22. struct T_packet_header_type
  23. {
  24. byte_order little_endian;
  25. uint8 start_code; # Стартовый код, он нам не интересен, хотя можно и проверить
  26. T_nya_command command; # Код команды
  27. uint16 length; # Длина пакета, не включая заголовок
  28.  
  29. # Дальше все паеты разные, так что фиг с ними, всё важное уже вытащили
  30.  
  31. # Здесь можно объявлять всякие разные переменные, которые потом везде использовать
  32. # Например, запомним длину пакета, включая заголовок (1 + 1 + 2 байта)
  33. var uint16 size = length + 4;
  34. }
  35.  
  36. # Теперь опишем все пакеты так, как они будут показаны в wireshark
  37.  
  38. # Заголовок
  39. struct T_nya_header
  40. {
  41. byte_order little_endian;
  42.  
  43. uint8 start_code; # Стартовый код
  44. T_nya_command command;
  45. uint16 length;
  46. }
  47.  
  48. # Сообщение "Кис-кис" с запросом состояния
  49. struct T_nya_KISKIS_request
  50. {
  51. T_nya_header Header;
  52.  
  53. uint8 request_type; # Зачем нам нужен кот: играть, мацать, скормить и т.д.
  54. }
  55.  
  56. # Сообщение "Жрать иди" с указанием типа корма и его количества
  57. struct T_nya_JRATIDI_request
  58. {
  59. T_nya_header Header;
  60.  
  61. uint8 food_type; # что кушать
  62.  
  63. uint8 count; # количество, шт
  64. }
  65.  
  66. # Ответ кота "Мур"
  67. struct T_nya_MURMUR_response
  68. {
  69. T_nya_header Header;
  70.  
  71. uint32 murmurlevel; # Уровень замурчательности кота
  72. }
  73.  
  74. # Ответ кота "мяу"
  75. struct T_nya_NYA_response
  76. {
  77. T_nya_header Header;
  78.  
  79. uint8 action; # чем занят кот
  80. }
  81.  
  82. # Ответ кота "пшшшшш"
  83. struct T_nya_PSHH_response
  84. {
  85. T_nya_header Header;
  86.  
  87. uint8 errno; # что коту не понравилось в ваших действиях
  88. }
  89.  
  90. # Выбиратор типа сообщения
  91. # Передаётся один аргумент типа T_nya_command
  92. # Не забываем ставить пробелы вокруг двоеточий, а то атата
  93. switch T_packet_switch T_nya_command
  94. {
  95. case T_nya_command::KISKIS : T_nya_KISKIS_request "" ;
  96. case T_nya_command::JRATIDI : T_nya_JRATIDI_request "" ;
  97.  
  98. case T_nya_command::NYA : T_nya_NYA_response "" ;
  99. case T_nya_command::MURMUR : T_nya_MURMUR_response "" ;
  100. case T_nya_command::PSHH : T_nya_PSHH_response "" ;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement