Class TcpServer<ENV>

  • Type Parameters:
    ENV - Класс сервиса
    All Implemented Interfaces:
    AutoCloseable, Runnable

    public class TcpServer<ENV>
    extends Thread
    implements AutoCloseable
    TCP Сервер для предоставления сервиса
    • Field Detail

      • socket

        protected final ServerSocket socket
        Сокет через который осуществляется общение
      • sessions

        protected final Set<TcpSession<ENV>> sessions
        Сессии клиентов
      • fireClosed

        protected final Map<Integer,​Long> fireClosed
        Информация когда было уведомление о закрытии сессии: ses.id / System.currentTimeMillis()

        Возможно два сценария закрытия сессии

        1. Нормальное закрытие сессии, сессия сама извещает о завершении sesListener
        2. Аварийное закрытие сессии, сессия не извещает о завершении checkTerminatedSessions()
      • envBuilder

        protected final Function<TcpSession<ENV>,​ENV> envBuilder
        Функция получения сервиса для новой сессии
      • listeners

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

      • TcpServer

        public TcpServer​(ServerSocket socket,
                         Function<TcpSession<ENV>,​ENV> envBuilder,
                         SecurityFilter<String,​xyz.cofe.fn.Tuple2<LambdaDump,​LambdaNode>> securityFilter)
        Создание сервера
        Parameters:
        socket - сокет
        envBuilder - Функция получения сервиса для новой сессии
        securityFilter - Функция фильтрации байт-кода
      • TcpServer

        public TcpServer​(ServerSocket socket,
                         Function<TcpSession<ENV>,​ENV> envBuilder)
        Создание сервера
        Parameters:
        socket - сокет
        envBuilder - Функция получения сервиса для новой сессии
    • Method Detail

      • getSessions

        public Set<TcpSession<ENV>> getSessions()
        Возвращает сессии
        Returns:
        Сессии клиентов
      • run

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

        protected int sessionSoTimeout()
        Возвращает значение SoTimeout Socket.setSoTimeout(int) для сессии
        Returns:
        по умолчанию 3000 мс
      • shutdown

        public void shutdown()
        Завершение всех сессий и остановка сервера
        See Also:
        closeSocket(), closeSessions()
      • closeSocket

        protected void closeSocket()
        Закрытие сокета
      • sessionCloseTimeout

        protected long sessionCloseTimeout()
        Таймаут согласно которому сессия должна быть завершена
        Returns:
        5000 мс
      • closeSessions

        protected void closeSessions()
        Завершение всех сессий
        See Also:
        sessionCloseTimeout()
      • addSesListener

        protected void addSesListener​(TcpSession<ENV> ses)
        Добавление подписчика sesListener на события сессии
        Parameters:
        ses - сессия
      • close

        public void close()
                   throws Exception
        Завершение работы сервера
        Specified by:
        close in interface AutoCloseable
        Throws:
        Exception - Ошибки...
      • 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()
        Отправляет события из очереди подписчикам
      • createPublisher

        protected Publisher<?> createPublisher​(String name)
      • publishers

        public <T> T publishers​(Class<T> cls)
      • createProxyPublisher

        protected <T> T createProxyPublisher​(Class<T> cls)