了解Node.js Stream API

时间:2016-11-13 20:43:50

标签: javascript node.js

我正在尝试将Node.js Stream API与node-serialport模块一起使用。我尝试与之通信的设备有自己需要实现的协议。

我创建了两个Transform类。

const Delimiter = class Delimiter extends Transform {

    constructor() {
        super({})

        this.delimiter = new Buffer(Token.TERMINATOR)
        this.buffer = new Buffer(0)
    }

    _transform(chunk, encoding, callback) {
        let data = Buffer.concat([this.buffer, chunk])

        let index

        while ((index = data.indexOf(this.delimiter)) !== -1) {
            this.push(data.slice(0, index + 1))
            data = data.slice(index + this.delimiter.length)
        }

        this.buffer = data
        callback()
    }

}

const Decoder = class Decoder extends Transform {

    constructor(protocol, entity) {
        super({objectMode: true})

        this.protocol = protocol
        this.entity = entity
    }

    _transform(chunk, encoding, callback) {
        const decoded = decode(this.protocol, this.entity, chunk)
        this.push(decoded)
        callback()
    }
}

我可以优雅地链接如下:

serialPort.pipe(new Delimiter()).pipe(new Decoder(Protocol, Entity.CLIENT))

我真正想做的是使用管道提供的这种非常优雅和高效的解决方案,使用SerialPort write方法。

有什么办法可以做到吗?是否有可能以某种方式将Transform对象添加到write方法中,这样每当我调用像serialPort.write(new DeviceInfoRequest())之类的东西时,对象就会被传递给管道并被处理?

0 个答案:

没有答案