'use strict'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var util = require('util'); // const Device = require('./device'); var Device = require('./device'); var _require = require('./utils'), createDebug = _require.createDebug, signUtil = _require.signUtil; var debug = createDebug('gateway'); var Gateway = function (_Device) { _inherits(Gateway, _Device); function Gateway() { var _ref; _classCallCheck(this, Gateway); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } // 调试模式标识 var _this = _possibleConstructorReturn(this, (_ref = Gateway.__proto__ || Object.getPrototypeOf(Gateway)).call.apply(_ref, [this].concat(args))); debug('debugger mode'); return _this; } // 入参,设备三元组组成的数组 _createClass(Gateway, [{ key: 'addTopo', value: function addTopo(devices, cb) { var signed = devices.map(function (device) { return signUtil(device); }); this._publishAlinkMessage({ method: this.model.ADD_TOPO_METHOD, pubTopic: this.model.ADD_TOPO_TOPIC, params: signed }, cb); } }, { key: 'getTopo', value: function getTopo(cb) { this._publishAlinkMessage({ method: this.model.GET_TOPO_METHOD, pubTopic: this.model.GET_TOPO_TOPIC, params: {} }, cb); } /* {"id" : "123", "version":"1.0", "params" : [{ "deviceName" : "deviceName1234", "productKey" : "1234556554" }], "method":"thing.topo.delete" } */ }, { key: 'removeTopo', value: function removeTopo(devices, cb) { this._publishAlinkMessage({ method: this.model.DELETE_TOPO_METHOD, pubTopic: this.model.DELETE_TOPO_TOPIC, params: devices }, cb); } }, { key: 'login', value: function login(device, cb) { this._publishAlinkMessage({ params: signUtil(device), pubTopic: this.model.LOGIN_TOPIC }, cb); return this._careteSubDevice(device); // const sub = this.careteSubDevice(device); // return sub; } }, { key: 'logout', value: function logout(params, cb) { this._publishAlinkMessage({ params: params, pubTopic: this.model.LOGOUT_TOPIC }, cb); } /* * 网关动态注册子设备 "params": [ { "deviceName": "deviceName1234", "productKey": "1234556554" } ] */ }, { key: 'regiestSubDevice', value: function regiestSubDevice(data, cb) { var params = void 0; if (data instanceof Array) { params = data; } else if (data instanceof Object) { params = [data]; } this._publishAlinkMessage({ method: this.model.SUBDEVICE_REGISTER_METHOD, params: params, pubTopic: this.model.SUBDEVICE_REGISTER_TOPIC }, cb); } // 内部方法,创建一个子设备 }, { key: '_careteSubDevice', value: function _careteSubDevice(device) { var subDevice = new Device(device); subDevice._type = "subdevice"; subDevice._parent = this; //子设备标识 subDevice._isSubdevice = true; var subArrayKey = device.productKey + '&' + device.deviceName; // 初始化subdevices数组 if (this._subDevices == undefined) { this._subDevices = {}; } //保存子设备 if (this._getSubDevice(device) == undefined) { this._subDevices.subArrayKey = subDevice; } return subDevice; } // 找到子设备 }, { key: '_getSubDevice', value: function _getSubDevice(device) { var subArrayKey = device.productKey + '&' + device.deviceName; if (this._subDevices == undefined) return; return this._subDevices.subArrayKey; } }]); return Gateway; }(Device); module.exports = Gateway;