Class WebSocketEventStream

java.lang.Object
com.suse.salt.netapi.event.AbstractEventStream
com.suse.salt.netapi.event.WebSocketEventStream
All Implemented Interfaces:
EventStream, 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 final int
    Default message buffer size in characters.
    private final int
    Maximum message length in characters
    private final StringBuilder
    Buffer for partial messages.
    private javax.websocket.Session
    The WebSocket Session.
    private final javax.websocket.WebSocketContainer
    The WebSocketContainer object for a @ClientEndpoint implementation.
  • Constructor Summary

    Constructors
    Constructor
    Description
    WebSocketEventStream(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

    Modifier and Type
    Method
    Description
    void
    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(URI uri, Token token, long sessionIdleTimeout, long idleTimeout)
    Connect the WebSocket to the server pointing to /ws/{token} to receive events.
    boolean
    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(Throwable throwable)
    On error, convert Throwable into CloseReason and close the session.
    void
    onMessage(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 Object

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

    • defaultBufferSize

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

      private final int maxMessageLength
      Maximum message length in characters
    • messageBuffer

      private final 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 Details

    • WebSocketEventStream

      public WebSocketEventStream(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
      token - salt session token to use for authentication
      sessionIdleTimeout - session idle timeout to pass to the http client config
      idleTimeout - idle timeout to pass to the http client config
      maxMsgSize - maximum event data size to accept
      listeners - event listeners to be added before stream initialization
      Throws:
      SaltException - in case of an error during stream initialization
  • Method Details

    • initializeStream

      private void initializeStream(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 IOException
      Closes this Stream; Events will not be posted to listeners after this call.
      Throws:
      IOException - in case of an error when closing the session
    • close

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

      public void onOpen(javax.websocket.Session session, javax.websocket.EndpointConfig config) throws 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:
      IOException - if something goes wrong sending message to the remote peer
    • onMessage

      public void onMessage(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(Throwable throwable) throws IOException
      On error, convert Throwable into CloseReason and close the session.
      Parameters:
      throwable - The Throwable object received on the current error.
      Throws:
      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