Esempio n. 1
0
 private void button1_Click(object sender, EventArgs e)
 {
     if (Device != null && Device.paras.Count <= 0)
     {
         Device = null;
     }
     this.DialogResult = DialogResult.Cancel;
 }
Esempio n. 2
0
 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();
 }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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();
                }
            }
        }
Esempio n. 5
0
        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;
                }
            }
        }