Class TcpHeader


  • public class TcpHeader
    extends Object
    Заголовок TCP пакета.
    Структура заголовка:
    • methodName = Имя метода : String, при том имя должно соответствовать:
      • Соответствовать регулярному выражению (?i)[\w\d\-_.]+
      • Минимальная длина 1
      • Не содержать \n \r \0
    • append = Есть есть payload (полезная нагрузка), тогда
      • ';payload-size='+(10ное число - payloadSize в байтах)
      • ';payload-md5='+(hex значение MD5 хеша полезной нагрузки)
    • extra = Если есть дополнительные HeaderValue то они кодируются: headerValues.map { hv -> ';' + hv.getName() + '=' + hv.getValue() }
    Указанные значения формируются в виде длинной строки: methodName + append + extra + '\n'
    Потом данная строка кодируется в байты, кодировка ISO_8859_1
    Формально можно преставить пакет таким образом
    0 ... HeadSize Заголовок
    Кодированная строка в ISO_8859_1 с одим переводом строки '\n'.
    Содержит:
    Имя метода/класса + пробел Пары ключ/значение разделенные точкой с запятой ';'

    Ключ от значения отделяются знаком равно '='

    Есть обязательные и опциональные значения:

    • payload-size = размер полезной нагрузки
    • payload-md5 = md5 хеш полезной нагрузки
    • sid = идентификатор сообщения
    • referrer = на какое сообщение-запрос ссылается это сообщение-ответ
    HeadSize ... HeadSize + payload-size Полезные данные, обычно это должно быть сериализованное представление Message
    • Field Detail

      • sid

        public static final HeaderValue.IntValue sid
        Заголовок - идентификатор сообщения
      • referrer

        public static final HeaderValue.IntValue referrer
        Заголовок - идентификатор исходного сообщения, ответ на исходное сообщение
    • Constructor Detail

      • TcpHeader

        public TcpHeader​(int hsize,
                         String methName,
                         Map<String,​String> values)
        Конструктор
        Parameters:
        hsize - размер заголовка
        methName - имя метода
        values - карта ключ/значение
    • Method Detail

      • getHeaderSize

        public int getHeaderSize()
        Возвращает размер заголовка
        Returns:
        размер заголовка
      • getMethodName

        public String getMethodName()
        Возвращает название метода
        Returns:
        название метода
      • getValues

        public Map<String,​String> getValues()
        Возвращает карту ключ/значение связанных с данным заголовком
        Returns:
        карта ключ/значение
      • getSid

        public Optional<Integer> getSid()
        Возвращает идентификатор сообщения
        Returns:
        идентификатор сообщения
      • getReferrer

        public Optional<Integer> getReferrer()
        Возвращает идентификатор исходного сообщения, ответ на исходное сообщение
        Returns:
        идентификатор на которое ссылается данное сообщение
      • getPayloadSize

        public int getPayloadSize()
      • getPayloadMd5

        public Optional<byte[]> getPayloadMd5()
      • matched

        public boolean matched​(byte[] buff,
                               int off,
                               int len)
        Сравнение полезной нагрузки с хеш значением указанным в заголовке
        Parameters:
        buff - полезная нагрузка
        off - полезная нагрузка, смещение
        len - полезная нагрузка, размер
        Returns:
        true - есть совпадение, false - нет совпадения
      • encode

        public static byte[] encode​(String method,
                                    byte[] payload)
        Кодировка заголовка
        Parameters:
        method - метод
        payload - полезная нагрузка
        Returns:
        байтовое представление
      • encode

        @SafeVarargs
        public static byte[] encode​(String method,
                                    byte[] payload,
                                    HeaderValue<? extends Object>... values)
        Кодировка заголовка
        Parameters:
        method - метод
        payload - полезная нагрузка
        values - дополнительные опции заголовка
        Returns:
        байтовое представление
      • parse

        public static Optional<TcpHeader> parse​(byte[] buff,
                                                int off,
                                                int len)
        Парсинг заголовка
        Parameters:
        buff - байтовое представление заголовка
        off - смещение
        len - длина
        Returns:
        Распознанный заголовок