Package xyz.cofe.trambda.tcp
Class TcpSession<ENV>
- java.lang.Object
-
- java.lang.Thread
-
- xyz.cofe.trambda.tcp.TcpSession<ENV>
-
- Type Parameters:
ENV- Класс сервиса предоставляемого клиенту
- All Implemented Interfaces:
Comparable<TcpSession<ENV>>,Runnable,TrEventPublisher
public class TcpSession<ENV> extends Thread implements Comparable<TcpSession<ENV>>, TrEventPublisher
Сессия клиента
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classTcpSession.IncomingMessageEvent<T extends Message,ENV>Входящие сообщениеstatic classTcpSession.MessageEvent<T extends Message,ENV>Сообщениеstatic classTcpSession.OutgoingMessageEvent<T extends Message,ENV>Исходящие сообщениеstatic classTcpSession.SessionFinishedСобытие завершения сессии-
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
-
-
Field Summary
Fields Modifier and Type Field Description protected Map<Integer,Method>compiledprotected AtomicIntegercompileIdprotected xyz.cofe.ecolls.ListenersHelper<TrListener,TrEvent>listenersprotected Map<String,Integer>methodDefHash2compileKeyprotected Consumer<TrEvent>popupEventПередача событий от сессии к подписчикам сервераprotected TcpProtocolprotoОбщие функции для протокола TCP как клиента, так и сервераprotected xyz.cofe.trambda.sec.SecurityFilter<String,xyz.cofe.fn.Tuple2<xyz.cofe.trambda.LambdaDump,xyz.cofe.trambda.LambdaNode>>securityFilterФункция фильтра безопасностиprotected TcpServer<ENV>serverСерверprotected ENVserviceПредоставляемый сервис клиентуintsidИдентификатор сессииprotected SocketsocketСокет сессииprotected Map<String,xyz.cofe.fn.Tuple3<Publisher.Subscriber<Serializable>,Long,AutoCloseable>>subscribers-
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description TcpSession(TcpServer<ENV> server, Socket socket, Function<TcpSession<ENV>,ENV> envBuilder, Consumer<TrEvent> popupEvent)КонструкторTcpSession(TcpServer<ENV> server, Socket socket, Function<TcpSession<ENV>,ENV> envBuilder, xyz.cofe.trambda.sec.SecurityFilter<String,xyz.cofe.fn.Tuple2<xyz.cofe.trambda.LambdaDump,xyz.cofe.trambda.LambdaNode>> securityFilter, Consumer<TrEvent> popupEvent)Конструктор
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddEvent(TrEvent ev)Добавляет событие в очередьAutoCloseableaddListener(TrListener listener)Добавление подписчика.AutoCloseableaddListener(TrListener listener, boolean weakLink)Добавление подписчика.voidclose()intcompareTo(TcpSession o)protected Methodcompile(xyz.cofe.trambda.LambdaDump dump, String hash)booleanequals(Object o)protected voidfireEvent(TrEvent event)Рассылка уведомления подписчикамOptional<Boolean>getKeepAlive()Проверяет, включен ли SO_KEEPALIVE.Set<TrListener>getListeners()Получение списка подписчиковSocketAddressgetLocalAddress()Возвращает локальный адрес сессииOptional<Boolean>getOOBInline()Проверяет, включен ли SO_OOBINLINE.SocketAddressgetRemoteAddress()Возвращает адрес клиентаOptional<Boolean>getReuseAddress()Проверяет, включен ли SO_REUSEADDR.TcpServer<ENV>getServer()Возвращает серверENVgetService()Возвращает предоставляемый сервис клиентуOptional<Boolean>getTcpNoDelay()Проверяет, включен ли TCP_NODELAY.inthashCode()booleanhasListener(TrListener listener)Проверка наличия подписчика в списке обработкиbooleanisBound()Возвращает состояние привязки сокета.booleanisClosed()Возвращает закрытое состояние сокета.booleanisInputShutdown()Возвращает, закрыта ли половина соединения сокета для чтения.booleanisOutputShutdown()Возвращает, закрыта ли половина записи сокета соединения.protected voidprocess(Compile compile, TcpHeader header)protected voidprocess(Execute exec, TcpHeader header)protected voidprocess(Message msg, TcpHeader header)protected voidprocess(Ping ping, TcpHeader header)protected voidprocess(Subscribe msg, TcpHeader header)Обработка запроса подписки на события сервера, смSubscribeprotected voidprocess(UnSubscribe msg, TcpHeader header)Отписка от событий сервераprotected voidreceived(RawPackReadonly pack)voidremoveAllListeners()Удаление всех подписчиковvoidremoveListener(TrListener listener)Удаление подписчика из списка обработкиvoidrun()protected voidrunEventQueue()Отправляет события из очереди подписчикамprotected Publisher.Subscriber<Serializable>subscriber(String name)Создание proxy подписчикаprotected voidunsubscribeAll()Удаление всех подписчиков на события сервераprotected voidwithQueue(Runnable run)Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кодаprotected <T> TwithQueue(Supplier<T> run)Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода-
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
-
-
-
-
Field Detail
-
sid
public final int sid
Идентификатор сессии
-
socket
protected final Socket socket
Сокет сессии
-
proto
protected final TcpProtocol proto
Общие функции для протокола TCP как клиента, так и сервера
-
securityFilter
protected final xyz.cofe.trambda.sec.SecurityFilter<String,xyz.cofe.fn.Tuple2<xyz.cofe.trambda.LambdaDump,xyz.cofe.trambda.LambdaNode>> securityFilter
Функция фильтра безопасности
-
popupEvent
protected final Consumer<TrEvent> popupEvent
Передача событий от сессии к подписчикам сервера
-
service
protected final ENV service
Предоставляемый сервис клиенту
-
listeners
protected final xyz.cofe.ecolls.ListenersHelper<TrListener,TrEvent> listeners
-
compileId
protected final AtomicInteger compileId
-
subscribers
protected final Map<String,xyz.cofe.fn.Tuple3<Publisher.Subscriber<Serializable>,Long,AutoCloseable>> subscribers
-
-
Constructor Detail
-
TcpSession
public TcpSession(TcpServer<ENV> server, Socket socket, Function<TcpSession<ENV>,ENV> envBuilder, Consumer<TrEvent> popupEvent)
Конструктор- Parameters:
socket- сокетenvBuilder- функция получения сервисаpopupEvent- функция передачи события сессии в сервер
-
TcpSession
public TcpSession(TcpServer<ENV> server, Socket socket, Function<TcpSession<ENV>,ENV> envBuilder, xyz.cofe.trambda.sec.SecurityFilter<String,xyz.cofe.fn.Tuple2<xyz.cofe.trambda.LambdaDump,xyz.cofe.trambda.LambdaNode>> securityFilter, Consumer<TrEvent> popupEvent)
Конструктор- Parameters:
socket- сокетenvBuilder- функция получения сервисаsecurityFilter- функция фильтра безопасности
-
-
Method Detail
-
getService
public ENV getService()
Возвращает предоставляемый сервис клиенту- Returns:
- Предоставляемый сервис клиенту
-
hasListener
public boolean hasListener(TrListener listener)
Проверка наличия подписчика в списке обработки- Specified by:
hasListenerin interfaceTrEventPublisher- Parameters:
listener- подписчик- Returns:
- true - есть в списке обработки
-
getListeners
public Set<TrListener> getListeners()
Получение списка подписчиков- Specified by:
getListenersin interfaceTrEventPublisher- Returns:
- подписчики
-
addListener
public AutoCloseable addListener(TrListener listener)
Добавление подписчика.- Specified by:
addListenerin interfaceTrEventPublisher- Parameters:
listener- Подписчик.- Returns:
- Интерфес для отсоединения подписчика
-
addListener
public AutoCloseable addListener(TrListener listener, boolean weakLink)
Добавление подписчика.- Specified by:
addListenerin interfaceTrEventPublisher- Parameters:
listener- Подписчик.weakLink- true - добавить как weak ссылку / false - как hard ссылку- Returns:
- Интерфес для отсоединения подписчика
-
removeListener
public void removeListener(TrListener listener)
Удаление подписчика из списка обработки- Parameters:
listener- подписчик
-
removeAllListeners
public void removeAllListeners()
Удаление всех подписчиков- Specified by:
removeAllListenersin interfaceTrEventPublisher
-
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.
-
compareTo
public int compareTo(TcpSession o)
- Specified by:
compareToin interfaceComparable<ENV>
-
close
public void close()
-
received
protected void received(RawPackReadonly pack)
-
unsubscribeAll
protected void unsubscribeAll()
Удаление всех подписчиков на события сервера
-
process
protected void process(Subscribe msg, TcpHeader header)
Обработка запроса подписки на события сервера, смSubscribe- Parameters:
msg- запрос подпискиheader- заголовок запроса
-
process
protected void process(UnSubscribe msg, TcpHeader header)
Отписка от событий сервера- Parameters:
msg- запросheader- заголовок запроса
-
subscriber
protected Publisher.Subscriber<Serializable> subscriber(String name)
Создание proxy подписчика- Parameters:
name- имя издателя- Returns:
- proxy подписчика
-
-