2013-10-18 13 views
0

我试图做一个功能,其行为像net.createServer,除了它返回的是套接字而不是套接字的包装对象。将NodeJS的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当我做错事,但我想不出什么。

回答

1

我错误地调用了超类的构造函数。它应该是:

stream.Duplex.call(this, {})