private void button1_Click(object sender, EventArgs e) { if (Device != null && Device.paras.Count <= 0) { Device = null; } this.DialogResult = DialogResult.Cancel; }
private void AddDevice_Load(object sender, EventArgs e) { if (Device == null) { Device = new CommonMqttJsonObject(); } this.dataGridViewPara.AutoGenerateColumns = false; this.dataGridViewPara.DataSource = Device.paras; this.tbDeviceID.Text = Device.device.uid; this.tbName.Text = Device.device.name; this.tbClientID.Text = Device.device.ClientID; this.tbUpdateCycle.Text = Device.device.UpdateCycle.ToString(); }
private void btAdd_Click(object sender, EventArgs e) { DevicePara form = new DevicePara(); if (form.ShowDialog(this) == DialogResult.OK) { if (Device == null) { Device = new CommonMqttJsonObject(); } Device.paras.Add(form.Pata); this.dataGridViewPara.DataSource = null; this.dataGridViewPara.DataSource = Device.paras; } }
private void btEdit_Click(object sender, EventArgs e) { if (this.dataGridViewPara.SelectedRows.Count <= 0) { return; } DevicePara form = new DevicePara(); form.Pata = (CommonMqttJsonPara)this.dataGridViewPara.SelectedRows[0].DataBoundItem; if (form.ShowDialog(this) == DialogResult.OK) { if (Device == null) { Device = new CommonMqttJsonObject(); } } }
public void CreateMQTTClient() { for (int i = 0; i < MqttClients.Count; i++) { MqttClients[i].DisconnectAsync(); } MqttClients.Clear(); MqttOptions.Clear(); for (int i = 0; i < MqttJson.Devices.Count; i++) { try { string cleintID = MqttJson.Devices[i].device.ClientID; MqttClientOptions option = new MqttClientOptions() { ClientId = cleintID }; option.ChannelOptions = new MqttClientTcpOptions() { Server = this.tbClientIP.Text.Trim(), Port = Convert.ToInt32(this.tbPort.Text.Trim()) }; option.Credentials = new MqttClientCredentials() { Username = this.tbUser.Text.Trim(), Password = this.tbPassword.Text.Trim() }; option.CleanSession = true; option.KeepAlivePeriod = TimeSpan.FromSeconds(float.Parse(tbPeried.Text.Trim())); option.KeepAliveSendInterval = TimeSpan.FromSeconds(20000); MqttOptions.Add(option); IMqttClient MqttClient = new MqttFactory().CreateMqttClient(); ///接收到数据 MqttClient.ApplicationMessageReceived += (sender, args) => { if (args.ClientId == null || args.ClientId == "") { return; } if (args.ApplicationMessage.Payload == null || args.ApplicationMessage.Payload.Length <= 0) { return; } if (args.ApplicationMessage.Topic.Trim() == this.tbDataPassiveTopic.Text.Trim()) { IMqttClient mqttClient = MqttClients.Find(x => x.Options.ClientId == args.ClientId); Task.Run(() => { ///获取当前的json字符串 string json = args.ApplicationMessage.ConvertPayloadToString(); //将json对象转换为c#对象 MQTTPassiveSubTopicObject subTopicObject = ScadaHexByteOperator.JsonToObject <MQTTPassiveSubTopicObject>(json); AddText("服务器请求发布数据"); if (subTopicObject != null) { PublicRealDataJson(mqttClient);//发布一次数据 } }); } else if (args.ApplicationMessage.Topic.Trim() == this.tbUpdateCycleTopic.Text.Trim())//用户上位机读取数据的间隔,是秒 { Task.Run(() => { ///获取当前的json字符串 string json = args.ApplicationMessage.ConvertPayloadToString(); //将json对象转换为c#对象 MQTTPassiveSubTopicObject subTopicObject = ScadaHexByteOperator.JsonToObject <MQTTPassiveSubTopicObject>(json); if (subTopicObject != null) { CommonMqttJsonObject device = MqttJson.Devices.Find(x => x.ClientID == args.ClientId); if (device != null) { AddText("服务器循环周期更新 更新周期" + subTopicObject.updatecycle); } //修改客户端数据查询周期 device.device.UpdateCycle = subTopicObject.updatecycle; } }); } else if (args.ApplicationMessage.Topic.Trim() == this.tbCommandTopic.Text.Trim())//用户上位机下置数据 { //解析数据 AddText("服务器端下置一条数据"); } }; MqttClient.Connected += (sender, args) => { IMqttClient mqttClient = (IMqttClient)sender; AddText("客户端与服务器连接正常"); MqttClient.SubscribeAsync(tbCommandTopic.Text, MqttQualityOfServiceLevel); //服务器端下置命令的主题 if (cbAuto.Checked) //一个被动订阅的主题 { Task.Run(() => { MqttClient.SubscribeAsync(tbUpdateCycleTopic.Text, MqttQualityOfServiceLevel); //服务器端设置了更新数据周期后通知到客户端 MqttClient.SubscribeAsync(tbDataPassiveTopic.Text, MqttQualityOfServiceLevel); //被动订阅循环主题 }); } else//一个被动订阅的主题 { Task.Run(() => { while (true && mqttClient != null) { if (mqttClient.IsConnected) { PublicRealDataJson(mqttClient); } CommonMqttJsonObject device = MqttJson.Devices.Find(x => x.ClientID == mqttClient.Options.ClientId); if (device != null) { Thread.Sleep(device.device.UpdateCycle); } } }); } }; MqttClient.Disconnected += async(sender, args) => { AddText("客户端与服务器断开链接" + (args.Exception != null?args.Exception.Message:"")); }; MqttClients.Add(MqttClient); } catch (Exception emx) { return; } } }