0

net.createServerソケットの代わりにソケットのラッパーであるオブジェクトを返すことを除いて、 のように動作する関数を作成しようとしています。

(これらのポイントは、自動データ変換を行うことです。)

私の最近の試みは次のようになります:

var net = require('net');
var util = require('util');
var stream = require('stream');
var EventEmitter = process.EventEmitter;

exports.createServer = createServer;

function createServer(arg0, arg1) {
  var server;
  var netServer;
  var ocb;

  if (typeof arg1 === 'function') {
    // options, callback
    netServer = net.createServer(arg0, callback);
    ocb = arg1;
  } else if (typeof arg0 === 'function') {
    // callback
    netServer = net.createServer(callback);
    ocb = arg0;
  } else {
    // options?
    netServer = net.createServer(arg0);
    ocb = null;
  }

  server = new Server(netServer);

  function callback(socket) {
    ocb(new LiftedSocket(socket));
  };

  return server;
  ;
}

function Server(netServer) {
  this.netServer = netServer;
}
util.inherits(Server, EventEmitter);

Server.prototype.listen = function() {
  this.netServer.listen.apply(this.netServer, arguments);
}

function LiftedSocket(socket) {
  stream.Duplex(this);
  this.socket = socket;
}
util.inherits(LiftedSocket, stream.Duplex);

LiftedSocket.prototype._read = function(size) {
  console.log('_read', size);
  // transforming code goes here
  this.socket.read(size);
}
LiftedSocket.prototype._write = function(chunk, encoding, callback) {
  console.log('_write', chunk, encoding, callback);
  // transforming code goes here
  this.socket.write(chunk, callback);
}

しかし、(返された からパイプしようとしてLiftedSocket)テストすると、次のようなエラーで失敗します。

 Uncaught TypeError: Cannot read property 'pipesCount' of undefined
  at LiftedSocket.Readable.pipe (_stream_readable.js:453:16)

 Uncaught TypeError: Cannot read property 'flowing' of undefined
  at LiftedSocket.Readable.on (_stream_readable.js:691:44)

を構築するときに何か間違ったことをしているLiftedSocketと思いますが、何が原因かわかりません。

4

1 に答える 1

1

スーパークラスのコンストラクターを間違って呼び出していました。次のようになっているはずです。

stream.Duplex.call(this, {})
于 2013-10-18T12:00:49.140 に答える