| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 'use strict';
- const Duplex = require('stream').Duplex;
- const kCallback = Symbol('Callback');
- const kOtherSide = Symbol('Other');
- class DuplexSocket extends Duplex {
- constructor(options) {
- super(options);
- this[kCallback] = null;
- this[kOtherSide] = null;
- }
- _read() {
- const callback = this[kCallback];
- if (callback) {
- this[kCallback] = null;
- callback();
- }
- }
- _write(chunk, encoding, callback) {
- this[kOtherSide][kCallback] = callback;
- this[kOtherSide].push(chunk);
- }
- _final(callback) {
- this[kOtherSide].on('end', callback);
- this[kOtherSide].push(null);
- }
- }
- class DuplexPair {
- constructor(options) {
- this.socket1 = new DuplexSocket(options);
- this.socket2 = new DuplexSocket(options);
- this.socket1[kOtherSide] = this.socket2;
- this.socket2[kOtherSide] = this.socket1;
- }
- }
- module.exports = DuplexPair;
|