Class AbstractEndPoint

java.lang.Object
com.iizix.server.AbstractEndPoint
All Implemented Interfaces:
IServerWebSocketCommListener, ITransactionCreator, ITransactionSender, WebSocketCommListener, IEndPoint, IRootPropTransactionSender
Direct Known Subclasses:
LoadBalancerEndPoint, RemoteBuilderEndPoint, ServerSession, VirtualizedMonitorEndPoint

public abstract class AbstractEndPoint extends Object implements IEndPoint, IServerWebSocketCommListener, IRootPropTransactionSender
An implementation of a common end point for an Editor, Server or Monitor.
Author:
Christopher Mindus
  • Field Details

    • DEBUG

      protected boolean DEBUG
      Debug mode, very verbose output.
    • serverSessionID

      protected final long serverSessionID
      The server session ID.
    • name

      protected final String name
      The name of this end point.
    • worker

      protected final Worker worker
      The worker of the Editor.
    • server

      protected final ServerShell server
      The main server instance.
    • sessionInfo

      protected final SessionInfo sessionInfo
      The SessionInfo.
    • threadGroup

      protected final VirtualThreadGroup threadGroup
      The thread group for the end point.
    • endPointType

      protected final IEndPoint.Type endPointType
      The end-point type.
    • endPointPropertyManager

      protected final PropMgr endPointPropertyManager
      The property endPointPropertyManager.
    • root

      protected PropCnr root
      The root container property of the end point.
    • propTransSender

      protected RootPropTransactionSender propTransSender
      Root property transaction sender.
  • Constructor Details

    • AbstractEndPoint

      public AbstractEndPoint(IEndPoint.Type endPointType, String name, long sessionID, IWebSocketComm comm, ServerShell server, HashMap<String,String> classNameMap, ClassLoader contextClassLoader) throws IOException
      Creates a new EndPoint instance.
      Parameters:
      endPointType - End point type.
      name - Name of end point.
      sessionID - Session ID.
      comm - Communications interface to web sockets.
      server - The server instance.
      classNameMap - The class name map.
      contextClassLoader - The context class loader.
      Throws:
      IOException - For I/O errors.
  • Method Details

    • getEndPoint

      public final IEndPoint getEndPoint()
      Gets the end-point.
      Specified by:
      getEndPoint in interface IServerWebSocketCommListener
      Returns:
      An instance of com.iizix.server.IEndPoint.
    • getServerSessionID

      public final long getServerSessionID()
      Gets the Server Session ID.
      Specified by:
      getServerSessionID in interface IEndPoint
      Returns:
      The session ID.
    • getServer

      public final ServerShell getServer()
      Gets the server.
      Specified by:
      getServer in interface IEndPoint
      Returns:
      The server instance.
    • getWebSocketCommListener

      public IServerWebSocketCommListener getWebSocketCommListener(IWebSocketComm comm)
      Gets the WebSocketCommListener for the end point.
      Specified by:
      getWebSocketCommListener in interface IEndPoint
      Parameters:
      comm - The WebSocket communication instance.
      Returns:
      The WebSocket listener.
    • getEndPointType

      public final IEndPoint.Type getEndPointType()
      Gets the end point type.
      Specified by:
      getEndPointType in interface IEndPoint
      Returns:
      The endpoint type.
    • getEndPointName

      public String getEndPointName()
      Gets the end point name.
      Specified by:
      getEndPointName in interface IEndPoint
      Returns:
      A short descriptive end-point type name.
    • getHeartBeatInterval

      protected long getHeartBeatInterval()
      Gets the heart-beat interval time in milliseconds, called during start-up in the constructor.
      Returns:
      Interval in milliseconds, zero for none (default is DEFAULT_HEARTBEAT_INTERVAL, i.e. 20 seconds).
    • onSendHeartHeat

      protected void onSendHeartHeat()
      Called to perform sending of a heart-beat. Override if required. This method is called at regular intervals as specified by the getHeartBeatInterval() return value.
    • onSessionConnected

      protected void onSessionConnected()
      Called upon connect to enable initialization of e.g. the root property. This method is overridden by subclasses and the base EndPoint implementation does nothing.
    • getPropertyManager

      public final PropMgr getPropertyManager()
      Gets the property manager of the end point. The property manager for an end point is always of SERVER type.
      Returns:
      The singleton PropMgr instance.
    • getProperties

      public final PropCnr getProperties()
      Gets the end point properties, i.e. the root container.
      Returns:
      The root container.
    • getSessionInfo

      public final SessionInfo getSessionInfo()
      Gets the SessionInfo for this end point.
      Specified by:
      getSessionInfo in interface IEndPoint
      Returns:
      The SessionInfo instance.
    • dispose

      public boolean dispose()
      Disposes of the end point.

      The disposal waits for the worker thread to end, 30 seconds at most, unless it is called on that worker thread: the thread cannot end before the task that called this has returned, so it would only wait for itself. The loop of the worker ends with that task, because the worker is disposed of here.

      Specified by:
      dispose in interface IEndPoint
      Returns:
      true if disposed, false if already disposed of.
    • onCommOpen

      public void onCommOpen(IWebSocketComm comm)
      Called when the communication link is opened.
      Specified by:
      onCommOpen in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
    • onCommConnected

      public void onCommConnected(IWebSocketComm comm)
      Called when the communication link is connected. The endpoint starts by sending a CREATE transaction of the endpoint root property container.
      Specified by:
      onCommConnected in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
    • onCommData

      public void onCommData(IWebSocketComm comm, byte[] _data, int offset, int len)
      Called when the communication link has received binary data.
      Specified by:
      onCommData in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
      _data - The data byte array.
      offset - Offset in buffer.
      len - Length of data.
    • onCommData

      public void onCommData(IWebSocketComm comm, String data)
      Called when the communication link has received String data.
      Specified by:
      onCommData in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
      data - The String data.
    • onCommHeartBeat

      public void onCommHeartBeat(IWebSocketComm comm, long duration)
      Called when a heart-beat frame is received.
      Specified by:
      onCommHeartBeat in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
      duration - Duration of the PING-PONG message exchange in milliseconds.
    • onCommTimeout

      public void onCommTimeout(IWebSocketComm comm, boolean isReadTimeout)
      Called when the communication link has timed out on a read or write operation.
      Specified by:
      onCommTimeout in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
      isReadTimeout - Flag indicating read timeout when true, false indicates write timeout.
    • onCommError

      public void onCommError(IWebSocketComm comm, Throwable e)
      Called when the communication link failed: by the socket, for an error of the link, and by this class when it fails the link itself - a frame it cannot decompress, a frame with no transaction in it, a send on a link that is not connected, a send that fails.

      The link is hard-closed and the end point is disposed of. The socket reports onCommClosed after an error it found itself, which disposes the end point too, but nothing after a hard close made by its own listener: without the disposal here an end point that failed its own link lived on with its worker thread and its heart-beat timer.

      Specified by:
      onCommError in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
      e - The exception.
    • onCommClosing

      public void onCommClosing(IWebSocketComm comm)
      Called when the communication link is closing.
      Specified by:
      onCommClosing in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
    • onCommClosed

      public void onCommClosed(IWebSocketComm comm, int code, String reason)
      Called when the communication link is closed.
      Specified by:
      onCommClosed in interface WebSocketCommListener
      Parameters:
      comm - The WebSocket communication instance.
      code - The reason code for closure.
      reason - The reason string explanation for closure.
    • onClientPropsCreated

      protected void onClientPropsCreated(PropCnr root)
      Called when the root is created from a transaction from the client. Override to perform some additional processing such as adding server environment, etc.
    • processQueuedTransaction

      protected abstract boolean processQueuedTransaction(int code, ReadTransaction trans)
      This method must be implemented in all extending classes.
      Parameters:
      code - The transaction code.
      trans - The transaction.
      Returns:
      true if the transaction has been processed, false otherwise.
    • isConnected

      public final boolean isConnected()
      Checks if the communication link is connected.
      Specified by:
      isConnected in interface IRootPropTransactionSender
      Returns:
      true if the connection has been established, false if closed or if in progress of closing.
    • createTransaction

      public final SendTransaction createTransaction()
      Creates a Transaction using a Write Cache. This transaction is then used to write data into it. Be careful only to do it from a single thread as the Write Cache is not thread-safe!
      Specified by:
      createTransaction in interface ITransactionCreator
      Returns:
      The transaction with the WriteCache with parameters specified in the properties.
    • sendTransaction

      public final void sendTransaction(SendTransaction trans)
      Sends a transaction to the end point.
      Specified by:
      sendTransaction in interface IRootPropTransactionSender
      Specified by:
      sendTransaction in interface ITransactionSender
      Parameters:
      trans - The transaction to send.
    • paramString

      protected String paramString()
      Formats the value as a string to add to paramString.
      Returns:
      String format of the parameters.
    • toString

      public String toString()
      Returns a string representation of this component and its values.
      Overrides:
      toString in class Object
      Returns:
      a string representation of this property.
    • getClientContextMenuReference

      public String getClientContextMenuReference(UIContextMenu contextMenu)
      Gets the reference to use for a context menu. Override to process.
      Specified by:
      getClientContextMenuReference in interface IRootPropTransactionSender
      Parameters:
      contextMenu - The context menu.
      Returns:
      The reference to use, empty string for none (never null).