/// <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())); } }
/// <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())); } }