mirror of
https://github.com/DeviceFarmer/stf.git
synced 2026-04-19 08:33:24 +02:00
Add a varint-delimiting stream as well.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
var util = require('util')
|
||||
var stream = require('stream')
|
||||
|
||||
function MessageStream() {
|
||||
function DelimitedStream() {
|
||||
stream.Transform.call(this)
|
||||
this._length = 0
|
||||
this._lengthIndex = 0
|
||||
@@ -9,9 +9,9 @@ function MessageStream() {
|
||||
this._buffer = new Buffer(0)
|
||||
}
|
||||
|
||||
util.inherits(MessageStream, stream.Transform)
|
||||
util.inherits(DelimitedStream, stream.Transform)
|
||||
|
||||
MessageStream.prototype._transform = function(chunk, encoding, done) {
|
||||
DelimitedStream.prototype._transform = function(chunk, encoding, done) {
|
||||
this._buffer = Buffer.concat([this._buffer, chunk])
|
||||
|
||||
var lo = 0
|
||||
@@ -49,4 +49,34 @@ MessageStream.prototype._transform = function(chunk, encoding, done) {
|
||||
done()
|
||||
}
|
||||
|
||||
module.exports = MessageStream
|
||||
module.exports.DelimitedStream = DelimitedStream
|
||||
|
||||
function DelimitingStream() {
|
||||
stream.Transform.call(this)
|
||||
}
|
||||
|
||||
util.inherits(DelimitingStream, stream.Transform)
|
||||
|
||||
DelimitingStream.prototype._transform = function(chunk, encoding, done) {
|
||||
var length = chunk.length
|
||||
var lengthBytes = []
|
||||
var more = true
|
||||
|
||||
while (more) {
|
||||
if (length > 0x7f) {
|
||||
lengthBytes.push((1 << 7) + (length & 0x7f))
|
||||
length >>= 7
|
||||
}
|
||||
else {
|
||||
lengthBytes.push(length)
|
||||
more = false
|
||||
}
|
||||
}
|
||||
|
||||
this.push(new Buffer(lengthBytes))
|
||||
this.push(chunk)
|
||||
|
||||
done()
|
||||
}
|
||||
|
||||
module.exports.DelimitingStream = DelimitingStream
|
||||
|
||||
Reference in New Issue
Block a user