osh-js
Version:
OSH javascript Toolkit
78 lines (71 loc) • 2.89 kB
JavaScript
import GenericParser from "./GenericParser";
import BinaryEncodingParser from "./binary/BinaryEncodingParser";
import MemberParser from "./binary/MemberParser";
import ComponentParser from "./binary/ComponentParser";
import BlockParser from "./binary/BlockParser";
import BinaryDataTypeDecoder from "./binary/dataType/BinaryDataTypeDecoder";
import StringParser from "./common/StringParser";
import DecimalParser from "./common/DecimalParser";
import CountParser from "./common/CountParser";
import BooleanParser from "./common/BooleanParser";
import DataChoiceParser from "./common/DataChoiceParser";
import BinaryTimeParser from "./binary/BinaryTimeParser";
import RootParser from "./common/RootParser";
class BinaryDataParser extends GenericParser {
constructor(rootElement, encoding, properties = {timeShift : 0}) {
console.log(encoding)
super(rootElement, {
nodesId: {},
nodesIdValue: {},
registeredParser: {},
refs: {},
...properties
});
this.resultEncoding = encoding;
this.binaryDataTypeDecoder = new BinaryDataTypeDecoder({
...encoding,
littleEndian: encoding.byteOrder === 'littleEndian'
});
const propsEncoding = {
nodesId: {},
nodesIdValue: {},
registeredParser: {
'member': () => new MemberParser(),
'Component': () => new ComponentParser(this.binaryDataTypeDecoder),
'Block': () => new BlockParser(this.binaryDataTypeDecoder),
'BinaryEncoding': () => new BinaryEncodingParser()
},
refs: {},
};
// parse ResultEncoding
const rootElementEncoding = new RootParser();
rootElementEncoding.init(encoding,propsEncoding);
// parse schema
this.props.registeredParser = {
'Time': () => new BinaryTimeParser(),
'Text': () => new StringParser(),
'Category': () => new StringParser(),
'Quantity': () => new DecimalParser(),
'Count': () => new CountParser(),
'Boolean': () => new BooleanParser(),
'DataChoice': () => new DataChoiceParser(),
};
//
this.parser.init(rootElement, {
...this.props,
refs: propsEncoding.refs
}, '');
}
parseDataBlock(arrayBuffer) {
this.binaryDataTypeDecoder.setData(arrayBuffer);
let results = [];
while(this.binaryDataTypeDecoder.hasNextBlock()) {
const res = {};
this.parser.parse(this.binaryDataTypeDecoder, {}, res);
res['timestamp'] = new Date(res[this.parser.getTimePropertyName()]).getTime() + this.props.timeShift;
results.push(res);
}
return results;
}
}
export default BinaryDataParser;