Adding a listener twice
hmueller01 opened this issue · comments
Holger Müller commented
Is it really wanted that the same listener can be added twice?
EvtManager mgr(true); // true to manage memory
EvtOnceListener readShtListener((EvtAction)[](IEvtListener *lst, IEvtContext *ctx) {
readSht();
return false; // do not stop the current action chain, execute other events
});
Serial.println("listenerCount = " + mgr.listenerCount());
mgr.addListener(&readShtListener);
Serial.println("listenerCount = " + mgr.listenerCount());
mgr.addListener(&readShtListener);
Serial.println("listenerCount = " + mgr.listenerCount());
outputs
listenerCount = 1
listenerCount = 2
listenerCount = 3
Just for information:
#ifndef EvtOnceListener_h
#define EvtOnceListener_h
#include "EvtListener.h"
class EvtOnceListener : public EvtListener {
public:
EvtOnceListener();
EvtOnceListener(EvtAction triggerAction);
~EvtOnceListener();
void reset();
bool isEventTriggered();
bool performTriggerAction(IEvtContext *);
};
EvtOnceListener::EvtOnceListener() {
// Nothing to construct
}
EvtOnceListener::EvtOnceListener(EvtAction triggerAction) {
_triggerAction = triggerAction;
}
EvtOnceListener::~EvtOnceListener() {
// Nothing to destruct
}
void EvtOnceListener::reset() {
// Nothing to setup
}
/**
* @brief Evaluate if action shall be triggered / executed (performTriggerAction())
* @author Holger Mueller
* @date 2024-02-20
*
* @return returns true if the event is triggered.
*/
bool EvtOnceListener::isEventTriggered() {
return _enabled;
}
/**
* @brief Perform the triggered action and disable further triggers
* @author Holger Mueller
* @date 2024-02-21
*
* @param ctx EvtManager context
* @return Return value of the action.
*/
bool EvtOnceListener::performTriggerAction(IEvtContext *ctx) {
Serial.println("EvtOnceListener::performTriggerAction execution started"); // TODO: delme
bool returnVal = (*_triggerAction)(this, ctx);
disable();
Serial.println("EvtOnceListener::performTriggerAction execution ended"); // TODO: delme
return returnVal;
}
#endif