OMNeT++ API 6.1
Discrete Event Simulation Library
cIListener Class Referenceabstract

Description

Interface for listeners in a simulation model.

Note that the destructor automatically unsubscribes the listener from all signals it is subscribed to, so it is not necessary to do it manually.

See also
cComponent::subscribe(), cComponent::unsubscribe()
Inheritance diagram for cIListener:
[legend]

Public Member Functions

 cIListener ()
 
 cIListener (const cIListener &other)
 
virtual ~cIListener ()
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, bool b, cObject *details)=0
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, intval_t i, cObject *details)=0
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, uintval_t i, cObject *details)=0
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, double d, cObject *details)=0
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, const SimTime &t, cObject *details)=0
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, const char *s, cObject *details)=0
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, cObject *obj, cObject *details)=0
 
virtual void finish (cComponent *component, simsignal_t signalID)
 
virtual void subscribedTo (cComponent *component, simsignal_t signalID)
 
virtual void unsubscribedFrom (cComponent *component, simsignal_t signalID)
 
virtual int getSubscribeCount () const
 

Protected Member Functions

virtual void unsubscribeAll ()
 

Constructor & Destructor Documentation

◆ cIListener() [1/2]

cIListener ( )
inline

Constructor.

◆ cIListener() [2/2]

cIListener ( const cIListener other)
inline

Copy constructor.

◆ ~cIListener()

virtual ~cIListener ( )
virtual

The destructor automatically unsubscribes from all places this listener is subscribed to.

Note that due to the way C++ destructors work, unsubscribedFrom() won't be called in the way one might expect it. See its documentation for details.

Member Function Documentation

◆ unsubscribeAll()

virtual void unsubscribeAll ( )
protectedvirtual

Unsubscribes from all components and signals this listener is subscribed to.

◆ receiveSignal() [1/7]

virtual void receiveSignal ( cComponent source,
simsignal_t  signalID,
bool  b,
cObject details 
)
pure virtual

Receive an emitted signal. Note that cIListener declares several overloaded receiveSignal() methods, one for each data type (except that all integer types are merged to the long and unsigned long types). The "source" argument is the channel or module on which the emit() method was invoked, and NOT the one at which this listener is subscribed.

It is not allowed inside a receiveSignal() call to unsubscribe from the signal being received – it will cause an error to be thrown. (This is to prevent interesting cases when the listener list is being modified while the component iterates on it. The alternative would be to make a temporary copy of the listener list each time, but that is not desirable for performance reasons.)

Implemented in cListener, and cResultListener.

◆ receiveSignal() [2/7]

virtual void receiveSignal ( cComponent source,
simsignal_t  signalID,
intval_t  i,
cObject details 
)
pure virtual

Receive an emitted signed integer value. See receiveSignal(cComponent*,simsignal_t,bool,cObject*) for more info.

Implemented in cResultListener, and cListener.

◆ receiveSignal() [3/7]

virtual void receiveSignal ( cComponent source,
simsignal_t  signalID,
uintval_t  i,
cObject details 
)
pure virtual

Receive an emitted unsigned integer value. See receiveSignal(cComponent*,simsignal_t,bool,cObject*) for more info.

Implemented in cResultListener, and cListener.

◆ receiveSignal() [4/7]

virtual void receiveSignal ( cComponent source,
simsignal_t  signalID,
double  d,
cObject details 
)
pure virtual

Receive an emitted double value. See receiveSignal(cComponent*,simsignal_t,bool,cObject*) for more info.

Implemented in cListener, and cResultListener.

◆ receiveSignal() [5/7]

virtual void receiveSignal ( cComponent source,
simsignal_t  signalID,
const SimTime t,
cObject details 
)
pure virtual

Receive an emitted simtime_t value. See receiveSignal(cComponent*,simsignal_t,bool,cObject*) for more info.

Implemented in cResultListener, and cListener.

◆ receiveSignal() [6/7]

virtual void receiveSignal ( cComponent source,
simsignal_t  signalID,
const char *  s,
cObject details 
)
pure virtual

Receive an emitted string value. See receiveSignal(cComponent*,simsignal_t,bool,cObject*) for more info.

Implemented in cListener, and cResultListener.

◆ receiveSignal() [7/7]

virtual void receiveSignal ( cComponent source,
simsignal_t  signalID,
cObject obj,
cObject details 
)
pure virtual

Receive an emitted cObject value. See receiveSignal(cComponent*,simsignal_t,bool,cObject*) for more info.

Implemented in cListener, and cResultListener.

◆ finish()

virtual void finish ( cComponent component,
simsignal_t  signalID 
)
inlinevirtual

Called by a component on its local listeners after the component's finish() method was called. If the listener is subscribed to multiple signals or at multiple components, the method will be called multiple times. Note that finish() methods in general are not invoked if the simulation terminates with an error.

Reimplemented in cResultListener.

◆ subscribedTo()

virtual void subscribedTo ( cComponent component,
simsignal_t  signalID 
)
inlinevirtual

Called when this object was added to the given component's given signal as a listener. (It won't be called from subscribe() if this listener was already subscribed.)

Reimplemented in cResultListener.

◆ unsubscribedFrom()

virtual void unsubscribedFrom ( cComponent component,
simsignal_t  signalID 
)
inlinevirtual

Called when this object was removed from the given component's listener list for the given signal. (It won't be called from unsubscribe() if this listener was already unsubscribed.)

It is OK for the listener to delete itself in this method (delete this). However, in that case, since this method is called more than once if the listener is subscribed multiple times, one must be careful to prevent double deletion.

Note that due to the way C++ destructors work with regard to inheritance, overrides of this method won't be called if the unsubscription takes place from within the destructor of the super class (usually cIListener). A workaround is to redefine the destructor in your listener class, and already call unsubscribeAll() from there.

Reimplemented in cResultListener.

◆ getSubscribeCount()

virtual int getSubscribeCount ( ) const
inlinevirtual

Returns the number of listener lists that contain this listener.

Reimplemented in cResultListener.

Referenced by cResultListener::getSubscribeCount().


The documentation for this class was generated from the following file: