first commit

This commit is contained in:
2026-09-08 20:28:54 +08:00
commit 2ada8d3d5a
37380 changed files with 4886169 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
(function() {
var Binary, Entry, Parser, Priority,
extend = 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; },
hasProp = {}.hasOwnProperty;
Parser = require('../parser');
Entry = require('../entry');
Priority = require('../priority');
Binary = (function(superClass) {
var HEADER_SIZE_MAX, HEADER_SIZE_V1;
extend(Binary, superClass);
HEADER_SIZE_V1 = 20;
HEADER_SIZE_MAX = 100;
function Binary() {
this.buffer = new Buffer('');
}
Binary.prototype.parse = function(chunk) {
var cursor, data, entry, headerSize, length, nsec, sec;
this.buffer = Buffer.concat([this.buffer, chunk]);
while (this.buffer.length > 4) {
cursor = 0;
length = this.buffer.readUInt16LE(cursor);
cursor += 2;
headerSize = this.buffer.readUInt16LE(cursor);
if (headerSize < HEADER_SIZE_V1 || headerSize > HEADER_SIZE_MAX) {
headerSize = HEADER_SIZE_V1;
}
cursor += 2;
if (this.buffer.length < headerSize + length) {
break;
}
entry = new Entry;
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;
cursor = headerSize;
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);