kopia lustrzana https://github.com/c9/core
45 wiersze
1.1 KiB
JavaScript
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");
|
|
};
|
|
|
|
});
|