Class TcpProtocol

    • Field Detail

      • socket

        protected final Socket socket
        Сокет с которым производится работа
      • getOutput

        protected final Supplier<OutputStream> getOutput
        Канал/поток исходящих сообщений
      • getInput

        protected final Supplier<InputStream> getInput
        Канал/поток входящих сообщений
      • getLogger

        protected final Supplier<xyz.cofe.trambda.log.api.Logger> getLogger
        Логирование
      • sid

        protected final AtomicInteger sid
        Счетчик/генератор идентификаторов сообщений
      • serverEventListeners

        protected final Map<String,​Set<Consumer<ServerEvent>>> serverEventListeners
        Подписчики на серверные события
    • Constructor Detail

      • TcpProtocol

        public TcpProtocol​(Socket socket)
        Конструктор
        Parameters:
        socket - сокет
      • TcpProtocol

        public TcpProtocol​(Socket socket,
                           Consumer<TcpProtocol.SentRawData> sentRawDataConsumer)
        Конструктор
        Parameters:
        socket - сокет
        sentRawDataConsumer - подписчик на отправленные сообщения
      • TcpProtocol

        public TcpProtocol​(Socket socket,
                           xyz.cofe.trambda.log.api.Logger logger)
        Конструктор
        Parameters:
        socket - сокет
        logger - логгер
      • TcpProtocol

        public TcpProtocol​(OutputStream outputStream,
                           InputStream inputStream,
                           xyz.cofe.trambda.log.api.Logger logger)
        Конструктор
        Parameters:
        outputStream - исходящий поток данных
        inputStream - входящий поток данных
        logger - логгер
      • TcpProtocol

        public TcpProtocol​(OutputStream outputStream,
                           InputStream inputStream,
                           xyz.cofe.trambda.log.api.Logger logger,
                           Consumer<TcpProtocol.SentRawData> sentRawDataConsumer)
        Конструктор
        Parameters:
        outputStream - исходящий поток данных
        inputStream - входящий поток данных
        logger - логгер
        sentRawDataConsumer - подписчик на отправленные сообщения
    • Method Detail

      • sendRaw

        @SafeVarargs
        public final int sendRaw​(String method,
                                 byte[] payload,
                                 Consumer<Integer> sendId,
                                 HeaderValue<? extends Object>... headerValues)
                          throws IOException
        Отправка сообщения
        Parameters:
        method - метод
        payload - полезная нагрузка
        sendId - идентификатор сообщения
        headerValues - дополнительные заголовки сообщения
        Returns:
        идентификатор сообщения, см TcpHeader.getSid()
        Throws:
        IOException - ошибка сети
      • send

        @SafeVarargs
        public final int send​(Message message,
                              HeaderValue<? extends Object>... headerValues)
                       throws IOException
        Отправка сообщения
        Parameters:
        message - сообщение
        headerValues - дополнительные заголовки сообщения
        Returns:
        идентификатор сообщения, см TcpHeader.getSid()
        Throws:
        IOException - ошибка сети
      • send

        @SafeVarargs
        public final int send​(Message message,
                              Consumer<Integer> sid,
                              HeaderValue<? extends Object>... headerValues)
                       throws IOException
        Отправка сообщения
        Parameters:
        message - сообщение
        sid - идентификатор сообщения
        headerValues - дополнительные заголовки сообщения
        Returns:
        идентификатор сообщения, см TcpHeader.getSid()
        Throws:
        IOException - ошибка сети
      • getErrorConsumers

        public Map<Integer,​Consumer<ErrMessage>> getErrorConsumers()
        Возвращает обработчики ошибок на конкретные запросы TcpHeader.getSid()
        Returns:
        Карта ключ - идентификатор сообщения TcpHeader.getSid() / обработчик
      • getResponseConsumers

        public Map<Integer,​Consumer<? extends Message>> getResponseConsumers()
        Возвращает обработчики на конкретные запросы TcpHeader.getSid()
        Returns:
        Карта ключ - идентификатор сообщения TcpHeader.getSid() / обработчик
      • process

        protected void process​(Pong pong,
                               TcpHeader header)
        При получении ответа Pong уведомляет подписанотов ping(Consumer), тех кто отправил запрос Ping
        Parameters:
        pong - Ответ
        header - заголовки
      • process

        protected void process​(Ping ping,
                               TcpHeader header)
        При получении Ping сообщения, отсылает ответ Pong
        Parameters:
        ping - Входящий Ping
        header - Заголовки
      • listenServerEvent

        public AutoCloseable listenServerEvent​(String publisher,
                                               Consumer<ServerEvent> listener)
        Добавляет подписчика на событие сервера.
        Используйте возможности клиента TcpClient.subscribe(String, Consumer)
        Parameters:
        publisher - издатель события
        listener - подписчик
        Returns:
        отписка от событий
      • removeServerEventListener

        public void removeServerEventListener​(Consumer<ServerEvent> listener)
        Отписка от событий сервера
        Parameters:
        listener - подписчик
      • process

        protected void process​(ServerEvent sevent,
                               TcpHeader header)
        Обработка входящего серверного события
        Parameters:
        sevent - серверное событие
        header - заголовки
      • ping

        public int ping​(Consumer<Pong> consumer)
        Отправляет Ping запрос
        Parameters:
        consumer - приемник ответа
        Returns:
        Идентификатор TcpHeader.getSid()
      • compile

        public ResultConsumer<Compile,​CompileResult> compile​(xyz.cofe.trambda.LambdaDump methodDef)
        Компиляция лямбды
        Parameters:
        methodDef - лямбда
        Returns:
        Отправка запроса