Skip to content

Instantly share code, notes, and snippets.

@Raynos
Created August 24, 2012 03:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Raynos/3445243 to your computer and use it in GitHub Desktop.
Save Raynos/3445243 to your computer and use it in GitHub Desktop.

BufferStream

For when you want to wrap a stream in a buffer.

The buffer is a duplex stream which will emit data it got from the target and will write it any data written to it to the target once you empty the buffer.

It will buffer everything if you call buffer.

It's expected the target is a duplex stream.

Example

var BufferStream = require("buffer-stream")

var target = SomeStream()
    , buffer = BufferStream(target).buffer()

target.on("connect", function () {
    // Ok we are ready to go!
    buffer.empty()
})

target.on("disconnect", function () {
    // Oops, better buffer again
    buffer.buffer()
})

buffer.on("data", function (data) { 
    // We get this data once the buffer is emptied
    // Any data emitted by the target before the empty call is buffered
})

// Will write to the target once the buffer is emptied
buffer.write("will be written once some-condition is met")
var PauseStream = require("pause-stream")
, duplexer = require("duplexer")
function BufferStream(stream) {
var writable = PauseStream()
, readable = PauseStream()
, buffered = duplexer(writable, readable)
, piped = false
buffered.buffer = buffer
buffered.empty = empty
return buffered
function buffer() {
writable.pause()
readable.pause()
return buffered
}
function empty() {
if (piped === false) {
piped = true
writable.pipe(stream).pipe(readable)
}
writable.resume()
readable.resume()
return buffered
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment