Exemplo n.º 1
0
 /// <summary>
 /// 启动设备的MQTT监听服务
 /// </summary>
 /// <param name="item"></param>
 public static void StartUpDeviceService(RetDeviceInfo item)
 {
     // 物接入
     if (item.ConnectType == "0")
     {
         //判断物接入的方式
         IoTHubConfigurationModel model = new IoTHubConfigurationModel();
         model.ID = long.Parse(item.IoTHubID);
         DeviceMonitoringApi deviceApi = new DeviceMonitoringApi();
         var conf = deviceApi.GetIoTHubConnection(model);
         if (conf.Code == -1)
         {
             //throw new Exception("获取IoTHub连接信息失败" + conf.Msg);
             log.Error("获取IoTHub连接信息失败" + conf.Msg + " ;model ID" + model.ID);
             return;
         }
         RetIoTHubConfiguration connectInfo = (RetIoTHubConfiguration)conf.Data;
         long ioTHubID = long.Parse(item.IoTHubID);
         //====================
         //=====直接接入=======
         //====================
         if (connectInfo.Type == "1")
         {
             try
             {
                 MqttClientService service = MqttServiceContainer.Instance.GetMqttServiceByConnectID(ioTHubID);
                 //订阅该设备下的相关属性TOPIC
                 BatchSubMessage(item, service);
                 log.InfoFormat("[MQTT] Device: {0},Service Enable.", item.Name);
             }
             catch (Exception e)
             {
                 log.Error("获取MQTT Client出错:" + e.Message, e);
             }
         }
         //==========================
         //==研华网关的设备直连方式==
         //==========================
         else if (connectInfo.Type == "3")
         {
             try
             {
                 MqttClientService service = MqttServiceContainer.Instance.GetMqttServiceByConnectID(ioTHubID);
                 //订阅该设备下的相关属性TOPIC
                 //todo: 暂时使用remark字段存储订阅的topic
                 service.SubscribeMessage(item.Remark);
                 log.InfoFormat("[MQTT] Device: {0},Service Enable.", item.Name);
             }
             catch (Exception e)
             {
                 log.Error("获取MQTT Client出错:" + e.Message, e);
             }
         }
     }
 }
Exemplo n.º 2
0
        public RetIoTHubConfiguration GetConnectInfoById(string ioTHubID)
        {
            IoTHubConfigurationModel model = new IoTHubConfigurationModel();

            model.ID = long.Parse(ioTHubID);
            DeviceMonitoringApi deviceApi = new DeviceMonitoringApi();
            var conf = deviceApi.GetIoTHubConnection(model);

            if (conf.Code == -1)
            {
                //throw new Exception("获取IoTHub连接信息失败" + conf.Msg);
                log.Error("获取IoTHub连接信息失败" + conf.Msg + " ;model ID" + model.ID);
                return(null);
            }
            RetIoTHubConfiguration connectInfo = (RetIoTHubConfiguration)conf.Data;

            return(connectInfo);
        }
        /// <summary>
        /// 根据物接入ID获取一个新的client serivce
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private MqttClientService GetNewMqttServiceByConnectID(long id)
        {
            DeviceMonitoringApi      deviceApi = new DeviceMonitoringApi();
            IoTHubConfigurationModel model     = new IoTHubConfigurationModel();

            model.ID = id;
            var conf = deviceApi.GetIoTHubConnection(model);

            if (conf.Code == -1)
            {
                throw new Exception("获取IoTHub连接信息失败" + conf.Msg);
            }
            RetIoTHubConfiguration connectInfo = (RetIoTHubConfiguration)conf.Data;

            string[] ipPort = connectInfo.Url.Replace("http://", "").Replace("HTTP://", "").Split(':');
            string   ip     = ipPort[0];
            int      port;

            try
            {
                port = ipPort.Count() > 1 ? Int32.Parse(ipPort[1].Replace("/", "")) : 1883; //1883是MQTT Server默认端口
            }
            catch (Exception)
            {
                log.Error("[MQTT]获取mqtt server端口号失败: " + connectInfo.Url);
                throw new Exception("[MQTT]获取mqtt server端口号失败");
            }
            MqttClientService mqttService = new MqttClientService(ip, port, connectInfo.UserName, connectInfo.Password);

            mqttService.OnMqttConnectNotify += MqttService_OnMqttConnectNotify;
            if (connectInfo.Type == "1")//直连
            {
                mqttService.OnMqttMessageNotify += MqttService_OnMqttMessageNotify;
            }
            else if (connectInfo.Type == "3")
            {
                // 研华网关的接入方式
                mqttService.OnMqttMessageNotify += MqttService_OnYanhuaMessageNotify;
            }
            mqttService.Connect();
            container.Add(id, mqttService);
            return(mqttService);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 禁用设备的处理
        /// </summary>
        /// <param name="id"></param>
        public void DisableDeivce(long deviceId)
        {
            DeviceMonitoringApi    deviceMonitoringApi = new DeviceMonitoringApi();
            GetDeviceInfoParameter par = new GetDeviceInfoParameter();

            par.ID = deviceId.ToString();
            RetDeviceInfo deviceInfo    = null;
            var           resDeviceInfo = deviceMonitoringApi.GetDeviceInfo(par);

            if (resDeviceInfo.Code != -1)
            {
                deviceInfo = resDeviceInfo.Data;
                if (MqttServiceContainer.Instance.IsClientExist(long.Parse(deviceInfo.IoTHubID)))
                {
                    RetIoTHubConfiguration connectInfo = GetConnectInfoById(deviceInfo.IoTHubID);
                    if (null != connectInfo)
                    {
                        if (connectInfo.Type == "1")
                        {
                            //设备直连,删除Topics
                            BatchUnsubMessage(deviceInfo, MqttServiceContainer.Instance.GetMqttServiceByConnectID(long.Parse(deviceInfo.IoTHubID)));
                        }
                        else if (connectInfo.Type == "3")
                        {
                            //研华网关,删除remark中的topic
                            MqttServiceContainer.Instance.GetMqttServiceByConnectID(long.Parse(deviceInfo.IoTHubID)).UnsubscribeMessage(deviceInfo.Remark);
                        }
                    }

                    log.InfoFormat("[MQTT] Device {0},Service Disable.", deviceInfo.Name);
                }
            }
            else
            {
                log.Error("获取设备信息出错:" + resDeviceInfo.Msg);
                return;
            }
        }