public SubscribeClient(MqttEntity model) { string topic = model.topic; string host = model.host; // 实例化Mqtt客户端 MqttClient client = new MqttClient(host); // 注册接收消息事件 client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; client.Connect(model.groupId + "@@@" + model.clientId, model.userName, model.password); // 订阅主题 "/home/temperature", 订阅质量 QoS 2 client.Subscribe(new string[] { topic }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); }
public MqttClientMain(IMqttService mqttService) { this.mqttService = mqttService; mqttClient = new MqttFactory().CreateMqttClient(); var option = new MqttClientOptionsBuilder() .WithCleanSession(true) .WithClientId("Main client") .WithCommunicationTimeout(TimeSpan.FromSeconds(5)) .WithKeepAlivePeriod(TimeSpan.FromSeconds(5)) .WithProtocolVersion(MqttProtocolVersion.V311) .WithTcpServer("127.0.0.1", Convert.ToInt32(1883)); mqttClient.ConnectAsync(option.Build()); mqttClient.Connected += (sender, e) => { string str = string.Format("Main Client connected"); Console.WriteLine(str); }; mqttClient.Disconnected += (sender, e) => { string str = string.Format("Main Client disconnected"); Console.WriteLine(str); }; mqttClient.ApplicationMessageReceived += (sender, e) => { string result = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload); string str = string.Format("Main Client received message: {0}", result); Console.WriteLine(str); if (e.ApplicationMessage.Topic == "scale") { MqttEntity mqttEntity = JsonConvert.DeserializeObject <MqttEntity>(result); mqttService.UpdateWeightFromScale(mqttEntity); } if (e.ApplicationMessage.Topic.ToLower().Contains("state")) { mqttService.UpdateOpenCabinet(e.ApplicationMessage.Topic.ToLower()); } }; listTopic = new List <string>(); }