1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/web/ synced 2025-03-30 00:00:13 +01:00
VILLASweb/src/data-managers/simulator-data-manager.js
Markus Grigull 5441bd46f6 Add websocket api with simulator data
Simulator data is passed to each widget to process the data
2017-03-04 10:31:13 +01:00

72 lines
2.1 KiB
JavaScript

/**
* File: simulator-data-manager.js
* Author: Markus Grigull <mgrigull@eonerc.rwth-aachen.de>
* Date: 03.03.2017
* Copyright: 2017, Institute for Automation of Complex Power Systems, EONERC
* This file is part of VILLASweb. All Rights Reserved. Proprietary and confidential.
* Unauthorized copying of this file, via any medium is strictly prohibited.
**********************************************************************************/
import WebsocketAPI from '../api/websocket-api';
import AppDispatcher from '../app-dispatcher';
class SimulationDataManager {
open(endpoint, identifier) {
WebsocketAPI.addSocket(endpoint, identifier, { onOpen: event => this.onOpen(event), onClose: event => this.onClose(event), onMessage: event => this.onMessage(event) });
}
onOpen(event) {
// TODO: Add identifiers to callbacks
AppDispatcher.dispatch({
type: 'simulatorData/opened',
identifier: 'RTDS',
signals: 8
});
}
onClose(event) {
AppDispatcher.dispatch({
type: 'simulatorData/closed'
});
}
onMessage(event) {
var message = this.bufferToMessage(event.data);
AppDispatcher.dispatch({
type: 'simulatorData/data-changed',
data: message,
identifier: 'RTDS'
});
}
bufferToMessage(blob) {
// parse incoming message into usable data
var data = new DataView(blob);
let OFFSET_ENDIAN = 1;
let OFFSET_TYPE = 2;
let OFFSET_VERSION = 4;
var bits = data.getUint8(0);
var simulator = data.getUint8(0x01);
var endian = (bits >> OFFSET_ENDIAN) & 0x1 ? 0 : 1;
var length = data.getUint16(0x02, endian);
var values = new Float32Array(data.buffer, data.byteOffset + 0x10, length);
return {
endian: endian,
version: (bits >> OFFSET_VERSION) & 0xF,
type: (bits >> OFFSET_TYPE) & 0x3,
length: length,
sequence: data.getUint32(0x04, endian),
timestamp: data.getUint32(0x08, endian) * 1e3 + data.getUint32(0x0C, endian) * 1e-6,
values: values,
simulator: simulator
};
}
}
export default new SimulationDataManager();