Last active
March 8, 2020 21:45
-
-
Save ScreamZ/7694d3924bfae559744343fd4e69026d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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