Exemple #1
0
    d.on('added', function(obj) {
        var adv = obj.advertisement;

        if (adv.type == 'monitor' && (adv.key ? adv.key == advertisement.key : true)) {
            var statusPublisher = new axon.PubEmitterSocket();
            statusPublisher.connect(adv.port, Subscriber.useHostNames ? obj.hostName : obj.address);

            setInterval(function() {
                var nodes = [];

                for (var id in that.discovery.nodes) {
                    var node = that.discovery.nodes[id];

                    if (node.sock)
                        nodes.push(id);
                }

                statusPublisher.emit('status', {
                    id: d.me.id,
                    nodes: nodes
                });
            }, statusInterval);
        }

        if (obj.advertisement.key != advertisement.key) return;

        that.emit('added', obj);

        if (adv.axon_type != 'pub-emitter') return;

        obj.sock = new axon.SubEmitterSocket();
        obj.sock.connect(adv.port, Subscriber.useHostNames ? obj.hostName : obj.address);
        obj.sock.sock.set('retry timeout', 0);

        obj.sock.sock.on('socket close', function() {
            that.emit('removed', obj);
        });

        advertisement.subscribesTo = advertisement.subscribesTo || ['*'];

        advertisement.subscribesTo.forEach(function(topic) {
            var namespace = '';
            if (advertisement.namespace) namespace = advertisement.namespace + '::';

            topic = 'message::' + namespace + topic;

            (function(topic) {
                obj.sock.on(topic, function() {
                    var args = Array.prototype.slice.call(arguments);

                    if (args.length == 1)
                        args.unshift(topic.substr(9));
                    else
                        args[0] = namespace + args[0];

                    that.emit.apply(that, args);
                });
            })(topic);
        });
    });
Exemple #2
0
    d.on('added', function(obj) {
        var adv = obj.advertisement;

        if (adv.type == 'monitor' && (adv.key ? adv.key == advertisement.key : true)) {
            var statusPublisher = new axon.PubEmitterSocket();
            statusPublisher.connect(adv.port, obj.address);

            setInterval(function() {
                var nodes = [];

                for (var id in that.discovery.nodes) {
                    var node = that.discovery.nodes[id];

                    if (node.sock)
                        nodes.push(id);
                }

                statusPublisher.emit('status', {
                    id: d.me.id,
                    nodes: nodes
                });
            }, statusInterval);
        }

        if (obj.advertisement.key != advertisement.key) return;

        that.emit('added', obj);

        if (adv.axon_type != 'req') return;
        if (advertisement.namespace != adv.namespace) return;

        obj.sock = new axon.RepSocket();
        obj.sock.connect(adv.port, obj.address);
        obj.sock.set('retry timeout', 0);

        obj.sock.on('socket close', function() {
            that.emit('removed', obj);
        });

        obj.sock.on('message', function(req, cb) {
            if (!req.type) return;

            that.emit(req.type, req, cb);
        });
    });