c9-core/plugins/c9.ide.run.debug.xdebug/lib/DbgpStreamReader.js

45 wiersze
1.1 KiB
JavaScript

define(function(require, exports, module) {
"use strict";
var inherits = require("util").inherits;
var Stream = require("stream").Stream;
module.exports = DbgpStreamReader;
function DbgpStreamReader() {
Stream.call(this);
this.writable = true;
this._buffer = "";
}
inherits(DbgpStreamReader, Stream);
DbgpStreamReader.prototype.write = function(chunk) {
this._buffer += chunk;
var parts = this._buffer.split(/\u0000/g);
// keep the last partial messages buffered
this._buffer = parts.slice(parts.length - ((parts.length - 1) % 2) - 1).join("\u0000");
parts = parts.slice(0, parts.length - ((parts.length - 1) % 2) - 1);
for (var i = 0; i < parts.length; i += 2) {
var len = parseInt(parts[i], 10);
var data = parts[i + 1];
if (len !== data.length) {
var err = new Error("Invalid chunk: data length does not match header");
this.emit("error", err);
return;
}
this.emit("data", data);
}
};
DbgpStreamReader.prototype.end = function() {
this.emit("end");
};
});