中央热水项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.6 KiB

package com.mh.user.constants;
import java.util.Arrays;
import java.util.regex.Pattern;
import static com.mh.user.constants.TopicConst.*;
/**
* @author ljf
* @version 1.0
* @description: TODO
* @date 2024/11/06 14:28
*/
public enum TopicEnum {
/**
* 客户端主动上报数据
*/
CLIENT_UPLOAD_DATA(Pattern.compile("^" + MH_UPLOAD + EVENTS_UPLOAD + REGEX_SN + "$"), ChannelName.EVENTS_UPLOAD_INBOUND),
/**
* 服务端采集数据
*/
SERVER_COLLECTION_DATA(Pattern.compile("^" + MH_COLLECTION + EVENTS_COLLECTION + REGEX_SN + "$"), ChannelName.EVENTS_COLLECTION_INBOUND),
/**
* 服务端控制指令
*/
SERVER_CONTROL_DATA(Pattern.compile("^" + MH_CONTROL + EVENTS_CONTROL + REGEX_SN + "$"), ChannelName.EVENTS_CONTROL_INBOUND),
/**
* 订阅服务端发送的主题命令
*/
SERVER_SEND_DATA(Pattern.compile("^A/cmd/ctl/send" + "$"), ChannelName.EVENTS_SEND_INBOUND),
UNKNOWN(Pattern.compile("^.*$"), ChannelName.DEFAULT_BOUND);
final Pattern pattern;
final String beanName;
TopicEnum(Pattern pattern, String beanName) {
this.pattern = pattern;
this.beanName = beanName;
}
public Pattern getPattern() {
return pattern;
}
public String getBeanName() {
return beanName;
}
public static TopicEnum find(String proName, String topic) {
// 去掉第一个"/"以及之前数据
String finalTopic = topic.replaceFirst("^"+proName, "");;
return Arrays.stream(TopicEnum.values()).filter(topicEnum -> topicEnum.pattern.matcher(finalTopic).matches()).findAny().orElse(UNKNOWN);
}
}