Simple Event Listening
by demiryavuz1973
JavaScript
class Emitter {
constructor() {
this.event1 = this.empty;
this.event2 = this.empty;
}
empty(){}
someEmmitterLogic(input) {
// arbitrary logic here before event1 occurs
this.event1({message:"produced at event1", b:1});
// maybe event2 can also occur here
this.event2({message:"produced at event2", d:2});
}
addEvent(event, listener) {
switch (event) {
case "event1":
this.event1 = listener;
break;
case "event2":
this.event2 = listener;
break;
default:
console.log("Sorry, we don't emit this event.");
}
}
removeEvent(event) {
switch (event) {
case "event1":
this.event1 = this.empty;
break;
case "event2":
this.event2 = this.empty;
break;
default:
console.log("Sorry, cannot remove an event we are not emitting.");
}
}
}
class Listener{
constructor(){
// Simple listeners outputting the event object to the console
this.listener1 = (e) => console.log(e.message);
this.listener2 = (e) => console.log(e.message);
}
}
///////////////////////////////////////////////////////////////////////////
const emitter = new Emitter();
const listener = new Listener();
console.log("STATUS: not listening emitter");
emitter.someEmmitterLogic();
// Add listeners
emitter.addEvent("event1", listener.listener1);
emitter.addEvent("event2", listener.listener2);
console.log("STATUS: started listening emitter");
emitter.someEmmitterLogic();
console.log("say we don't need event1 anymore, let's remove it");
emitter.removeEvent("event1");
console.log("STATUS: listening event2 only");
emitter.someEmmitterLogic();