#include "Button.h"
#include "LEDListener.h"
#include "EventDispatcher.h"
Button button(5);
EventDispatcher eventDispatcher;
LEDListener ledListener1("LED Listener 1");
LEDListener ledListener2("LED Listener 2");
LEDListener ledListener3("LED Listener 3");
LEDListener ledListener4("LED Listener 4");
void setup() {
Serial.begin(115200);
Serial.println("# SYSTEM # These listeners are LED Listeners waiting for LEDEvents");
Serial.println((String)"# SYSTEM # " + MAX_QUEUE_LENGTH + " slots available. Let's fill them");
eventDispatcher.add(&ledListener1);
eventDispatcher.add(&ledListener2);
eventDispatcher.add(&ledListener3);
Serial.println("# SYSTEM # Let's mock an LEDEvent to see if they get received");
eventDispatcher.emit(LEDEvent());
Serial.println("# SYSTEM # Queue should be full, let's try to overfill the queue 4 times");
eventDispatcher.add(&ledListener4);
eventDispatcher.add(&ledListener4);
eventDispatcher.add(&ledListener4);
eventDispatcher.add(&ledListener4);
Serial.println("# SYSTEM # Queue should still be full, lets check no slots were overwritten");
eventDispatcher.emit(LEDEvent());
Serial.println("# SYSTEM # Lets remove() 'LED Listener 2'");
eventDispatcher.remove(&ledListener2);
Serial.println("# SYSTEM # Lets do another mock LEDEvent test to see if the empty slot is ignored");
eventDispatcher.emit(LEDEvent());
Serial.println("# SYSTEM # Slot 1 should be our first 'available' slot... Lets see if it gets filled when we add() again" );
eventDispatcher.add(&ledListener4);
Serial.println("# SYSTEM # And another mock LEDEvent test to see if the new listener receives it too");
eventDispatcher.emit(LEDEvent());
Serial.println("# SYSTEM # Lets try to remove a listener who isn't in the list");
eventDispatcher.remove(&ledListener2);
Serial.println("# SYSTEM # Lets correctly empty the queue");
eventDispatcher.remove(&ledListener1);
eventDispatcher.remove(&ledListener4);
eventDispatcher.remove(&ledListener3);
Serial.println("# SYSTEM # and test if there are no listeners to receive the event");
eventDispatcher.emit(LEDEvent());
Serial.println("# SYSTEM # Finally lets try to over-empty the queue");
eventDispatcher.remove(&ledListener1);
Serial.println("# SYSTEM # Test Complete - Moving to loop");
Serial.println();
}
void loop() {
static bool repopulatedListenerQueue = false;
if (!repopulatedListenerQueue) {
eventDispatcher.add(&ledListener1);
eventDispatcher.add(&ledListener2);
eventDispatcher.add(&ledListener3);
Serial.println("# SYSTEM # 3 LED listeners added. Button press will send an LEDEvent event");
repopulatedListenerQueue = true;
}
if (button.read())
eventDispatcher.emit(LEDEvent());
}