UNPKG

zum

Version:

Zum is a simple event bus for NodeJS microservices using amp.

34 lines (27 loc) 1.01 kB
'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; module.exports = () => { const queue = []; const socks = new Set(); let n = 0; const queueing = false; const send = (buf, force) => { const sock = [...socks][n++ % socks.size]; if (sock && sock.writable && !queueing || force && queueing) { sock.write(buf); } else { queue.push(['send', buf]); } }; const broadcast = (buf, force) => { if (socks.size && !queueing || force && queueing) { for (const s of socks) s && s.writable && s.write(buf); } else { queue.push(['broadcast', buf]); } }; const runners = { send, broadcast }; const add = sock => socks.add(sock); const remove = sock => socks.delete(sock); return _extends({}, runners, { add, remove }); };