Class WebSocketEventStream

  • All Implemented Interfaces:
    EventStream, java.lang.AutoCloseable

    public class WebSocketEventStream
    extends AbstractEventStream
    Event stream implementation based on a ClientEndpoint WebSocket. It is used to connect the WebSocket to a ServerEndpoint and receive messages from it.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private int defaultBufferSize
      Default message buffer size in characters.
      private int maxMessageLength
      Maximum message length in characters
      private java.lang.StringBuilder messageBuffer
      Buffer for partial messages.
      private javax.websocket.Session session
      The WebSocket Session.
      private javax.websocket.WebSocketContainer websocketContainer
      The WebSocketContainer object for a @ClientEndpoint implementation.
    • Constructor Summary

      Constructors 
      Constructor Description
      WebSocketEventStream​(java.net.URI uri, Token token, long sessionIdleTimeout, long idleTimeout, int maxMsgSize, EventListener... listeners)
      Constructor used to create an event stream: open a websocket connection and start event processing.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Closes this Stream; Events will not be posted to listeners after this call.
      private void close​(javax.websocket.CloseReason closeReason)
      Close the WebSocket Session with a given close reason.
      private void initializeStream​(java.net.URI uri, Token token, long sessionIdleTimeout, long idleTimeout)
      Connect the WebSocket to the server pointing to /ws/{token} to receive events.
      boolean isEventStreamClosed()
      Helper method to check if the stream is able to receive Events.
      void onClose​(javax.websocket.Session session, javax.websocket.CloseReason closeReason)
      On closing the websocket, refresh the session and notify all subscribed listeners.
      void onError​(java.lang.Throwable throwable)
      On error, convert Throwable into CloseReason and close the session.
      void onMessage​(java.lang.String partialMessage, boolean last)
      Notify listeners on each event received on the websocket and buffer partial messages.
      void onOpen​(javax.websocket.Session session, javax.websocket.EndpointConfig config)
      On handshake completed, get the WebSocket Session and send a message to ServerEndpoint that WebSocket is ready.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • defaultBufferSize

        private final int defaultBufferSize
        Default message buffer size in characters.
        See Also:
        Constant Field Values
      • maxMessageLength

        private final int maxMessageLength
        Maximum message length in characters
      • messageBuffer

        private final java.lang.StringBuilder messageBuffer
        Buffer for partial messages.
      • websocketContainer

        private final javax.websocket.WebSocketContainer websocketContainer
        The WebSocketContainer object for a @ClientEndpoint implementation.
      • session

        private javax.websocket.Session session
        The WebSocket Session.
    • Constructor Detail

      • WebSocketEventStream

        public WebSocketEventStream​(java.net.URI uri,
                                    Token token,
                                    long sessionIdleTimeout,
                                    long idleTimeout,
                                    int maxMsgSize,
                                    EventListener... listeners)
                             throws SaltException
        Constructor used to create an event stream: open a websocket connection and start event processing.
        Parameters:
        uri - salt api url
        listeners - event listeners to be added before stream initialization
        idleTimeout - idle timeout to pass to the http client config
        maxMsgSize - maximum event data size to accept
        sessionIdleTimeout - session idle timeout to pass to the http client config
        token - salt session token to use for authentication
        Throws:
        SaltException - in case of an error during stream initialization
    • Method Detail

      • initializeStream

        private void initializeStream​(java.net.URI uri,
                                      Token token,
                                      long sessionIdleTimeout,
                                      long idleTimeout)
                               throws SaltException
        Connect the WebSocket to the server pointing to /ws/{token} to receive events.
        Throws:
        SaltException - in case of an error during stream initialization
      • isEventStreamClosed

        public boolean isEventStreamClosed()
        Helper method to check if the stream is able to receive Events.
        Returns:
        A flag indicating the Stream state.
      • close

        public void close()
                   throws java.io.IOException
        Closes this Stream; Events will not be posted to listeners after this call.
        Throws:
        java.io.IOException - in case of an error when closing the session
      • close

        private void close​(javax.websocket.CloseReason closeReason)
                    throws java.io.IOException
        Close the WebSocket Session with a given close reason.
        Parameters:
        closeReason - the reason for the websocket closure
        Throws:
        java.io.IOException - in case of an error when closing the session
      • onOpen

        public void onOpen​(javax.websocket.Session session,
                           javax.websocket.EndpointConfig config)
                    throws java.io.IOException
        On handshake completed, get the WebSocket Session and send a message to ServerEndpoint that WebSocket is ready. http://docs.saltstack.com/en/latest/ref/netapi/all/salt.netapi.rest_cherrypy.html#ws
        Parameters:
        session - The just started WebSocket Session.
        config - The EndpointConfig containing the handshake informations.
        Throws:
        java.io.IOException - if something goes wrong sending message to the remote peer
      • onMessage

        public void onMessage​(java.lang.String partialMessage,
                              boolean last)
                       throws MessageTooBigException
        Notify listeners on each event received on the websocket and buffer partial messages.
        Parameters:
        partialMessage - partial message received on this websocket
        last - indicate the last part of a message
        Throws:
        MessageTooBigException - in case the message is longer than maxMessageLength
      • onError

        public void onError​(java.lang.Throwable throwable)
                     throws java.io.IOException
        On error, convert Throwable into CloseReason and close the session.
        Parameters:
        throwable - The Throwable object received on the current error.
        Throws:
        java.io.IOException - in case of an error when closing the session
      • onClose

        public void onClose​(javax.websocket.Session session,
                            javax.websocket.CloseReason closeReason)
        On closing the websocket, refresh the session and notify all subscribed listeners. Upon exit from this method, all subscribed listeners will be removed.
        Parameters:
        session - the websocket Session
        closeReason - the CloseReason for the websocket closure