Skip to content

Instantly share code, notes, and snippets.

@Raynos
Created November 15, 2012 00:21
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/bbe5ef0f3d4e6c45279c to your computer and use it in GitHub Desktop.
Save Raynos/bbe5ef0f3d4e6c45279c to your computer and use it in GitHub Desktop.

xhr-stream

client

var stream = XHRStream("/foo")

stream.write("bar")

stream.end()

server

var handler = XHRStream()
router.addRoute("/foo", handler.handler)

handler.stream.pipe(WriteStream(function (chunk) {
    assert.equal(chunk, "bar")
}))
var xhr = require("xhr")
, WriteStream = require("write-stream")
module.exports = XHRWriteStream
function XHRWriteStream(uri) {
var ordered = OrderedStream()
var stream = WriteStream(function write(chunk) {
xhr({
uri: uri + "/write"
, method: "POST"
, data: JSON.stringify(chunk)
}, error)
}, function end() {
xhr({
uri: uri + "/end"
, method: "POST"
}, error)
})
ordered.pipe(stream)
return ordered
function error(err) {
if (err) {
ordered.emit("error", err)
}
}
}
var ReadStream = require("read-stream")
, toArray = require("write-stream").toArray
, open = /.*\/write$/
, end = /.*\/end$/
module.exports = XHRRoute
function XHRRoute() {
var queue = ReadStream()
, ordered = OrderedStream()
return {
handler: handler
, stream: queue.stream
}
function handler(req, res) {
if (open.test(req.url)) {
req.pipe(ordered).pipe(toArray(function (array) {
queue.push(JSON.parse(array.join("")))
}))
} else if (end.test(req.url)) {
queue.end()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment