Class RemoteEventProducer

All Implemented Interfaces:
Serializable, Remote, EventProducerInterface, RemoteEventProducerInterface

public abstract class RemoteEventProducer
extends RMIObject
implements RemoteEventProducerInterface
The RemoteEventProducer provides a remote implementation of the eventProducer.

Copyright (c) 2002-2020 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See for project information https://djutils.org. The DJUTILS project is distributed under a three-clause BSD-style license, which can be found at https://djutils.org/docs/license.html. This class was originally part of the DSOL project, see https://simulation.tudelft.nl/dsol/manual.

Author:
Peter Jacobs , Alexander Verbraeck
See Also:
Serialized Form
  • Field Details

  • Constructor Details

    • RemoteEventProducer

      public RemoteEventProducer​(String host, int port, String bindingKey) throws RemoteException, AlreadyBoundException
      Create a remote event listener and register the listener in the RMI registry. When the RMI registry does not exist yet, it will be created, but only on the local host. Remote creation of a registry on another computer is not possible. Any attempt to do so will cause an AccessException to be fired.
      Parameters:
      host - String; the host where the RMI registry resides or will be created. Creation is only possible on localhost.
      port - int; the port where the RMI registry can be found or will be created
      bindingKey - the key under which this object will be bound in the RMI registry
      Throws:
      RemoteException - when there is a problem with the RMI registry
      AlreadyBoundException - when there is already another object bound to the bindingKey
      NullPointerException - when host, path, or bindingKey is null
      IllegalArgumentException - when port < 0 or port > 65535
      AccessException - when there is an attempt to create a registry on a remote host
    • RemoteEventProducer

      public RemoteEventProducer​(URL registryURL, String bindingKey) throws RemoteException, AlreadyBoundException
      Create a remote event listener and register the listener in the RMI registry. When the host has not been specified in the URL, 127.0.0.1 will be used. When the port has not been specified in the URL, the default RMI port 1099 will be used. When the RMI registry does not exist yet, it will be created, but only on the local host. Remote creation of a registry on another computer is not possible. Any attempt to do so will cause an AccessException to be fired.
      Parameters:
      registryURL - URL; the URL of the registry, e.g., "http://localhost:1099" or "http://130.161.185.14:28452"
      bindingKey - String; the key under which this object will be bound in the RMI registry
      Throws:
      RemoteException - when there is a problem with the RMI registry
      AlreadyBoundException - when there is already another object bound to the bindingKey
      NullPointerException - when registryURL or bindingKey is null
      AccessException - when there is an attempt to create a registry on a remote host
  • Method Details

    • getSourceId

      public abstract Serializable getSourceId()
      Provide the sourceId that will be transmitted with the fired Event.
      Specified by:
      getSourceId in interface EventProducerInterface
      Returns:
      Serializable; the sourceId that will be transmitted with the fired Event
    • addListener

      public final boolean addListener​(EventListenerInterface listener, EventType eventType) throws RemoteException
      Add a listener as strong reference to the BEGINNING of a queue of listeners.
      Specified by:
      addListener in interface EventProducerInterface
      Parameters:
      listener - EventListenerInterface; the listener which is interested at events of eventType
      eventType - EventType; the events of interest
      Returns:
      the success of adding the listener. If a listener was already added false is returned
      Throws:
      RemoteException - If a network connection failure occurs.
    • addListener

      public final boolean addListener​(EventListenerInterface listener, EventType eventType, ReferenceType referenceType) throws RemoteException
      Add a listener to the BEGINNING of a queue of listeners.
      Specified by:
      addListener in interface EventProducerInterface
      Parameters:
      listener - EventListenerInterface; the listener which is interested at events of eventType
      eventType - EventType; the events of interest
      referenceType - ReferenceType; whether the listener is added as a strong or as a weak reference
      Returns:
      the success of adding the listener. If a listener was already added false is returned
      Throws:
      RemoteException - If a network connection failure occurs.
      See Also:
      WeakReference
    • addListener

      public final boolean addListener​(EventListenerInterface listener, EventType eventType, int position) throws RemoteException
      Add a listener as strong reference to the specified position of a queue of listeners.
      Specified by:
      addListener in interface EventProducerInterface
      Parameters:
      listener - EventListenerInterface; the listener which is interested at events of eventType
      eventType - EventType; the events of interest
      position - int; the position of the listener in the queue
      Returns:
      the success of adding the listener. If a listener was already added, or an illegal position is provided false is returned
      Throws:
      RemoteException - If a network connection failure occurs.
    • addListener

      public final boolean addListener​(EventListenerInterface listener, EventType eventType, int position, ReferenceType referenceType) throws RemoteException
      Add a listener to the specified position of a queue of listeners.
      Specified by:
      addListener in interface EventProducerInterface
      Parameters:
      listener - EventListenerInterface; which is interested at certain events
      eventType - EventType; the events of interest
      position - int; the position of the listener in the queue
      referenceType - ReferenceType; whether the listener is added as a strong or as a weak reference
      Returns:
      the success of adding the listener. If a listener was already added or an illegal position is provided false is returned
      Throws:
      RemoteException - If a network connection failure occurs.
      See Also:
      WeakReference
    • fireEvent

      protected EventInterface fireEvent​(EventInterface event) throws RemoteException
      Transmit an event to all interested listeners.
      Parameters:
      event - EventInterface; the event
      Returns:
      EventInterface; the event (for method chaining)
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected Serializable fireEvent​(EventType eventType, Serializable value) throws RemoteException
      Transmit an event with a serializable object as payload to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      value - Serializable; the object sent with the event
      Returns:
      Serializable; the payload
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected void fireEvent​(EventType eventType) throws RemoteException
      Transmit an event with no payload object to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      Throws:
      RemoteException - on network failure
    • fireTimedEvent

      protected <C extends Comparable<C> & Serializable> Serializable fireTimedEvent​(EventType eventType, Serializable value, C time) throws RemoteException
      Transmit a time-stamped event with a Serializable object (payload) to all interested listeners.
      Type Parameters:
      C - the comparable type to indicate the time when the event is fired
      Parameters:
      eventType - EventType; the eventType of the event.
      value - Serializable; the payload sent with the event
      time - C; a time stamp for the event
      Returns:
      Serializable; the payload
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected byte fireEvent​(EventType eventType, byte value) throws RemoteException
      Transmit an event with a one byte payload to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      value - byte; the payload
      Returns:
      byte; the payload
      Throws:
      RemoteException - on network failure
    • fireTimedEvent

      protected <C extends Comparable<C> & Serializable> byte fireTimedEvent​(EventType eventType, byte value, C time) throws RemoteException
      Transmit a time-stamped event with a one byte payload to all interested listeners.
      Type Parameters:
      C - the comparable type to indicate the time when the event is fired
      Parameters:
      eventType - EventType; the eventType of the event
      value - byte; the payload
      time - C; a time stamp for the event
      Returns:
      byte; the payload
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected boolean fireEvent​(EventType eventType, boolean value) throws RemoteException
      Transmit an event with a boolean payload to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      value - boolean; the payload
      Returns:
      boolean; the payload
      Throws:
      RemoteException - on network failure
    • fireTimedEvent

      protected <C extends Comparable<C> & Serializable> boolean fireTimedEvent​(EventType eventType, boolean value, C time) throws RemoteException
      Transmit a time-stamped event with a boolean payload to all interested listeners.
      Type Parameters:
      C - the comparable type to indicate the time when the event is fired
      Parameters:
      eventType - EventType; the eventType of the event
      value - boolean; the payload
      time - C; a time stamp for the event
      Returns:
      boolean; the payload
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected double fireEvent​(EventType eventType, double value) throws RemoteException
      Transmit an event with a double value payload to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      value - double; the payload
      Returns:
      double; the payload
      Throws:
      RemoteException - on network failure
    • fireTimedEvent

      protected <C extends Comparable<C> & Serializable> double fireTimedEvent​(EventType eventType, double value, C time) throws RemoteException
      Transmit a time-stamped event with a double value payload to interested listeners.
      Type Parameters:
      C - the comparable type to indicate the time when the event is fired
      Parameters:
      eventType - EventType; the eventType of the event
      value - double; the payload
      time - C; a time stamp for the event
      Returns:
      double; the payload
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected int fireEvent​(EventType eventType, int value) throws RemoteException
      Transmit an event with an integer payload to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      value - int; the payload
      Returns:
      int; the payload
      Throws:
      RemoteException - on network failure
    • fireTimedEvent

      protected <C extends Comparable<C> & Serializable> int fireTimedEvent​(EventType eventType, int value, C time) throws RemoteException
      Transmit a time-stamped event with an integer payload to all interested listeners.
      Type Parameters:
      C - the comparable type to indicate the time when the event is fired
      Parameters:
      eventType - EventType; the eventType of the event
      value - int; the payload
      time - C; a time stamp for the event
      Returns:
      int; the payload
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected long fireEvent​(EventType eventType, long value) throws RemoteException
      Transmit an event with a long payload to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      value - long; the payload
      Returns:
      long; the payload
      Throws:
      RemoteException - on network failure
    • fireTimedEvent

      protected <C extends Comparable<C> & Serializable> long fireTimedEvent​(EventType eventType, long value, C time) throws RemoteException
      Transmit a time-stamped event with a long payload to all interested listeners.
      Type Parameters:
      C - the comparable type to indicate the time when the event is fired
      Parameters:
      eventType - EventType; the eventType of the event
      value - long; the payload
      time - C; a time stamp for the event
      Returns:
      long; the payload
      Throws:
      RemoteException - on network failure
    • fireEvent

      protected short fireEvent​(EventType eventType, short value) throws RemoteException
      Transmit an event with a short payload to all interested listeners.
      Parameters:
      eventType - EventType; the eventType of the event
      value - short; the payload
      Returns:
      short; the payload
      Throws:
      RemoteException - on network failure
    • fireTimedEvent

      protected <C extends Comparable<C> & Serializable> short fireTimedEvent​(EventType eventType, short value, C time) throws RemoteException
      Transmit a time-stamped event with a short payload to all interested listeners.
      Type Parameters:
      C - the comparable type to indicate the time when the event is fired
      Parameters:
      eventType - EventType; the eventType of the event
      value - short; the payload
      time - C; a time stamp for the event
      Returns:
      short; the payload
      Throws:
      RemoteException - on network failure
    • removeAllListeners

      protected int removeAllListeners() throws RemoteException
      Remove all the listeners from this event producer.
      Returns:
      int; the number of removed event types
      Throws:
      RemoteException - on network failure
    • removeAllListeners

      protected int removeAllListeners​(Class<?> ofClass) throws RemoteException
      Removes all the listeners of a class from this event producer.
      Parameters:
      ofClass - Class<?>; the class or superclass
      Returns:
      int; the number of removed listeners
      Throws:
      RemoteException - on network failure
    • removeListener

      public final boolean removeListener​(EventListenerInterface listener, EventType eventType) throws RemoteException
      Remove the subscription of a listener for a specific event.
      Specified by:
      removeListener in interface EventProducerInterface
      Parameters:
      listener - EventListenerInterface; which is no longer interested
      eventType - EventType; the event which is of no interest any more
      Returns:
      the success of removing the listener. If a listener was not subscribed false is returned
      Throws:
      RemoteException - If a network connection failure occurs.
    • hasListeners

      public boolean hasListeners() throws RemoteException
      Return whether the EventProducer has listeners.
      Specified by:
      hasListeners in interface EventProducerInterface
      Returns:
      boolean; whether the EventProducer has listeners or not
      Throws:
      RemoteException - If a network connection failure occurs.
    • numberOfListeners

      public int numberOfListeners​(EventType eventType) throws RemoteException
      Return the number of listeners for the provided EventType.
      Specified by:
      numberOfListeners in interface EventProducerInterface
      Parameters:
      eventType - EventType; the event type to return the number of listeners for
      Returns:
      boolean; whether the EventProducer has listeners or not
      Throws:
      RemoteException - If a network connection failure occurs.
    • getEventTypesWithListeners

      public Set<EventType> getEventTypesWithListeners() throws RemoteException
      Return the EventTypes for which the EventProducer has listeners.
      Specified by:
      getEventTypesWithListeners in interface EventProducerInterface
      Returns:
      Set<EventType>; the EventTypes for which the EventProducer has registered listeners
      Throws:
      RemoteException - If a network connection failure occurs.
    • getListenerReferences

      protected List<Reference<EventListenerInterface>> getListenerReferences​(EventType eventType)
      Return a safe copy of the list of (strong or weak) references to the registered listeners for the provided event type, or an empty list when nothing is registered for this event type. The method never returns a null pointer, so it is safe to use the result directly in an iterator. The references to the listeners are the original references, so not safe copies.
      Parameters:
      eventType - EventType; the event type to look up the listeners for
      Returns:
      List<Reference<EventListenerInterface>>; the list of references to the listeners for this event type, or an empty list when the event type is not registered