import { BaseComponent } from "../components/BaseComponent";
import { Utils } from "../common/Utils";
import { MonitorDataProcessor } from "../common/MonitorDataProcessor";
import { MonitorTask } from "../common/MonitorTask";
/**
* @class MonitorManagerComponent
* The monitor manager component.
* @memberof THING
* @extends THING.BaseComponent
* @public
*/
class MonitorManagerComponent extends BaseComponent {
constructor() {
super();
this.genId = 1;
this.taskMap = {};
}
start(config, options = {}) {
const id = this.genId++;
let adapter;
switch (config.type) { // 用户可以自己实现adapter
case 'websocket':
adapter = Utils.createObject('WebsocketDataAdapter', config);
break;
case 'ajax':
adapter = Utils.createObject('AjaxDataAdapter', config);
break;
case 'simulation':
adapter = Utils.createObject('SimulationDataAdapter', config);
// console.log('simulation connect...');
break;
case 'custom':
if (config.adapter && Utils.isClass(config.adapter) /* this._isClassInstance(config.adapter) */) {
adapter = new config.adapter(config);
adapter.config = config;
}
break;
default:
return -1; // Returning illegal id -1.
}
const dataProcessor = new MonitorDataProcessor(options.processor);
const task = new MonitorTask(adapter, dataProcessor, options);
this.taskMap[id] = task;
// Initiate monitoring tasks.
task.run();
return id;
}
stop(id) {
if (this.taskMap[id]) {
this.taskMap[id].stop();
delete this.taskMap[id];
}
}
_isClassInstance(obj) {
return typeof obj === 'function' && /^class\s/.test(obj.toString());
}
}
export { MonitorManagerComponent }