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
public class TcpSession<ENV> extends Thread implements Comparable<TcpSession<ENV>>
Сессия клиента
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description 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 TcpProtocolprotoОбщие функции для протокола TCP как клиента, так и сервераprotected SecurityFilter<String,xyz.cofe.fn.Tuple2<LambdaDump,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)КонструкторTcpSession(TcpServer<ENV> server, Socket socket, Function<TcpSession<ENV>,ENV> envBuilder, SecurityFilter<String,xyz.cofe.fn.Tuple2<LambdaDump,LambdaNode>> securityFilter)Конструктор
-
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(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)protected voidprocess(UnSubscribe msg, TcpHeader header)protected voidreceived(RawPackReadonly pack)voidremoveAllListeners()Удаление всех подписчиковvoidremoveListener(TrListener listener)Удаление подписчика из списка обработкиvoidrun()protected voidrunEventQueue()Отправляет события из очереди подписчикамprotected Publisher.Subscriber<Serializable>subscriber(String name)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 SecurityFilter<String,xyz.cofe.fn.Tuple2<LambdaDump,LambdaNode>> securityFilter
Функция фильтра безопасности
-
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)
Конструктор- Parameters:
socket- сокетenvBuilder- функция получения сервиса
-
TcpSession
public TcpSession(TcpServer<ENV> server, Socket socket, Function<TcpSession<ENV>,ENV> envBuilder, SecurityFilter<String,xyz.cofe.fn.Tuple2<LambdaDump,LambdaNode>> securityFilter)
Конструктор- Parameters:
socket- сокетenvBuilder- функция получения сервисаsecurityFilter- функция фильтра безопасности
-
-
Method Detail
-
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.
-
compareTo
public int compareTo(TcpSession o)
- Specified by:
compareToin interfaceComparable<ENV>
-
close
public void close()
-
received
protected void received(RawPackReadonly pack)
-
compile
protected Method compile(LambdaDump dump, String hash)
-
unsubscribeAll
protected void unsubscribeAll()
-
process
protected void process(UnSubscribe msg, TcpHeader header)
-
subscriber
protected Publisher.Subscriber<Serializable> subscriber(String name)
-
-