Class 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