Package xyz.cofe.trambda.tcp
Class TcpServer<ENV>
- java.lang.Object
-
- java.lang.Thread
-
- xyz.cofe.trambda.tcp.TcpServer<ENV>
-
- Type Parameters:
ENV- Класс сервиса
- All Implemented Interfaces:
AutoCloseable,Runnable
public class TcpServer<ENV> extends Thread implements AutoCloseable
TCP Сервер для предоставления сервиса
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classTcpServer.SessionClosed<ENV>Событие о завершении сессииstatic classTcpServer.SessionCreated<ENV>Событие о создании сессии-
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
-
-
Field Summary
Fields Modifier and Type Field Description protected Function<TcpSession<ENV>,ENV>envBuilderФункция получения сервиса для новой сессииprotected Map<Integer,Long>fireClosedИнформация когда было уведомление о закрытии сессии: ses.id / System.currentTimeMillis()protected xyz.cofe.ecolls.ListenersHelper<TrListener,TrEvent>listenersprotected Map<String,Publisher<?>>publishersprotected SecurityFilter<String,xyz.cofe.fn.Tuple2<LambdaDump,LambdaNode>>securityFilterФункция фильтрации байт-кодаprotected Set<TcpSession<ENV>>sessionsСессии клиентовprotected ServerSocketsocketСокет через который осуществляется общение-
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description TcpServer(ServerSocket socket, Function<TcpSession<ENV>,ENV> envBuilder)Создание сервераTcpServer(ServerSocket 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)Добавление подписчика.protected voidaddSesListener(TcpSession<ENV> ses)Добавление подписчика sesListener на события сессииvoidclose()Завершение работы сервераprotected voidcloseSessions()Завершение всех сессийprotected voidcloseSocket()Закрытие сокетаprotected TcpSession<ENV>create(Socket sock)Создание сессииprotected <T> TcreateProxyPublisher(Class<T> cls)protected Publisher<?>createPublisher(String name)protected voidfireEvent(TrEvent event)Рассылка уведомления подписчикамSet<TrListener>getListeners()Получение списка подписчиковSet<TcpSession<ENV>>getSessions()Возвращает сессииbooleanhasListener(TrListener listener)Проверка наличия подписчика в списке обработки<T extends Serializable>
Publisher<T>publisher(String name)<T> Tpublishers(Class<T> cls)voidremoveAllListeners()Удаление всех подписчиковvoidremoveListener(TrListener listener)Удаление подписчика из списка обработкиvoidrun()protected voidrunEventQueue()Отправляет события из очереди подписчикамprotected longsessionCloseTimeout()Таймаут согласно которому сессия должна быть завершенаprotected intsessionSoTimeout()Возвращает значение SoTimeoutSocket.setSoTimeout(int)для сессииvoidshutdown()Завершение всех сессий и остановка сервера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
-
socket
protected final ServerSocket socket
Сокет через который осуществляется общение
-
sessions
protected final Set<TcpSession<ENV>> sessions
Сессии клиентов
-
fireClosed
protected final Map<Integer,Long> fireClosed
Информация когда было уведомление о закрытии сессии: ses.id / System.currentTimeMillis()Возможно два сценария закрытия сессии
-
Нормальное закрытие сессии, сессия сама извещает о завершении
sesListener -
Аварийное закрытие сессии, сессия не извещает о завершении
checkTerminatedSessions()
-
Нормальное закрытие сессии, сессия сама извещает о завершении
-
envBuilder
protected final Function<TcpSession<ENV>,ENV> envBuilder
Функция получения сервиса для новой сессии
-
securityFilter
protected final SecurityFilter<String,xyz.cofe.fn.Tuple2<LambdaDump,LambdaNode>> securityFilter
Функция фильтрации байт-кода
-
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:
- Сессии клиентов
-
sessionSoTimeout
protected int sessionSoTimeout()
Возвращает значение SoTimeoutSocket.setSoTimeout(int)для сессии- Returns:
- по умолчанию 3000 мс
-
create
protected TcpSession<ENV> create(Socket sock)
Создание сессии- Parameters:
sock- сокет- Returns:
- сессия
- See Also:
sessionSoTimeout(),addSesListener(TcpSession),TcpServer.SessionCreated
-
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:
closein interfaceAutoCloseable- 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()
Отправляет события из очереди подписчикам
-
publisher
public <T extends Serializable> Publisher<T> publisher(String name)
-
publishers
public <T> T publishers(Class<T> cls)
-
createProxyPublisher
protected <T> T createProxyPublisher(Class<T> cls)
-
-