Class TcpSession<ENV>

  • Type Parameters:
    ENV - Класс сервиса предоставляемого клиенту
    All Implemented Interfaces:
    Comparable<TcpSession<ENV>>, Runnable

    public class TcpSession<ENV>
    extends Thread
    implements Comparable<TcpSession<ENV>>
    Сессия клиента
    • Field Detail

      • sid

        public final int sid
        Идентификатор сессии
      • socket

        protected final Socket socket
        Сокет сессии
      • proto

        protected final TcpProtocol proto
        Общие функции для протокола TCP как клиента, так и сервера
      • server

        protected final TcpServer<ENV> server
        Сервер
      • service

        protected final ENV service
        Предоставляемый сервис клиенту
      • listeners

        protected final xyz.cofe.ecolls.ListenersHelper<TrListener,​TrEvent> listeners
      • methodDefHash2compileKey

        protected final Map<String,​Integer> methodDefHash2compileKey
    • Constructor Detail

      • TcpSession

        public TcpSession​(TcpServer<ENV> server,
                          Socket socket,
                          Function<TcpSession<ENV>,​ENV> envBuilder)
        Конструктор
        Parameters:
        socket - сокет
        envBuilder - функция получения сервиса
    • Method Detail

      • getServer

        public TcpServer<ENV> getServer()
        Возвращает сервер
        Returns:
        сервер
      • getService

        public ENV getService()
        Возвращает предоставляемый сервис клиенту
        Returns:
        Предоставляемый сервис клиенту
      • hasListener

        public boolean hasListener​(TrListener listener)
        Проверка наличия подписчика в списке обработки
        Parameters:
        listener - подписчик
        Returns:
        true - есть в списке обработки
      • getListeners

        public Set<TrListener> getListeners()
        Получение списка подписчиков
        Returns:
        подписчики
      • addListener

        public AutoCloseable addListener​(TrListener listener)
        Добавление подписчика.
        Parameters:
        listener - Подписчик.
        Returns:
        Интерфес для отсоединения подписчика
      • addListener

        public AutoCloseable addListener​(TrListener listener,
                                         boolean weakLink)
        Добавление подписчика.
        Parameters:
        listener - Подписчик.
        weakLink - true - добавить как weak ссылку / false - как hard ссылку
        Returns:
        Интерфес для отсоединения подписчика
      • removeListener

        public void removeListener​(TrListener listener)
        Удаление подписчика из списка обработки
        Parameters:
        listener - подписчик
      • removeAllListeners

        public void removeAllListeners()
        Удаление всех подписчиков
      • withQueue

        protected void withQueue​(Runnable run)
        Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода
        Parameters:
        run - блок кода
      • withQueue

        protected <T> T withQueue​(Supplier<T> run)
        Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода
        Parameters:
        run - блок кода
        Returns:
        возвращаемое значение
      • fireEvent

        protected void fireEvent​(TrEvent event)
        Рассылка уведомления подписчикам
        Parameters:
        event - уведомление
      • addEvent

        protected void addEvent​(TrEvent ev)
        Добавляет событие в очередь
        Parameters:
        ev - событие
      • runEventQueue

        protected void runEventQueue()
        Отправляет события из очереди подписчикам
      • getLocalAddress

        public SocketAddress getLocalAddress()
        Возвращает локальный адрес сессии
        Returns:
        локальный адрес сессии
      • getRemoteAddress

        public SocketAddress getRemoteAddress()
        Возвращает адрес клиента
        Returns:
        адрес клиента
      • isBound

        public boolean isBound()
        Возвращает состояние привязки сокета. Примечание. Закрытие сокета не очищает его состояние привязки, что означает, что этот метод вернет истину для закрытого сокета (см. IsClosed ()), если он был успешно привязан до закрытия.
        Returns:
        состояние привязки сокета
      • isClosed

        public boolean isClosed()
        Возвращает закрытое состояние сокета.
        Returns:
        сокет закрыт ?
      • isInputShutdown

        public boolean isInputShutdown()
        Возвращает, закрыта ли половина соединения сокета для чтения.
        Returns:
        чтение закрыто
      • isOutputShutdown

        public boolean isOutputShutdown()
        Возвращает, закрыта ли половина записи сокета соединения.
        Returns:
        закрыта запись
      • getKeepAlive

        public Optional<Boolean> getKeepAlive()
        Проверяет, включен ли SO_KEEPALIVE. Если для TCP-сокета задана опция keepalive и в течение 2 часов через сокет не производился обмен данными в любом направлении (ПРИМЕЧАНИЕ: фактическое значение зависит от реализации), TCP автоматически отправляет одноранговому узлу зонд keepalive. Этот зонд представляет собой сегмент TCP, на который одноранговый узел должен ответить. Ожидается один из трех ответов: 1. Узел отвечает ожидаемым ACK. Приложение не уведомляется (так как все в порядке). TCP отправит еще один зонд после еще 2 часов бездействия. 2. Одноранговый узел отвечает RST, который сообщает локальному TCP, что узел однорангового узла вышел из строя и перезагрузился. Розетка закрыта. 3. Нет ответа от однорангового узла. Розетка закрыта. Эта опция предназначена для обнаружения сбоя однорангового хоста. Действительно только для сокета TCP: SocketImpl*
        Returns:
        включен ли SO_KEEPALIVE.
      • getTcpNoDelay

        public Optional<Boolean> getTcpNoDelay()
        Проверяет, включен ли TCP_NODELAY. Отключите алгоритм Нэгла для этого соединения. Записанные в сеть данные не буферизуются до подтверждения ранее записанных данных.
        Returns:
        включен ли TCP_NODELAY.
      • getReuseAddress

        public Optional<Boolean> getReuseAddress()
        Проверяет, включен ли SO_REUSEADDR. Устанавливает SO_REUSEADDR для сокета. Это используется только для MulticastSockets в java и установлено по умолчанию для MulticastSockets.
        Returns:
        включен ли SO_REUSEADDR.
      • getOOBInline

        public Optional<Boolean> getOOBInline()
        Проверяет, включен ли SO_OOBINLINE. Если установлен параметр OOBINLINE, любые срочные данные TCP, полученные через сокет, будут приниматься через входной поток сокета. Когда опция отключена (что по умолчанию), срочные данные автоматически отбрасываются.
        Returns:
        включен ли SO_OOBINLINE.
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • close

        public void close()
      • run

        public void run()
        Specified by:
        run in interface Runnable
        Overrides:
        run in class Thread
      • process

        protected void process​(Ping ping,
                               TcpHeader header)
      • unsubscribeAll

        protected void unsubscribeAll()