Class FrameConnection

java.lang.Object
org.simpleframework.http.socket.service.FrameConnection
All Implemented Interfaces:
FrameChannel

class FrameConnection extends Object implements FrameChannel
The FrameConnection represents a connection that can send and receivd WebSocket frames. Any instance of this will provide a means to perform asynchronous writes and reads to a remote client using a lightweight framing protocol. A frame is a finite length sequence of bytes that can hold either text or binary data. Also, control frames are used to perform heartbeat monitoring and closure.

For convenience frames can be consumed from the socket via a callback to a registered listener. This avoids having to poll each socket for data and provides a asynchronous event driven model of communication, which greatly reduces overhead and complication.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final Channel
    This is the underlying TCP channel that frames are sent over.
    private final FrameEncoder
    This encoder is used to encode data as RFC 6455 frames.
    private final FrameCollector
    The collector is used to collect frames from the TCP channel.
    private final Reason
    The reason that is sent if at any time the channel is closed.
    private final Session
    This is the session object that has a synchronized channel.
    private final Trace
    This is used to trace all events that occur on the channel.
    private final ByteWriter
    This is the sender used to send frames over the channel.
  • Constructor Summary

    Constructors
    Constructor
    Description
    FrameConnection(Request request, Response response, Reactor reactor)
    Constructor for the FrameConnection object.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    This is used to close the connection without a specific reason.
    void
    close(Reason reason)
    This is used to close the connection with a specific reason.
    This is used to open the channel and begin consuming frames.
    void
    This is used to register a FrameListener to this instance.
    void
    This is used to remove a FrameListener from this instance.
    void
    send(byte[] data)
    This is used to send data to the connected client.
    void
    send(String text)
    This is used to send text to the connected client.
    void
    send(Frame frame)
    This is used to send data to the connected client.

    Methods inherited from class java.lang.Object

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

    • operation

      private final FrameCollector operation
      The collector is used to collect frames from the TCP channel.
    • encoder

      private final FrameEncoder encoder
      This encoder is used to encode data as RFC 6455 frames.
    • writer

      private final ByteWriter writer
      This is the sender used to send frames over the channel.
    • session

      private final Session session
      This is the session object that has a synchronized channel.
    • channel

      private final Channel channel
      This is the underlying TCP channel that frames are sent over.
    • reason

      private final Reason reason
      The reason that is sent if at any time the channel is closed.
    • trace

      private final Trace trace
      This is used to trace all events that occur on the channel.
  • Constructor Details

    • FrameConnection

      public FrameConnection(Request request, Response response, Reactor reactor)
      Constructor for the FrameConnection object. This is used to create a channel that can read and write frames over a TCP channel. For asynchronous read and dispatch operations this will produce an operation to collect and process RFC 6455 frames.
      Parameters:
      request - this is the initiating request for the WebSocket
      response - this is the initiating response for the WebSocket
      reactor - this is the reactor used to process frames
  • Method Details

    • open

      public Session open() throws IOException
      This is used to open the channel and begin consuming frames. This will also return the session that contains the details for the created WebSocket such as the initiating request and response as well as the FrameChannel object.
      Returns:
      the session associated with the WebSocket
      Throws:
      IOException
    • register

      public void register(FrameListener listener) throws IOException
      This is used to register a FrameListener to this instance. The registered listener will receive all user frames and control frames sent from the client. Also, when the frame is closed or when an unexpected error occurs the listener is notified. Any number of listeners can be registered at any time.
      Specified by:
      register in interface FrameChannel
      Parameters:
      listener - this is the listener that is to be registered
      Throws:
      IOException
    • remove

      public void remove(FrameListener listener) throws IOException
      This is used to remove a FrameListener from this instance. After removal the listener will no longer receive any user frames or control messages from this specific instance.
      Specified by:
      remove in interface FrameChannel
      Parameters:
      listener - this is the listener to be removed
      Throws:
      IOException
    • send

      public void send(byte[] data) throws IOException
      This is used to send data to the connected client. To prevent an application code from causing resource issues this will block as soon as a configured linked list of mapped memory buffers has been exhausted. Caution should be taken when writing a broadcast implementation that can write to multiple sockets as a badly behaving socket that has filled its output buffering capacity can cause congestion.
      Specified by:
      send in interface FrameChannel
      Parameters:
      data - this is the data that is to be sent
      Throws:
      IOException
    • send

      public void send(String text) throws IOException
      This is used to send text to the connected client. To prevent an application code from causing resource issues this will block as soon as a configured linked list of mapped memory buffers has been exhausted. Caution should be taken when writing a broadcast implementation that can write to multiple sockets as a badly behaving socket that has filled its output buffering capacity can cause congestion.
      Specified by:
      send in interface FrameChannel
      Parameters:
      text - this is the text that is to be sent
      Throws:
      IOException
    • send

      public void send(Frame frame) throws IOException
      This is used to send data to the connected client. To prevent an application code from causing resource issues this will block as soon as a configured linked list of mapped memory buffers has been exhausted. Caution should be taken when writing a broadcast implementation that can write to multiple sockets as a badly behaving socket that has filled its output buffering capacity can cause congestion.
      Specified by:
      send in interface FrameChannel
      Parameters:
      frame - this is the frame that is to be sent
      Throws:
      IOException
    • close

      public void close(Reason reason) throws IOException
      This is used to close the connection with a specific reason. The close reason will be sent as a control frame before the TCP connection is terminated.
      Specified by:
      close in interface FrameChannel
      Parameters:
      reason - the reason for closing the connection
      Throws:
      IOException
    • close

      public void close() throws IOException
      This is used to close the connection without a specific reason. The close reason will be sent as a control frame before the TCP connection is terminated.
      Specified by:
      close in interface FrameChannel
      Throws:
      IOException