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) {
               ...