Exemple #1
0
        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnMessageRecv(object sender, CMQTT.CMessageArgs e)
        {
            try
            {
                if (!_recieveTopics.ContainsKey(e.topic))
                {
                    OnMessageArgs.OnEvented(new CCMessageArgs(e.idNo, e.name, e.topic, e.message, true, "主题不存在"));
                    return;
                }

                EMessageType msgType = _recieveTopics[e.topic];

                switch (msgType)
                {
                case EMessageType.广播指令:      //请求指示
                    CMessage <CData_Cmd> cmd_RPT = CJSon.Deserialize <CMessage <CData_Cmd> >(e.message);
                    OnRPTCmdArgs.OnEvented(new CCmdArgs(e.topic, e.message, cmd_RPT));
                    break;

                case EMessageType.应答指令:      //应答指令
                    CMessage <CData_Cmd> cmd_REQ = CJSon.Deserialize <CMessage <CData_Cmd> >(e.message);
                    OnREQCmdArgs.OnEvented(new CCmdArgs(e.topic, e.message, cmd_REQ));
                    break;

                case EMessageType.状态消息:
                    CMessage <CData_Status> status_data = CJSon.Deserialize <CMessage <CData_Status> >(e.message);
                    OnStatusArgs.OnEvented(new CStatusArgs(e.topic, e.message, status_data));
                    break;

                case EMessageType.报警消息:
                    break;

                case EMessageType.抽样消息:
                    break;

                default:
                    break;
                }

                OnMessageArgs.OnEvented(new CCMessageArgs(e.idNo, e.name, e.topic, e.message, false, msgType.ToString()));
            }
            catch (Exception ex)
            {
                OnMessageArgs.OnEvented(new CCMessageArgs(e.idNo, e.name, e.topic, e.message, true, ex.ToString()));
            }
        }
Exemple #2
0
        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnMessageRecv(object sender, CMQTT.CMessageArgs e)
        {
            try
            {
                if (!_recieveTopics.ContainsKey(e.topic))
                {
                    OnMessageArgs.OnEvented(new CCMessageArgs(e.idNo, e.name, e.topic, e.message, true, "主题不存在"));
                    return;
                }

                CMessage <CData_Cmd> message = CJSon.Deserialize <CMessage <CData_Cmd> >(e.message);

                EMessageType msgType = _recieveTopics[e.topic];

                //解析设备编号

                List <CData_Cmd> data = new List <CData_Cmd>();

                for (int i = 0; i < message.Data.Count; i++)
                {
                    if (message.Data[i].ID == "-1")  //广播设备编号
                    {
                        for (int z = 0; z < _devices.Count; z++)
                        {
                            data.Add(new CData_Cmd()
                            {
                                ID      = _devices[i].idNo,
                                Name    = _devices[i].Name,
                                CmdName = message.Data[i].CmdName,
                                CmdType = message.Data[i].CmdType,
                                CmdInfo = message.Data[i].CmdInfo,
                                Remark1 = message.Data[i].Remark1,
                                Remark2 = message.Data[i].Remark2
                            });
                        }
                        break;
                    }
                    else if (IsDeviceId(message.Data[i].ID))  //指定设备编号
                    {
                        data.Add(new CData_Cmd()
                        {
                            ID      = _devices[i].idNo,
                            Name    = _devices[i].Name,
                            CmdName = message.Data[i].CmdName,
                            CmdType = message.Data[i].CmdType,
                            CmdInfo = message.Data[i].CmdInfo,
                            Remark1 = message.Data[i].Remark1,
                            Remark2 = message.Data[i].Remark2
                        });
                    }
                }

                if (data.Count == 0)
                {
                    OnMessageArgs.OnEvented(new CCMessageArgs(e.idNo, e.name, e.topic, e.message, false, "NULL"));
                    return;
                }

                CMessage <CData_Cmd> data_cmd = new CMessage <CData_Cmd>();

                data_cmd.Header = message.Header;

                data_cmd.Data = data;

                string msg = CJSon.Serializer <List <CData_Cmd> >(data);

                if (msgType == EMessageType.广播指令)  //接收主控端指令指示
                {
                    OnCmdRPTArgs.OnEvented(new CCmdArgs(e.topic, msg, data_cmd));
                }
                else if (msgType == EMessageType.应答指令)  //接收主端控制指令
                {
                    OnCmdREQArgs.OnEvented(new CCmdArgs(e.topic, msg, data_cmd));
                }

                OnMessageArgs.OnEvented(new CCMessageArgs(e.idNo, e.name, e.topic, e.message, false, msgType.ToString()));
            }
            catch (Exception ex)
            {
                OnMessageArgs.OnEvented(new CCMessageArgs(e.idNo, e.name, e.topic, e.message, true, ex.ToString()));
            }
        }