Skip to content

Instantly share code, notes, and snippets.

@ScreamZ
Last active March 8, 2020 21:45
Show Gist options
  • Save ScreamZ/7694d3924bfae559744343fd4e69026d to your computer and use it in GitHub Desktop.
Save ScreamZ/7694d3924bfae559744343fd4e69026d to your computer and use it in GitHub Desktop.
const events = require("events");
// Vars
let interestedUsers = [];
const goodPlanTopic = new events.EventEmitter();
function startListeningForMessages(topic, listeningUsers) {
// Each time a message is received, we sent a notification to user interest in our topic
function onNewMessage(newMessage) {
listeningUsers.forEach(user =>
console.log("Sent message to [" + user + "] : " + newMessage),
);
}
// Subscribe to topic
topic.on("message", onNewMessage);
// We return function used to cancel listener
return () => topic.off("message", onNewMessage);
}
// Every second we have a new appearing message (pushed in emitter).
setInterval(() => {
goodPlanTopic.emit(
"message",
"Text message N°" +
Math.random()
.toFixed(6)
.substr(2),
);
}, 1000);
// Start programm
startListeningForMessages(goodPlanTopic, interestedUsers); // We are passing our array
console.log("Started, wait 10 seconds before first event…");
// Every ten seconds, we add or remove a new random user to the interested users list
// First scenario by re-assigning value
// setInterval(() => {
// if (Math.random > 0.5) {
// console.log("New user will be removed (but not repercuted)");
// interestedUsers = interestedUsers.splice(
// Math.floor(Math.random() * interestedUsers.length),
// 1,
// );
// } else {
// console.log("New user will be added (but not repercuted)");
// interestedUsers = [].concat(interestedUsers).push(
// "user" +
// Math.random()
// .toFixed(3)
// .substr(2),
// );
// }
// }, 10000);
// Second scenario by mutating
setInterval(() => {
if (Math.random > 0.5) {
console.log("New user will be removed (and repercuted)");
interestedUsers.splice(
Math.floor(Math.random() * interestedUsers.length),
1,
);
} else {
console.log("New user will be added (and repercuted)");
interestedUsers.push(
"user" +
Math.random()
.toFixed(3)
.substr(2),
);
}
}, 10000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment