public MqttClientService GetMqttServiceByConnectID(long id) { /* * 查询容器中是否已经有客户端 * 如果存在,检查该客户端连接是否生效。 * 1.生效,返回该客户端 * 2.失效,移除该客户端,获取一个新的客户端,放到容器中,并返回客户端 */ if (container.ContainsKey(id)) { MqttClientService service = container[id]; if (service.mqttClient.IsConnected) { return(service); } else { container.Remove(id); return(GetNewMqttServiceByConnectID(id)); } } else { return(GetNewMqttServiceByConnectID(id)); } }
public void TestMethodRouting() { var client = new Mock <IMqttClient>(); client.Setup(client => client.SubscribeAsync(It.IsAny <MqttClientSubscribeOptions>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(new MqttClientSubscribeResult() { Items = { new MqttClientSubscribeResultItem(new TopicFilter(), MqttClientSubscribeResultCode.GrantedQoS0) } })); var mqtt = new MqttClientService("qwerty", client.Object); bool didCall = false; mqtt.Subscribe("a/b/c", (MqttClientService.NotificationMessage message) => { didCall = true; return(null); }).Wait(); var payload = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(new[] { "test" })); mqtt.HandleApplicationMessageReceivedAsync(new MqttApplicationMessageReceivedEventArgs("qwerty", new MqttApplicationMessage() { Payload = payload, Topic = "a/b/c" })).Wait(); Assert.That(didCall); }
public ConnectionPageViewModel(MqttClientService mqttClientService) { _mqttClientService = mqttClientService; var timer = new DispatcherTimer(TimeSpan.FromSeconds(0.5), DispatcherPriority.Normal, TimerCallback); timer.Start(); }
public PublishPageViewModel(MqttClientService mqttClientService) { _mqttClientService = mqttClientService ?? throw new ArgumentNullException(nameof(mqttClientService)); // Make sure that we start with at least one item. AddItem(); SelectedItem = Items.FirstOrDefault(); }
/// <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); } } } }
/// <summary> /// mqtt订阅; /// 一般不会使用 /// </summary> /// <param name="Topic"></param> /// <param name="ClientId"></param> /// <returns></returns> public JsonResult Client(string Topic = "", string ClientId = "") { if (string.IsNullOrEmpty(Topic) || string.IsNullOrEmpty(ClientId)) { return(Json(new { status = StatusCode.FAIL, message = "订阅失败" }, JsonRequestBehavior.AllowGet)); } var res = new MqttClientService(Topic, ClientId); bool session = res.SubscribeClient.CleanSession; bool Isconnected = res.SubscribeClient.IsConnected; return(Json(new { status = Isconnected ? StatusCode.SUCCESS : StatusCode.FAIL, message = Isconnected ? "订阅成功" : "订阅失败" }, JsonRequestBehavior.AllowGet)); }
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices(async(hostContext, services) => { var mqtt = MqttClientService.Create(deviceId: RadioService.DEVICE_ID); mqtt.Connect("localhost").Wait(); services.AddSingleton(mqtt); services.AddSingleton(Pi.Gpio); services.AddHostedService <RadioService>(); services.AddSingleton <CapabilityService>(); services.AddSingleton <InternalNodeHubApi>(); });
/// <summary> /// 批量取消订阅 /// </summary> /// <param name="deviceInfo"></param> /// <param name="service"></param> private static void BatchUnsubMessage(RetDeviceInfo deviceInfo, MqttClientService service) { List <string> toSubList = new List <string>(); if (null != deviceInfo.DeviceItems && deviceInfo.DeviceItems.Count > 0) { foreach (var deviceItem in deviceInfo.DeviceItems) { toSubList.Add(deviceInfo.DeviceLabel + "/" + deviceItem.PropertyLabel); } } service.batchUnsubscribeMaessage(toSubList); }
/// <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); }
public void TestSubscribe() { var client = new Mock <IMqttClient>(); client.Setup(client => client.SubscribeAsync(It.IsAny <MqttClientSubscribeOptions>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(new MqttClientSubscribeResult() { Items = { new MqttClientSubscribeResultItem(new TopicFilter(), MqttClientSubscribeResultCode.GrantedQoS0) } })); var mqtt = new MqttClientService("qwerty", client.Object); mqtt.Subscribe("a/b/c", (MqttClientService.NotificationMessage message) => { return(null); }); client.Verify(client => client.SubscribeAsync(It.IsAny <MqttClientSubscribeOptions>(), It.IsAny <CancellationToken>())); }
public void TestParameterSpreadTooManyArguments() { var client = new Mock <IMqttClient>(); client.Setup(client => client.SubscribeAsync(It.IsAny <MqttClientSubscribeOptions>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(new MqttClientSubscribeResult() { Items = { new MqttClientSubscribeResultItem(new TopicFilter(), MqttClientSubscribeResultCode.GrantedQoS0) } })); var mqtt = new MqttClientService("qwerty", client.Object); var mock = new Mock <IMockCapability>(); mock.Setup(cap => cap.MethodB(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())); var methodInfo = typeof(IMockCapability).GetMethod(nameof(IMockCapability.MethodB)); Assume.That(methodInfo, Is.Not.Null); mqtt.Subscribe("a/b/c", methodInfo, mock.Object).Wait(); var payload = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(new object[] { "test", "test", "42", "testytest" })); mqtt.HandleApplicationMessageReceivedAsync(new MqttApplicationMessageReceivedEventArgs("qwerty", new MqttApplicationMessage() { Payload = payload, Topic = "a/b/c" })).Wait(); mock.Verify(cap => cap.MethodB(It.Is <string>(s => s == "test"), It.Is <string>(s => s == "test"), It.Is <int>(s => s == 42))); }
/// <summary> /// mqtt发布消息; /// 连接-订阅-发布 /// </summary> /// <param name="Topic"></param> /// <param name="message"></param> /// <param name="ClientId"></param> /// <returns></returns> public JsonResult Publish(string Topic = "", string message = "", string ClientId = "") { if (string.IsNullOrEmpty(Topic) || string.IsNullOrEmpty(message) || string.IsNullOrEmpty(ClientId)) { return(Json(new { status = StatusCode.FAIL, message = "发布失败" }, JsonRequestBehavior.AllowGet)); } else { try { var res = new MqttClientService(Topic, ClientId); res.Client_MqttMsgPublish(Topic, message); return(Json(new { status = StatusCode.SUCCESS, message = "发布成功" }, JsonRequestBehavior.AllowGet)); } catch (Exception) { return(Json(new { status = StatusCode.FAIL, message = "发布失败" }, JsonRequestBehavior.AllowGet)); throw; } } }
public UserController(UserService userService, ClientUserRepository clientUserRepository, MqttClientService clientService) { this.userService = userService; this.clientUserRepository = clientUserRepository; this.clientService = clientService; }
public ClientController(ClientUserRepository clientUser, MqttClientService service) { this.clientUser = clientUser; this.service = service; }
public ClientServiceProvider(MqttClientService mqttClientService) { MqttClientService = mqttClientService; }
public PacketInspectorPageViewModel(MqttClientService mqttClientService) { mqttClientService.RegisterMessageInspectorHandler(ProcessPacket); }
public DeviceController(DeviceRepository deviceRepository, ClientUserRepository clientUserRepository, MqttClientService clientService) { this.deviceRepository = deviceRepository; this.clientUserRepository = clientUserRepository; this.clientService = clientService; }
public SubscriptionsPageViewModel(MqttClientService mqttClientService) { _mqttClientService = mqttClientService ?? throw new ArgumentNullException(nameof(mqttClientService)); mqttClientService.ApplicationMessageReceived += HandleApplicationMessageReceivedAsync; }
public SubscriptionEditorViewModel(MqttClientService mqttClientService) { _mqttClientService = mqttClientService ?? throw new ArgumentNullException(nameof(mqttClientService)); ActivePage = ConfigurationPage; }
public ToiletHub(MqttClientService provider) { _mqttClient = provider.mqttClient; }
public AwakeUpDeviceJob(MqttClientService mqttClientService, IPointRepository pointRepository) { _mqttClientService = mqttClientService; _pointRepository = pointRepository; }