Package org.djutils.event.remote
Class RemoteEventProducer
java.lang.Object
java.rmi.server.RemoteObject
java.rmi.server.RemoteServer
java.rmi.server.UnicastRemoteObject
org.djutils.rmi.RMIObject
org.djutils.event.remote.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 Summary
Fields Modifier and Type Field Description protected EventProducerImpl
eventProducerImpl
The EventProducer helper class with the actual implementation to avoid code duplication.Fields inherited from interface org.djutils.event.EventProducerInterface
FIRST_POSITION, LAST_POSITION
-
Constructor Summary
Constructors Constructor Description RemoteEventProducer(String host, int port, String bindingKey)
Create a remote event listener and register the listener in the RMI registry.RemoteEventProducer(URL registryURL, String bindingKey)
Create a remote event listener and register the listener in the RMI registry. -
Method Summary
Modifier and Type Method Description boolean
addListener(EventListenerInterface listener, EventType eventType)
Add a listener as strong reference to the BEGINNING of a queue of listeners.boolean
addListener(EventListenerInterface listener, EventType eventType, int position)
Add a listener as strong reference to the specified position of a queue of listeners.boolean
addListener(EventListenerInterface listener, EventType eventType, int position, ReferenceType referenceType)
Add a listener to the specified position of a queue of listeners.boolean
addListener(EventListenerInterface listener, EventType eventType, ReferenceType referenceType)
Add a listener to the BEGINNING of a queue of listeners.protected EventInterface
fireEvent(EventInterface event)
Transmit an event to all interested listeners.protected void
fireEvent(EventType eventType)
Transmit an event with no payload object to all interested listeners.protected boolean
fireEvent(EventType eventType, boolean value)
Transmit an event with a boolean payload to all interested listeners.protected byte
fireEvent(EventType eventType, byte value)
Transmit an event with a one byte payload to all interested listeners.protected double
fireEvent(EventType eventType, double value)
Transmit an event with a double value payload to all interested listeners.protected int
fireEvent(EventType eventType, int value)
Transmit an event with an integer payload to all interested listeners.protected long
fireEvent(EventType eventType, long value)
Transmit an event with a long payload to all interested listeners.protected short
fireEvent(EventType eventType, short value)
Transmit an event with a short payload to all interested listeners.protected Serializable
fireEvent(EventType eventType, Serializable value)
Transmit an event with a serializable object as payload to all interested listeners.protected <C extends Comparable<C> & Serializable>
booleanfireTimedEvent(EventType eventType, boolean value, C time)
Transmit a time-stamped event with a boolean payload to all interested listeners.protected <C extends Comparable<C> & Serializable>
bytefireTimedEvent(EventType eventType, byte value, C time)
Transmit a time-stamped event with a one byte payload to all interested listeners.protected <C extends Comparable<C> & Serializable>
doublefireTimedEvent(EventType eventType, double value, C time)
Transmit a time-stamped event with a double value payload to interested listeners.protected <C extends Comparable<C> & Serializable>
intfireTimedEvent(EventType eventType, int value, C time)
Transmit a time-stamped event with an integer payload to all interested listeners.protected <C extends Comparable<C> & Serializable>
longfireTimedEvent(EventType eventType, long value, C time)
Transmit a time-stamped event with a long payload to all interested listeners.protected <C extends Comparable<C> & Serializable>
shortfireTimedEvent(EventType eventType, short value, C time)
Transmit a time-stamped event with a short payload to all interested listeners.protected <C extends Comparable<C> & Serializable>
SerializablefireTimedEvent(EventType eventType, Serializable value, C time)
Transmit a time-stamped event with a Serializable object (payload) to all interested listeners.Set<EventType>
getEventTypesWithListeners()
Return the EventTypes for which the EventProducer has listeners.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.abstract Serializable
getSourceId()
Provide the sourceId that will be transmitted with the fired Event.boolean
hasListeners()
Return whether the EventProducer has listeners.int
numberOfListeners(EventType eventType)
Return the number of listeners for the provided EventType.protected int
removeAllListeners()
Remove all the listeners from this event producer.protected int
removeAllListeners(Class<?> ofClass)
Removes all the listeners of a class from this event producer.boolean
removeListener(EventListenerInterface listener, EventType eventType)
Remove the subscription of a listener for a specific event.Methods inherited from class java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, exportObject, exportObject, unexportObject
-
Field Details
-
eventProducerImpl
The EventProducer helper class with the actual implementation to avoid code duplication.
-
-
Constructor Details
-
RemoteEventProducer
public RemoteEventProducer(String host, int port, String bindingKey) throws RemoteException, AlreadyBoundExceptionCreate 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 createdbindingKey
- the key under which this object will be bound in the RMI registry- Throws:
RemoteException
- when there is a problem with the RMI registryAlreadyBoundException
- when there is already another object bound to the bindingKeyNullPointerException
- when host, path, or bindingKey is nullIllegalArgumentException
- when port < 0 or port > 65535AccessException
- when there is an attempt to create a registry on a remote host
-
RemoteEventProducer
public RemoteEventProducer(URL registryURL, String bindingKey) throws RemoteException, AlreadyBoundExceptionCreate 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 registryAlreadyBoundException
- when there is already another object bound to the bindingKeyNullPointerException
- when registryURL or bindingKey is nullAccessException
- when there is an attempt to create a registry on a remote host
-
-
Method Details
-
getSourceId
Provide the sourceId that will be transmitted with the fired Event.- Specified by:
getSourceId
in interfaceEventProducerInterface
- Returns:
- Serializable; the sourceId that will be transmitted with the fired Event
-
addListener
public final boolean addListener(EventListenerInterface listener, EventType eventType) throws RemoteExceptionAdd a listener as strong reference to the BEGINNING of a queue of listeners.- Specified by:
addListener
in interfaceEventProducerInterface
- Parameters:
listener
- EventListenerInterface; the listener which is interested at events of eventTypeeventType
- 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 RemoteExceptionAdd a listener to the BEGINNING of a queue of listeners.- Specified by:
addListener
in interfaceEventProducerInterface
- Parameters:
listener
- EventListenerInterface; the listener which is interested at events of eventTypeeventType
- EventType; the events of interestreferenceType
- 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 RemoteExceptionAdd a listener as strong reference to the specified position of a queue of listeners.- Specified by:
addListener
in interfaceEventProducerInterface
- Parameters:
listener
- EventListenerInterface; the listener which is interested at events of eventTypeeventType
- EventType; the events of interestposition
- 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 RemoteExceptionAdd a listener to the specified position of a queue of listeners.- Specified by:
addListener
in interfaceEventProducerInterface
- Parameters:
listener
- EventListenerInterface; which is interested at certain eventseventType
- EventType; the events of interestposition
- int; the position of the listener in the queuereferenceType
- 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
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
Transmit an event with a serializable object as payload to all interested listeners.- Parameters:
eventType
- EventType; the eventType of the eventvalue
- Serializable; the object sent with the event- Returns:
- Serializable; the payload
- Throws:
RemoteException
- on network failure
-
fireEvent
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 RemoteExceptionTransmit 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 eventtime
- C; a time stamp for the event- Returns:
- Serializable; the payload
- Throws:
RemoteException
- on network failure
-
fireEvent
Transmit an event with a one byte payload to all interested listeners.- Parameters:
eventType
- EventType; the eventType of the eventvalue
- 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 RemoteExceptionTransmit 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 eventvalue
- byte; the payloadtime
- C; a time stamp for the event- Returns:
- byte; the payload
- Throws:
RemoteException
- on network failure
-
fireEvent
Transmit an event with a boolean payload to all interested listeners.- Parameters:
eventType
- EventType; the eventType of the eventvalue
- 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 RemoteExceptionTransmit 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 eventvalue
- boolean; the payloadtime
- C; a time stamp for the event- Returns:
- boolean; the payload
- Throws:
RemoteException
- on network failure
-
fireEvent
Transmit an event with a double value payload to all interested listeners.- Parameters:
eventType
- EventType; the eventType of the eventvalue
- 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 RemoteExceptionTransmit 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 eventvalue
- double; the payloadtime
- C; a time stamp for the event- Returns:
- double; the payload
- Throws:
RemoteException
- on network failure
-
fireEvent
Transmit an event with an integer payload to all interested listeners.- Parameters:
eventType
- EventType; the eventType of the eventvalue
- 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 RemoteExceptionTransmit 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 eventvalue
- int; the payloadtime
- C; a time stamp for the event- Returns:
- int; the payload
- Throws:
RemoteException
- on network failure
-
fireEvent
Transmit an event with a long payload to all interested listeners.- Parameters:
eventType
- EventType; the eventType of the eventvalue
- 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 RemoteExceptionTransmit 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 eventvalue
- long; the payloadtime
- C; a time stamp for the event- Returns:
- long; the payload
- Throws:
RemoteException
- on network failure
-
fireEvent
Transmit an event with a short payload to all interested listeners.- Parameters:
eventType
- EventType; the eventType of the eventvalue
- 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 RemoteExceptionTransmit 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 eventvalue
- short; the payloadtime
- C; a time stamp for the event- Returns:
- short; the payload
- Throws:
RemoteException
- on network failure
-
removeAllListeners
Remove all the listeners from this event producer.- Returns:
- int; the number of removed event types
- Throws:
RemoteException
- on network failure
-
removeAllListeners
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 RemoteExceptionRemove the subscription of a listener for a specific event.- Specified by:
removeListener
in interfaceEventProducerInterface
- Parameters:
listener
- EventListenerInterface; which is no longer interestedeventType
- 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
Return whether the EventProducer has listeners.- Specified by:
hasListeners
in interfaceEventProducerInterface
- Returns:
- boolean; whether the EventProducer has listeners or not
- Throws:
RemoteException
- If a network connection failure occurs.
-
numberOfListeners
Return the number of listeners for the provided EventType.- Specified by:
numberOfListeners
in interfaceEventProducerInterface
- 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
Return the EventTypes for which the EventProducer has listeners.- Specified by:
getEventTypesWithListeners
in interfaceEventProducerInterface
- Returns:
- Set<EventType>; the EventTypes for which the EventProducer has registered listeners
- Throws:
RemoteException
- If a network connection failure occurs.
-
getListenerReferences
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
-