Package xyz.cofe.trambda.tcp
Class Subscribe
- java.lang.Object
-
- xyz.cofe.trambda.tcp.Subscribe
-
- All Implemented Interfaces:
Serializable,Message
public class Subscribe extends Object implements Serializable, Message
Подписка на уведомления сервера
Подписка на уведомления сервера
Tcp сервер содержит методpublisher()для создания "издателя".Издатель создается на сервере, а на клиенте предоставляется Proxy для этого издателя.
События генерируемые сервером рассылается в каждую
сессию сервера
Если клиентподписался на события, тогда сессия сервера передаст в сокет пакет с сообщением(событием)Пример:
Определим сам состав событий
import java.io.Serializable; public class ServerDemoEvent implements Serializable { public String message; public ServerDemoEvent(){ } public ServerDemoEvent(String msg){ this.message = msg; } } public class ServerDemoEvent2 implements Serializable { public String message; public long serverTime = System.currentTimeMillis(); public ServerDemoEvent2(){ } public ServerDemoEvent2(String msg){ this.message = msg; } public ServerDemoEvent2(String msg, long serverTime){ this.message = msg; this.serverTime = serverTime; } }Создаем интерфейс для перелачи событий
public interface Events { Publisher<ServerDemoEvent> defaultPublisher(); Publisher<ServerDemoEvent2> timedEvents(); }Передавать события из сервиса будем так:
// Получаем ссылку на передачу сообщений Publisher<ServerDemoEvent> pub = ... ... // Передаем событие подписчикам pub.publish( new ServerDemoEvent("message#"+i) );На сервере, в момент создания сессии (или другой удобный момент) получаем ссылку на Events:
server = new TcpServer<IEnv>(ssocket, session -gt; new LinuxEnv( // методpublishers(itf)- возвращает прокси // через котторый мы получаем реализацию // Publisher<ServerDemoEvent> // или другой, например // Publisher<ServerDemoEvent2> // // В конструктор LinuxEnv( Events events ) // есть примерно такой код: // LinuxEnv( Events events ){ // ... // pub = events.defaultPublisher(); // } session.getServer().publishers(Events.class) ) );На клиенте
// Создаем клиента var query = TcpQuery.create(IEnv.class) .host("localhost").port(port+1).build(); // Подписываемся на события query.subscribe(Events.class, pubs -> { pubs.defaultPublisher().listen( msg -> { System.out.println("message "+msg.message); }); pubs.timedEvents().listen( msg -> { System.out.println( "t.message "+msg.message+" t="+msg.serverTime); }); });см:- See Also:
- Serialized Form
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description StringgetPublisher()Возвращает имя издателя, смTcpServer.publisher(String),TcpServer.publishers(Class)static AutoCloseablelisten(TrEventPublisher evPublisher, Consumer<Subscribe> listener)Подписка на события CompilevoidsetPublisher(String publisher)Указывает имя издателя, смTcpServer.publisher(String),TcpServer.publishers(Class)
-
-
-
Constructor Detail
-
Subscribe
public Subscribe()
Конструктор
-
Subscribe
public Subscribe(String publisher)
Конструктор- Parameters:
publisher- имя издателя, смTcpServer.publisher(String),TcpServer.publishers(Class)
-
-
Method Detail
-
getPublisher
public String getPublisher()
Возвращает имя издателя, смTcpServer.publisher(String),TcpServer.publishers(Class)- Returns:
- имя издателя
-
setPublisher
public void setPublisher(String publisher)
Указывает имя издателя, смTcpServer.publisher(String),TcpServer.publishers(Class)- Parameters:
publisher- имя издателя
-
listen
public static AutoCloseable listen(TrEventPublisher evPublisher, Consumer<Subscribe> listener)
Подписка на события Compile- Parameters:
evPublisher- издатель событийlistener- подписчик- Returns:
- отписка от событий
-
-