Source: components/MonitorManagerComponent.js

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 }