| (function() { |
| var Binary, Entry, Parser, Priority, |
| __hasProp = {}.hasOwnProperty, |
| __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; |
| |
| Parser = require('../parser'); |
| |
| Entry = require('../entry'); |
| |
| Priority = require('../priority'); |
| |
| Binary = (function(_super) { |
| var HEADER_LENGTH; |
| |
| __extends(Binary, _super); |
| |
| HEADER_LENGTH = 20; |
| |
| function Binary() { |
| this.buffer = new Buffer(''); |
| } |
| |
| Binary.prototype.parse = function(chunk) { |
| var cursor, data, entry, length, nsec, sec; |
| this.buffer = Buffer.concat([this.buffer, chunk]); |
| while (this.buffer.length > HEADER_LENGTH) { |
| cursor = 0; |
| length = this.buffer.readUInt16LE(cursor); |
| if (this.buffer.length < HEADER_LENGTH + length) { |
| break; |
| } |
| entry = new Entry; |
| cursor += 4; |
| entry.setPid(this.buffer.readInt32LE(cursor)); |
| cursor += 4; |
| entry.setTid(this.buffer.readInt32LE(cursor)); |
| cursor += 4; |
| sec = this.buffer.readInt32LE(cursor); |
| cursor += 4; |
| nsec = this.buffer.readInt32LE(cursor); |
| entry.setDate(new Date(sec * 1000 + nsec / 1000000)); |
| cursor += 4; |
| data = this.buffer.slice(cursor, cursor + length); |
| cursor += length; |
| this.buffer = this.buffer.slice(cursor); |
| this._processEntry(entry, data); |
| } |
| if (this.buffer.length) { |
| this.emit('wait'); |
| } else { |
| this.emit('drain'); |
| } |
| }; |
| |
| Binary.prototype._processEntry = function(entry, data) { |
| var cursor, length; |
| entry.setPriority(data[0]); |
| cursor = 1; |
| length = data.length; |
| while (cursor < length) { |
| if (data[cursor] === 0) { |
| entry.setTag(data.slice(1, cursor).toString()); |
| entry.setMessage(data.slice(cursor + 1, length - 1).toString()); |
| this.emit('entry', entry); |
| return; |
| } |
| cursor += 1; |
| } |
| this.emit('error', new Error("Unprocessable entry data '" + data + "'")); |
| }; |
| |
| return Binary; |
| |
| })(Parser); |
| |
| module.exports = Binary; |
| |
| }).call(this); |