JSFiddle - React, Tailwind, and code Playground
by Denys Biliaiev
JavaScript
var redis = require("redis");
var client = redis.createClient();
(process.argv[2] == 'getErrors') ? getErrorMessages() : init();
function getErrorMessages() {
client.smembers('error_messages', function(err, messages) {
if (err) closeClient(err);
console.log('error_messages: ' + messages);
client.del('error_messages', function(err) {
if (err) closeClient(err);
});
client.end(false);
});
}
function init() {
client.incr("PID", function (err, pid) {
if (err) closeClient(err);
client.setnx('generator', pid, function(err, res) {
res ? initGenerator(pid) : subscribe(pid);
});
});
}
function initGenerator(pid) {
console.log("init generator: " + pid);
var generator = setInterval(function () {
client.pexpire('generator', 600);
var message = getMessage();
console.log("publihed message: " + message);
publish(message);
}, 500);
// if (message >= 1000000) {
// clearInterval(generator);
// //process.exit();
// }
//}, 0);
}
function subscribe(pid) {
var listen = setInterval(function () {
client.setnx('generator', pid, function(err, res) {
if (err) closeClient(err);
if (!res) {
client.sadd('listeners', pid, function (err) {
if (err) closeClient(err);
console.log("add listener: " + pid);
});
} else {
client.srem('listeners', pid, function (err) {
if (err) closeClient(err);
});
clearInterval(listen);
initGenerator(pid);
}
})
}, 0);
}
function publish(message) {
client.smembers('listeners', function (err, listeners) {
if (err) closeClient(err);
if (listeners.length) {
listeners.forEach(function (listener) {
...