Class RemoteClient

java.lang.Object
org.refcodes.component.AbstractConnectableAutomaton
org.refcodes.remoting.RemoteClient
All Implemented Interfaces:
org.refcodes.component.Closable, org.refcodes.component.Closable.CloseAutomaton, org.refcodes.component.ClosedAccessor, org.refcodes.component.Component, org.refcodes.component.ConnectableComponent, org.refcodes.component.ConnectableComponent.ConnectableAutomaton, org.refcodes.component.ConnectionComponent<org.refcodes.io.DatagramTransceiver<Serializable>>, org.refcodes.component.ConnectionComponent.ConnectionAutomaton<org.refcodes.io.DatagramTransceiver<Serializable>>, org.refcodes.component.ConnectionOpenable<org.refcodes.io.DatagramTransceiver<Serializable>>, org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<org.refcodes.io.DatagramTransceiver<Serializable>>, org.refcodes.component.ConnectionStatusAccessor, org.refcodes.component.Destroyable, org.refcodes.component.OpenedAccessor, org.refcodes.mixin.BusyAccessor, org.refcodes.mixin.Clearable, org.refcodes.mixin.EmptyAccessor, Remote, org.refcodes.struct.Containable

public class RemoteClient extends org.refcodes.component.AbstractConnectableAutomaton implements Remote
A RemoteClient promotes subjects to be operated on by a RemoteServer.
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.refcodes.mixin.BusyAccessor

    org.refcodes.mixin.BusyAccessor.BusyMutator, org.refcodes.mixin.BusyAccessor.BusyProperty

    Nested classes/interfaces inherited from interface org.refcodes.component.Closable

    org.refcodes.component.Closable.CloseAutomaton, org.refcodes.component.Closable.CloseBuilder<B extends org.refcodes.component.Closable.CloseBuilder<B>>

    Nested classes/interfaces inherited from interface org.refcodes.component.ClosedAccessor

    org.refcodes.component.ClosedAccessor.ClosedMutator, org.refcodes.component.ClosedAccessor.ClosedProperty

    Nested classes/interfaces inherited from interface org.refcodes.component.ConnectableComponent

    org.refcodes.component.ConnectableComponent.ConnectableAutomaton

    Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionComponent

    org.refcodes.component.ConnectionComponent.ConnectionAutomaton<CON extends Object>, org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON extends Object,B extends org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON,B>>

    Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionOpenable

    org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<CON extends Object>, org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON extends Object,B extends org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON,B>>

    Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionStatusAccessor

    org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusMutator, org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusProperty

    Nested classes/interfaces inherited from interface org.refcodes.component.Destroyable

    org.refcodes.component.Destroyable.DestroyAutomaton

    Nested classes/interfaces inherited from interface org.refcodes.mixin.EmptyAccessor

    org.refcodes.mixin.EmptyAccessor.EmptyMutator, org.refcodes.mixin.EmptyAccessor.EmptyProperty

    Nested classes/interfaces inherited from interface org.refcodes.component.OpenedAccessor

    org.refcodes.component.OpenedAccessor.OpenedMutator, org.refcodes.component.OpenedAccessor.OpenedProperty
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default constructor of the RemoteClient will use a default ExecutorService.
    RemoteClient(ExecutorService aExecutorService)
    Instantiates a new RemoteClient instance with the given ExecutorService to be used.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    void
    protected void
    close(org.refcodes.remoting.CloseConnectionMessage aJob)
    Closes the Remote upon a received CloseConnectionMessage.
    void
    protected void
    The digest(Message) method is invoked in order to trigger processing of the provided Message, e.g. start execution depending on the Message instance being provided from the outside.
    protected void
    For testing purposes, any job can be manually pushed into the job process to the receiver.
    protected void
    Provides an Message from another sender to this receiver.
    protected ExecutorService
    Hook method for retrieving the ExecutorService.
    <T> T
    getProxy(Class<T> aType)
    Returns the proxy which can be cast to the given type.
    boolean
    hasProxy(Class<?> aType)
    Returns true if there is at least one proxy of the given type.
    boolean
    hasProxy(Object aProxy)
    Returns true if the provided proxy is contained inside the RemoteClient.
    boolean
    protected boolean
    Hook to support the Destroyable interface, determines the destroyed status property; set to true when Destroyable.destroy() is called.
    boolean
    boolean
    isOpenable(org.refcodes.io.DatagramTransceiver<Serializable> aConnection)
    protected void
    Hook when the connection has been closed.
    protected void
    Hook when the connection has been opened.
    protected void
    Hook when a proxy has been published.
    protected void
    Hook when a proxy has been signed-off.
    protected void
    Hook when a proxy is about to be published.
    void
    open(org.refcodes.io.DatagramTransceiver<Serializable> aTransceiver)
    Returns a read-only iterator containing all the proxy objects previously being published.
    boolean
    Signs off an instance previously published using the publishClassDescriptor() method.
    int
    protected void
    Forwards an Message from this sender to another receiver.

    Methods inherited from class org.refcodes.component.AbstractConnectableAutomaton

    getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, setConnectionStatus

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.refcodes.component.Closable

    closeIn, closeQuietly, closeUnchecked

    Methods inherited from interface org.refcodes.component.Closable.CloseAutomaton

    isClosable

    Methods inherited from interface org.refcodes.component.ClosedAccessor

    isClosed

    Methods inherited from interface org.refcodes.component.ConnectionOpenable

    open, openUnchecked

    Methods inherited from interface org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton

    isOpenable

    Methods inherited from interface org.refcodes.component.ConnectionStatusAccessor

    getConnectionStatus, isOpened
  • Constructor Details

  • Method Details

    • clear

      public void clear()
      Specified by:
      clear in interface org.refcodes.mixin.Clearable
    • close

      public void close() throws IOException
      Specified by:
      close in interface org.refcodes.component.Closable
      Throws:
      IOException
    • isBusy

      public boolean isBusy()
      Specified by:
      isBusy in interface org.refcodes.mixin.BusyAccessor
    • hasProxy

      public boolean hasProxy(Object aProxy)
      Returns true if the provided proxy is contained inside the RemoteClient.
      Parameters:
      aProxy - The proxy to be tested if it is contained inside the RemoteClient.
      Returns:
      True if the given proxy is contained inside the RemoteClient.
    • getProxy

      public <T> T getProxy(Class<T> aType) throws AmbiguousProxyException, NoSuchProxyException
      Returns the proxy which can be cast to the given type. Note that this method may throw an AmbiguousProxyException even if hasProxy(Class) returns true! The method hasProxy(Class) returns true in case at least one proxy of the given type was found whereas this method only returns a proxy in case there is exactly one proxy of the required type is present.
      Type Parameters:
      T - the generic type
      Parameters:
      aType - the type
      Returns:
      The proxy for an instance of the given type.
      Throws:
      AmbiguousProxyException - Thrown in case a proxy for a given type was requested but more than one proxies matched the requested type.
      NoSuchProxyException - Thrown in case a proxy for a given type was requested but not any proxy matched the requested type.
    • hasProxy

      public boolean hasProxy(Class<?> aType)
      Returns true if there is at least one proxy of the given type.
      Parameters:
      aType - the type
      Returns:
      True in case there is at least one proxy of the given type.
    • proxies

      public Iterator<Object> proxies()
      Returns a read-only iterator containing all the proxy objects previously being published. Use the sign-off methods in order to remove a published proxy object.
      Returns:
      An iterator containing the published proxy objects.
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface org.refcodes.mixin.EmptyAccessor
    • signOffProxy

      public boolean signOffProxy(Object aProxy) throws IOException
      Signs off an instance previously published using the publishClassDescriptor() method.
      Parameters:
      aProxy - An object of type GenericInstanceDescriptor containing the information needed to sign-off an instance.
      Returns:
      True is returned if the instance described by the proxy object could be signed off, else false is returned
      Throws:
      IOException - Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
    • size

      public int size()
      Specified by:
      size in interface org.refcodes.struct.Containable
    • destroy

      public void destroy()
      Specified by:
      destroy in interface org.refcodes.component.Destroyable
    • doSendJob

      protected void doSendJob(Message aJob) throws IOException
      For testing purposes, any job can be manually pushed into the job process to the receiver.
      Parameters:
      aJob - The job to be pushed to the receiver.
      Throws:
      IOException - Thrown in case the operation failed due to an I/O malfunction such as the input- or output-connection (of an input- and output-connection pair) is not available or being disconnected.
    • digest

      protected void digest(Message aJob) throws org.refcodes.component.DigestException
      The digest(Message) method is invoked in order to trigger processing of the provided Message, e.g. start execution depending on the Message instance being provided from the outside. A RemoteClient digests such a Message different than a RemoteServer. This method is inspired by the Digester.digest(Object) method.
      Parameters:
      aJob - The Message to be digested.
      Throws:
      org.refcodes.component.DigestException - Thrown in case digesting (processing) a job by a Digester.digest(Object) caused problems; the cause is usually wrapped by this Exception.
      See Also:
      • Digester
    • close

      protected void close(org.refcodes.remoting.CloseConnectionMessage aJob)
      Closes the Remote upon a received CloseConnectionMessage. Some client TID might be considered in order to determine whether to close all or just one of many connections. This default implementation calls Closable.close() (setting the ConnectionStatus to be ConnectionStatus.CLOSED); advanced implementations just closing dedicated connections may keep the Remote itself open (and skip calling Closable.close() and close only a dedicated connection identified by the Meta-Data of the CloseConnectionMessage.
      Parameters:
      aJob - The CloseConnectionMessage being received for closing the connection.
    • onPublishProxy

      protected void onPublishProxy(Class<?> aType) throws org.refcodes.exception.VetoException
      Hook when a proxy is about to be published.
      Parameters:
      aType - The type to be stored by the property.
      Throws:
      org.refcodes.exception.VetoException - Thrown to signal that an operation is being vetoed by a third party observing the invocation of the given operation.
    • onProxyPublished

      protected void onProxyPublished(Object aProxy)
      Hook when a proxy has been published.
      Parameters:
      aProxy - The proxy to being published.
    • onProxySignedOff

      protected void onProxySignedOff(Object aProxy)
      Hook when a proxy has been signed-off.
      Parameters:
      aProxy - The proxy which has been signed-off.
    • isOpenable

      public boolean isOpenable(org.refcodes.io.DatagramTransceiver<Serializable> aConnection)
      Specified by:
      isOpenable in interface org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<org.refcodes.io.DatagramTransceiver<Serializable>>
    • open

      public void open(org.refcodes.io.DatagramTransceiver<Serializable> aTransceiver) throws IOException
      Specified by:
      open in interface org.refcodes.component.ConnectionOpenable<org.refcodes.io.DatagramTransceiver<Serializable>>
      Throws:
      IOException
    • toReceiver

      protected void toReceiver(Message aJob) throws IOException
      Forwards an Message from this sender to another receiver. A sub-class invokes this method when it sends an Message to the receiver counterpart. The communication path is to be implemented by the sub-class.
      Parameters:
      aJob - the Message to be forwarded to this receiver from the sender counterpart.
      Throws:
      IOException - Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
    • fromSender

      protected void fromSender(Message aJob)
      Provides an Message from another sender to this receiver. A sub-class invokes this method when it receives an Message from a sender counterpart. The communication path is to be implemented by the sub-class.
      Parameters:
      aJob - the Message to be forwarded to this receiver from the sender counterpart.
    • getExecutorService

      protected ExecutorService getExecutorService()
      Hook method for retrieving the ExecutorService.
      Returns:
      The ExecutorService as used by this implementation.
    • isDestroyed

      protected boolean isDestroyed()
      Hook to support the Destroyable interface, determines the destroyed status property; set to true when Destroyable.destroy() is called.
      Returns:
      The destroyed status property.
    • onOpened

      protected void onOpened()
      Hook when the connection has been opened.
    • onClosed

      protected void onClosed()
      Hook when the connection has been closed.