sp-streams
Version:
Streamplace Streams for Piping Video Around and Stuff
83 lines (66 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
port = _ref.port;
var clients = [];
var server = _net2.default.createServer(function (c) {
clients.push(c);
// 'connection' listener
log("client connected");
c.on("error", function () {
log("client errored");
clients = clients.filter(function (client) {
return client !== c;
});
});
c.on("end", function () {
log("client disconnected");
clients = clients.filter(function (client) {
return client !== c;
});
});
});
server.on("error", function (err) {
throw err;
});
var portProm = new Promise(function (resolve, reject) {
var listen = void 0;
if (port) {
listen = server.listen.bind(server, port);
} else {
listen = server.listen.bind(server);
}
listen(function () {
var port = server.address().port;
log("tcp server listening on port " + port);
resolve(port);
});
});
var passThrough = new _stream2.default.PassThrough();
passThrough.server = server;
passThrough.getPort = function () {
return portProm;
};
passThrough.on("data", function (chunk) {
clients.forEach(function (c) {
return c.write(chunk);
});
});
passThrough.on("end", function () {
server.close();
});
return passThrough;
};
var _net = require("net");
var _net2 = _interopRequireDefault(_net);
var _stream = require("stream");
var _stream2 = _interopRequireDefault(_stream);
var _path = require("path");
var _debug = require("debug");
var _debug2 = _interopRequireDefault(_debug);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// this stream should "auto-resume". don't send it data if you want backpressure
var log = (0, _debug2.default)("sp:tcp-egress-stream");