node-aurora
Version:
Provides an interface to the Aurora Dreamband.
185 lines (126 loc) • 5.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of");
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require("babel-runtime/helpers/inherits");
var _inherits3 = _interopRequireDefault(_inherits2);
var _stream = require("stream");
var _stream2 = _interopRequireDefault(_stream);
var _binaryParser = require("binary-parser");
var _AuroraConstants = require("./AuroraConstants");
var _AuroraConstants2 = _interopRequireDefault(_AuroraConstants);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var AuroraTransformBinary = function (_Stream$Transform) {
(0, _inherits3.default)(AuroraTransformBinary, _Stream$Transform);
function AuroraTransformBinary() {
var dataType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _AuroraConstants2.default.DataTypes.UINT8;
(0, _classCallCheck3.default)(this, AuroraTransformBinary);
var _this = (0, _possibleConstructorReturn3.default)(this, (AuroraTransformBinary.__proto__ || (0, _getPrototypeOf2.default)(AuroraTransformBinary)).call(this, { encoding: null }));
_this.dataType = dataType;
_this.parseType = _this._getParseTypeFromDataType(dataType);
_this.parseTypeLength = _this._getParseTypeLengthFromDataType(dataType);
_this.parser = new _binaryParser.Parser();
_this.leftoverBuffer = null;
_this.hasData = false;
_this.parser.array('values', {
type: _this.parseType,
readUntil: 'eof',
formatter: function formatter(values) {
return values.join(',');
}
});
return _this;
}
(0, _createClass3.default)(AuroraTransformBinary, [{
key: "_transform",
value: function _transform(respChunk, encoding, done) {
if (!respChunk.length) {
done();
return;
}
if (Buffer.isBuffer(this.leftoverBuffer)) {
respChunk = Buffer.concat([this.leftoverBuffer, respChunk], this.leftoverBuffer.length + respChunk.length);
this.leftoverBuffer = null;
}
if (respChunk.length < this.parseTypeLength) {
this.leftoverBuffer = respChunk;
done();
return;
}
var numBytesLeftover = respChunk.length % this.parseTypeLength;
var parsedChunk = void 0;
if (numBytesLeftover) {
parsedChunk = this.parser.parse(respChunk.slice(0, -numBytesLeftover));
this.leftoverBuffer = respChunk.slice(-numBytesLeftover);
} else {
parsedChunk = this.parser.parse(respChunk);
}
this.push((this.hasData ? ',' : '') + parsedChunk.values);
this.hasData = true;
done();
}
}, {
key: "_flush",
value: function _flush(done) {
if (this.leftoverBuffer) {
console.log("Unparsed binary buffer: ", this.leftoverBuffer);
}
this.hasData = false;
done();
}
}, {
key: "_getParseTypeFromDataType",
value: function _getParseTypeFromDataType(dataType) {
switch (dataType) {
case _AuroraConstants2.default.DataTypes.INT8:
return 'int8';
case _AuroraConstants2.default.DataTypes.UINT16:
return 'uint16le';
case _AuroraConstants2.default.DataTypes.INT16:
return 'int16le';
case _AuroraConstants2.default.DataTypes.FLOAT:
return 'floatle';
case _AuroraConstants2.default.DataTypes.UINT32:
case _AuroraConstants2.default.DataTypes.STR:
case _AuroraConstants2.default.DataTypes.PTR:
return 'uint32le';
case _AuroraConstants2.default.DataTypes.INT32:
return 'int32le';
case _AuroraConstants2.default.DataTypes.UINT8:
case _AuroraConstants2.default.DataTypes.CHAR:
default:
return 'uint8';
}
}
}, {
key: "_getParseTypeLengthFromDataType",
value: function _getParseTypeLengthFromDataType(dataType) {
switch (dataType) {
case _AuroraConstants2.default.DataTypes.UINT16:
case _AuroraConstants2.default.DataTypes.INT16:
return 2;
case _AuroraConstants2.default.DataTypes.UINT32:
case _AuroraConstants2.default.DataTypes.FLOAT:
case _AuroraConstants2.default.DataTypes.STR:
case _AuroraConstants2.default.DataTypes.PTR:
case _AuroraConstants2.default.DataTypes.INT32:
return 4;
case _AuroraConstants2.default.DataTypes.UINT8:
case _AuroraConstants2.default.DataTypes.CHAR:
case _AuroraConstants2.default.DataTypes.INT8:
default:
return 1;
}
}
}]);
return AuroraTransformBinary;
}(_stream2.default.Transform);
exports.default = AuroraTransformBinary;