Skip to content

Instantly share code, notes, and snippets.

@Raynos
Created August 3, 2012 23:45
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/1316736ce5946230b790 to your computer and use it in GitHub Desktop.
Save Raynos/1316736ce5946230b790 to your computer and use it in GitHub Desktop.
var shoe = require("shoe")
, MuxDemux = require("mux-demux")
, curry = require("ap").curry
, PauseStream = require("pause-stream")
, reemit = curry(function (stream, message) {
stream.emit(message)
})
module.exports = createOuterStream
function createOuterStream(uri, reconnect) {
var mdm = MuxDemux()
, innerPause = PauseStream()
innerPause.on("connect", reemit(mdm, "connect"))
innerPause.pipe(mdm).pipe(innerPause, {
end: false
})
createShoeStream(uri, reconnect, innerPause)
return mdm
}
function createShoeStream(uri, reconnect, outer) {
var stream = shoe(uri)
outer.pause()
stream.on("connect", outer.resume.bind(outer))
stream.on("connect", reemit(outer, "connect"))
outer.pipe(stream).pipe(outer, {
end: false
})
if (reconnect) {
stream.on("end", onend)
}
return outer
function onend() {
console.log("STREAM ENDED")
stream.destroy()
createShoeStream(uri, reconnect, outer)
outer.emit("disconnect")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment