/// <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())); } }
public CCmdArgs(string topic, string message, CMessage <CData_Cmd> data) { this.topic = topic; this.message = message; this.data = data; }