mirror of
https://github.com/JasonYANG170/IOTConnect-Web.git
synced 2024-11-23 20:26:28 +00:00
70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.BufferedDuplex = exports.writev = void 0;
|
|
const readable_stream_1 = require("readable-stream");
|
|
function writev(chunks, cb) {
|
|
const buffers = new Array(chunks.length);
|
|
for (let i = 0; i < chunks.length; i++) {
|
|
if (typeof chunks[i].chunk === 'string') {
|
|
buffers[i] = Buffer.from(chunks[i].chunk, 'utf8');
|
|
}
|
|
else {
|
|
buffers[i] = chunks[i].chunk;
|
|
}
|
|
}
|
|
this._write(Buffer.concat(buffers), 'binary', cb);
|
|
}
|
|
exports.writev = writev;
|
|
class BufferedDuplex extends readable_stream_1.Duplex {
|
|
constructor(opts, proxy, socket) {
|
|
super({
|
|
objectMode: true,
|
|
});
|
|
this.proxy = proxy;
|
|
this.socket = socket;
|
|
this.writeQueue = [];
|
|
if (!opts.objectMode) {
|
|
this._writev = writev.bind(this);
|
|
}
|
|
this.isSocketOpen = false;
|
|
this.proxy.on('data', (chunk) => {
|
|
this.push(chunk);
|
|
});
|
|
}
|
|
_read(size) {
|
|
this.proxy.read(size);
|
|
}
|
|
_write(chunk, encoding, cb) {
|
|
if (!this.isSocketOpen) {
|
|
this.writeQueue.push({ chunk, encoding, cb });
|
|
}
|
|
else {
|
|
this.writeToProxy(chunk, encoding, cb);
|
|
}
|
|
}
|
|
_final(callback) {
|
|
this.writeQueue = [];
|
|
this.proxy.end(callback);
|
|
}
|
|
socketReady() {
|
|
this.emit('connect');
|
|
this.isSocketOpen = true;
|
|
this.processWriteQueue();
|
|
}
|
|
writeToProxy(chunk, encoding, cb) {
|
|
if (this.proxy.write(chunk, encoding) === false) {
|
|
this.proxy.once('drain', cb);
|
|
}
|
|
else {
|
|
cb();
|
|
}
|
|
}
|
|
processWriteQueue() {
|
|
while (this.writeQueue.length > 0) {
|
|
const { chunk, encoding, cb } = this.writeQueue.shift();
|
|
this.writeToProxy(chunk, encoding, cb);
|
|
}
|
|
}
|
|
}
|
|
exports.BufferedDuplex = BufferedDuplex;
|
|
//# sourceMappingURL=BufferedDuplex.js.map
|