socket-ipc
Version:
Message-based communications over UNIX sockets
81 lines (64 loc) • 7.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _events = require("events");
var _verror = require("verror");
var _MessageCodec = _interopRequireDefault(require("./MessageCodec"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class MessageConnection extends _events.EventEmitter {
constructor(socket, options) {
super();
_defineProperty(this, "socket", void 0);
_defineProperty(this, "messageCodec", void 0);
_defineProperty(this, "onSocketData", data => {
try {
this.messageCodec.decode(data, message => {
const event = {
data: message
};
this.emit('message', event);
});
} catch (err) {
this.onError(new _verror.VError(err, 'error while decoding message from socket'));
}
});
_defineProperty(this, "close", () => {
if (this.socket) {
this.socket.destroy();
this.socket = undefined;
this.emit('close');
}
});
this.socket = socket;
this.messageCodec = new _MessageCodec.default({
binary: options.binary
});
socket.on('data', this.onSocketData);
socket.on('close', this.close);
socket.on('error', err => this.onError(new _verror.VError(err, 'MessageConnection got error from socket')));
}
send(message) {
const {
socket
} = this;
if (!socket) throw Error('unexpected missing socketWrite');
socket.write(this.messageCodec.encode(message), err => {
if (err) this.onError(new _verror.VError(err, 'socket error during send'));
});
}
/**
* Included for compatibility with the WebSocket API
*/
destroy() {
this.close();
}
onError(err) {
this.emit('error', err);
this.close();
}
}
exports.default = MessageConnection;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9NZXNzYWdlQ29ubmVjdGlvbi50cyJdLCJuYW1lcyI6WyJNZXNzYWdlQ29ubmVjdGlvbiIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwic29ja2V0Iiwib3B0aW9ucyIsImRhdGEiLCJtZXNzYWdlQ29kZWMiLCJkZWNvZGUiLCJtZXNzYWdlIiwiZXZlbnQiLCJlbWl0IiwiZXJyIiwib25FcnJvciIsIlZFcnJvciIsImRlc3Ryb3kiLCJ1bmRlZmluZWQiLCJNZXNzYWdlQ29kZWMiLCJiaW5hcnkiLCJvbiIsIm9uU29ja2V0RGF0YSIsImNsb3NlIiwic2VuZCIsIkVycm9yIiwid3JpdGUiLCJlbmNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFFQTs7Ozs7O0FBa0JlLE1BQU1BLGlCQUFOLFNBQWlDQyxvQkFBakMsQ0FFWjtBQUlEQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBcUJDLE9BQXJCLEVBQXdEO0FBQ2pFOztBQURpRTs7QUFBQTs7QUFBQSwwQ0F1QjNDQyxJQUFELElBQXdCO0FBQzdDLFVBQUk7QUFDRixhQUFLQyxZQUFMLENBQWtCQyxNQUFsQixDQUF5QkYsSUFBekIsRUFBZ0NHLE9BQUQsSUFBOEI7QUFDM0QsZ0JBQU1DLEtBQW1CLEdBQUc7QUFBRUosWUFBQUEsSUFBSSxFQUFFRztBQUFSLFdBQTVCO0FBQ0EsZUFBS0UsSUFBTCxDQUFVLFNBQVYsRUFBcUJELEtBQXJCO0FBQ0QsU0FIRDtBQUlELE9BTEQsQ0FLRSxPQUFPRSxHQUFQLEVBQVk7QUFDWixhQUFLQyxPQUFMLENBQWEsSUFBSUMsY0FBSixDQUFXRixHQUFYLEVBQWdCLDBDQUFoQixDQUFiO0FBQ0Q7QUFDRixLQWhDa0U7O0FBQUEsbUNBeUMzRCxNQUFZO0FBQ2xCLFVBQUksS0FBS1IsTUFBVCxFQUFpQjtBQUNmLGFBQUtBLE1BQUwsQ0FBWVcsT0FBWjtBQUNBLGFBQUtYLE1BQUwsR0FBY1ksU0FBZDtBQUNBLGFBQUtMLElBQUwsQ0FBVSxPQUFWO0FBQ0Q7QUFDRixLQS9Da0U7O0FBRWpFLFNBQUtQLE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtHLFlBQUwsR0FBb0IsSUFBSVUscUJBQUosQ0FBaUI7QUFBRUMsTUFBQUEsTUFBTSxFQUFFYixPQUFPLENBQUNhO0FBQWxCLEtBQWpCLENBQXBCO0FBRUFkLElBQUFBLE1BQU0sQ0FBQ2UsRUFBUCxDQUFVLE1BQVYsRUFBa0IsS0FBS0MsWUFBdkI7QUFDQWhCLElBQUFBLE1BQU0sQ0FBQ2UsRUFBUCxDQUFVLE9BQVYsRUFBbUIsS0FBS0UsS0FBeEI7QUFDQWpCLElBQUFBLE1BQU0sQ0FBQ2UsRUFBUCxDQUFVLE9BQVYsRUFBb0JQLEdBQUQsSUFDakIsS0FBS0MsT0FBTCxDQUFhLElBQUlDLGNBQUosQ0FBV0YsR0FBWCxFQUFnQix5Q0FBaEIsQ0FBYixDQURGO0FBR0Q7O0FBRURVLEVBQUFBLElBQUksQ0FBQ2IsT0FBRCxFQUFpQztBQUNuQyxVQUFNO0FBQUVMLE1BQUFBO0FBQUYsUUFBYSxJQUFuQjtBQUNBLFFBQUksQ0FBQ0EsTUFBTCxFQUFhLE1BQU1tQixLQUFLLENBQUMsZ0NBQUQsQ0FBWDtBQUNibkIsSUFBQUEsTUFBTSxDQUFDb0IsS0FBUCxDQUNFLEtBQUtqQixZQUFMLENBQWtCa0IsTUFBbEIsQ0FBeUJoQixPQUF6QixDQURGLEVBRUdHLEdBQUQsSUFBNEI7QUFDMUIsVUFBSUEsR0FBSixFQUFTLEtBQUtDLE9BQUwsQ0FBYSxJQUFJQyxjQUFKLENBQVdGLEdBQVgsRUFBZ0IsMEJBQWhCLENBQWI7QUFDVixLQUpIO0FBTUQ7O0FBYUQ7OztBQUdBRyxFQUFBQSxPQUFPLEdBQVM7QUFDZCxTQUFLTSxLQUFMO0FBQ0Q7O0FBVU9SLEVBQUFBLE9BQVIsQ0FBZ0JELEdBQWhCLEVBQWtDO0FBQ2hDLFNBQUtELElBQUwsQ0FBVSxPQUFWLEVBQW1CQyxHQUFuQjtBQUNBLFNBQUtTLEtBQUw7QUFDRDs7QUF4REEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5pbXBvcnQgbmV0IGZyb20gJ25ldCdcblxuaW1wb3J0IFN0cmljdEV2ZW50RW1pdHRlciBmcm9tICdzdHJpY3QtZXZlbnQtZW1pdHRlci10eXBlcydcbmltcG9ydCB7IFZFcnJvciB9IGZyb20gJ3ZlcnJvcidcblxuaW1wb3J0IE1lc3NhZ2VDb2RlYyBmcm9tICcuL01lc3NhZ2VDb2RlYydcbmltcG9ydCB7IE1lc3NhZ2VFdmVudCB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uT3B0aW9ucyA9IHtcbiAgYmluYXJ5PzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VDb25uZWN0aW9uRW1pdHRlZEV2ZW50cyB7XG4gIG1lc3NhZ2U6IE1lc3NhZ2VFdmVudFxuICBlcnJvcjogRXJyb3JcbiAgY2xvc2U6IHZvaWRcbn1cblxudHlwZSBNZXNzYWdlQ29ubmVjdGlvbkVtaXR0ZXIgPSBTdHJpY3RFdmVudEVtaXR0ZXI8XG4gIEV2ZW50RW1pdHRlcixcbiAgTWVzc2FnZUNvbm5lY3Rpb25FbWl0dGVkRXZlbnRzXG4+XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VDb25uZWN0aW9uIGV4dGVuZHMgKEV2ZW50RW1pdHRlciBhcyB7XG4gIG5ldyAoKTogTWVzc2FnZUNvbm5lY3Rpb25FbWl0dGVyXG59KSB7XG4gIHByaXZhdGUgc29ja2V0OiBuZXQuU29ja2V0IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUNvZGVjOiBNZXNzYWdlQ29kZWNcblxuICBjb25zdHJ1Y3Rvcihzb2NrZXQ6IG5ldC5Tb2NrZXQsIG9wdGlvbnM6IE1lc3NhZ2VDb25uZWN0aW9uT3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMubWVzc2FnZUNvZGVjID0gbmV3IE1lc3NhZ2VDb2RlYyh7IGJpbmFyeTogb3B0aW9ucy5iaW5hcnkgfSlcblxuICAgIHNvY2tldC5vbignZGF0YScsIHRoaXMub25Tb2NrZXREYXRhKVxuICAgIHNvY2tldC5vbignY2xvc2UnLCB0aGlzLmNsb3NlKVxuICAgIHNvY2tldC5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT5cbiAgICAgIHRoaXMub25FcnJvcihuZXcgVkVycm9yKGVyciwgJ01lc3NhZ2VDb25uZWN0aW9uIGdvdCBlcnJvciBmcm9tIHNvY2tldCcpKVxuICAgIClcbiAgfVxuXG4gIHNlbmQobWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBzb2NrZXQgfSA9IHRoaXNcbiAgICBpZiAoIXNvY2tldCkgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgbWlzc2luZyBzb2NrZXRXcml0ZScpXG4gICAgc29ja2V0LndyaXRlKFxuICAgICAgdGhpcy5tZXNzYWdlQ29kZWMuZW5jb2RlKG1lc3NhZ2UpLFxuICAgICAgKGVycjogRXJyb3IgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKGVycikgdGhpcy5vbkVycm9yKG5ldyBWRXJyb3IoZXJyLCAnc29ja2V0IGVycm9yIGR1cmluZyBzZW5kJykpXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBvblNvY2tldERhdGEgPSAoZGF0YTogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWVzc2FnZUNvZGVjLmRlY29kZShkYXRhLCAobWVzc2FnZTogQnVmZmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50OiBNZXNzYWdlRXZlbnQgPSB7IGRhdGE6IG1lc3NhZ2UgfVxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBldmVudClcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLm9uRXJyb3IobmV3IFZFcnJvcihlcnIsICdlcnJvciB3aGlsZSBkZWNvZGluZyBtZXNzYWdlIGZyb20gc29ja2V0JykpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFdlYlNvY2tldCBBUElcbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSgpXG4gIH1cblxuICBjbG9zZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuc29ja2V0LmRlc3Ryb3koKVxuICAgICAgdGhpcy5zb2NrZXQgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25FcnJvcihlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICB0aGlzLmNsb3NlKClcbiAgfVxufVxuIl19