diff --git a/plugins/c9.nodeapi/json-stream.js b/plugins/c9.nodeapi/json-stream.js new file mode 100644 index 00000000..1f48ed05 --- /dev/null +++ b/plugins/c9.nodeapi/json-stream.js @@ -0,0 +1,47 @@ +define(function(require, exports, module) { + +var EventEmitter = require("events").EventEmitter; + +module.exports = function(stream) { + var emit = this.emit.bind(this); + + var buffer = ""; + stream.on("data", function(chunk) { + buffer += chunk; + + var parts = buffer.split("\n"); + while (parts.length) { + try { + var message = JSON.parse(parts[0]); + emit("data", message); + parts.shift(); + } + catch (e) { + if (parts.length !== 1) { + emit("error", e); + parts.shift(); + } + else { + break; + } + } + } + buffer = parts.join("\n"); + }); + + stream.on("error", function(err){ + emit("error", err); + }); + + stream.on("close", function(data){ + emit("close", data); + }); + + this.write = function(data) { + stream.write(JSON.stringify(data) + "\n"); + }; +}; + +module.exports.prototype = new EventEmitter(); + +}); \ No newline at end of file