te_nsqjs
Version:
NodeJS client for NSQ
65 lines (54 loc) • 1.47 kB
JavaScript
// Generated by CoffeeScript 1.12.3
var FrameBuffer, _;
_ = require('underscore');
FrameBuffer = (function() {
function FrameBuffer() {}
FrameBuffer.prototype.consume = function(raw) {
return this.buffer = Buffer.concat(_.compact([this.buffer, raw]));
};
FrameBuffer.prototype.nextFrame = function() {
var frame, nextOffset;
if (!this.buffer) {
return;
}
if (!(this.frameSize(0) && this.frameSize(0) <= this.buffer.length)) {
return;
}
frame = this.pluckFrame();
nextOffset = this.nextOffset();
this.buffer = this.buffer.slice(nextOffset);
if (!this.buffer.length) {
delete this.buffer;
}
return frame;
};
FrameBuffer.prototype.pluckFrame = function(offset) {
var frame, frameId;
if (offset == null) {
offset = 0;
}
frame = this.buffer.slice(offset, offset + this.frameSize(offset));
frameId = frame.readInt32BE(4);
return [frameId, frame.slice(8)];
};
FrameBuffer.prototype.nextOffset = function(offset) {
var size;
if (offset == null) {
offset = 0;
}
size = this.frameSize(offset);
if (size) {
return offset + size;
}
};
FrameBuffer.prototype.frameSize = function(offset) {
if (!(this.buffer && this.buffer.length > 4)) {
return;
}
if (offset + 4 <= this.buffer.length) {
return 4 + this.buffer.readInt32BE(offset);
}
};
return FrameBuffer;
})();
module.exports = FrameBuffer;