| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _bl = _interopRequireDefault(require("bl"));
- var _readableStream = require("readable-stream");
- var _packet = require("./packet");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- class OutgoingMessageStream extends _readableStream.Duplex {
- constructor(debug, {
- packetSize
- }) {
- super({
- writableObjectMode: true
- });
- this.packetSize = packetSize;
- this.debug = debug;
- this.bl = new _bl.default(); // When the writable side is ended, push `null`
- // to also end the readable side.
- this.on('finish', () => {
- this.push(null);
- });
- }
- _write(message, _encoding, callback) {
- const length = this.packetSize - _packet.HEADER_LENGTH;
- let packetNumber = 0;
- this.currentMessage = message;
- this.currentMessage.on('data', data => {
- if (message.ignore) {
- return;
- }
- this.bl.append(data);
- while (this.bl.length > length) {
- const data = this.bl.slice(0, length);
- this.bl.consume(length); // TODO: Get rid of creating `Packet` instances here.
- const packet = new _packet.Packet(message.type);
- packet.packetId(packetNumber += 1);
- packet.resetConnection(message.resetConnection);
- packet.addData(data);
- this.debug.packet('Sent', packet);
- this.debug.data(packet);
- if (this.push(packet.buffer) === false) {
- message.pause();
- }
- }
- });
- this.currentMessage.on('end', () => {
- const data = this.bl.slice();
- this.bl.consume(data.length); // TODO: Get rid of creating `Packet` instances here.
- const packet = new _packet.Packet(message.type);
- packet.packetId(packetNumber += 1);
- packet.resetConnection(message.resetConnection);
- packet.last(true);
- packet.ignore(message.ignore);
- packet.addData(data);
- this.debug.packet('Sent', packet);
- this.debug.data(packet);
- this.push(packet.buffer);
- this.currentMessage = undefined;
- callback();
- });
- }
- _read(_size) {
- // If we do have a message, resume it and get data flowing.
- // Otherwise, there is nothing to do.
- if (this.currentMessage) {
- this.currentMessage.resume();
- }
- }
- }
- var _default = OutgoingMessageStream;
- exports.default = _default;
- module.exports = OutgoingMessageStream;
|