package com.dy.common.mw.protocol4Mqtt;
|
|
import com.dy.common.mw.protocol.Command;
|
import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
|
import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolParserSdV1;
|
import org.eclipse.paho.client.mqttv3.MqttMessage;
|
|
/**
|
* @Author: liurunyu
|
* @Date: 2025/6/5 10:00
|
* @Description
|
*/
|
public class MqttMsgParser {
|
public MqttSubMsg parseSubMsg(String topic, MqttMessage mqttMsg) throws Exception {
|
if(topic != null && topic.trim().length() != 0){
|
String[] topicGrp = topic.split("/") ;
|
if(topicGrp.length != 4){
|
throw new Exception("接收的mqtt消息主题不可识别") ;
|
}else{
|
if(topicGrp[1].equals("sd1")){
|
//山东设备(协议),且版本号为1
|
return new ProtocolParserSdV1().parseSubMsg(topicGrp[2], topic, mqttMsg);
|
}else{
|
throw new Exception("接收的mqtt消息主题中协议(厂家及版本)不可识别") ;
|
}
|
}
|
}else{
|
throw new Exception("接收的mqtt消息主题为空") ;
|
}
|
}
|
|
public MqttPubMsg createPubMsg(String orgTag, Command com) throws Exception {
|
if(com.protocol == null && com.protocol.trim().length() != 0){
|
throw new Exception("接收到MQTT命令,但未提供协议") ;
|
}
|
if(com.protocolVersion == null){
|
throw new Exception("接收到MQTT命令,但未提供协议版本号") ;
|
}
|
if(com.code != null && com.code.trim().length() != 0){
|
throw new Exception("接收到MQTT命令,但未提供功能码") ;
|
}
|
if(com.protocol.equals(ProtocolConstantSdV1.protocolName)){
|
if(com.protocolVersion.shortValue() == ProtocolConstantSdV1.protocolVer){
|
return new ProtocolParserSdV1().createPubMsg(orgTag, com) ;
|
}else{
|
throw new Exception("接收到MQTT命令,协议" + com.protocol + "版本" + com.protocolVersion + "构造器未实现") ;
|
}
|
}else{
|
throw new Exception("接收到MQTT命令,协议" + com.protocol + "构造器未实现") ;
|
}
|
}
|
|
|
public static void main(String[] args) {
|
String s = "ym/sd1/10000/control/m1" ;
|
String[] ss = s.split("/") ;
|
for (String s1 : ss) {
|
System.out.println(s1);
|
}
|
}
|
}
|