提交 56d280bc 编写于 作者: 浅梦2013's avatar 浅梦2013

共享订阅更好的兼容 emqx 高版本,gitee #I786GU

上级 063e3138
......@@ -42,10 +42,6 @@ public enum TopicFilterType {
@Override
public boolean match(String topicFilter, String topicName) {
int prefixLen = TopicFilterType.SHARE_QUEUE_PREFIX.length();
// 匹配 topicName / 前缀
if (startsWithSlash(topicName)) {
prefixLen = prefixLen - 1;
}
return TopicUtil.match(topicFilter.substring(prefixLen), topicName);
}
},
......@@ -57,7 +53,7 @@ public enum TopicFilterType {
@Override
public boolean match(String topicFilter, String topicName) {
// 去除前缀 $share/<group-name>/ ,匹配 topicName / 前缀
int prefixLen = TopicFilterType.findShareTopicIndex(topicFilter, startsWithSlash(topicName));
int prefixLen = TopicFilterType.findShareTopicIndex(topicFilter);
return TopicUtil.match(topicFilter.substring(prefixLen), topicName);
}
};
......@@ -111,19 +107,16 @@ public enum TopicFilterType {
throw new IllegalArgumentException("Share subscription topicFilter: " + topicFilter + " not conform to the $share/<group-name>/xxx");
}
private static int findShareTopicIndex(String topicFilter, boolean startDelimiter) {
private static int findShareTopicIndex(String topicFilter) {
int prefixLength = TopicFilterType.SHARE_GROUP_PREFIX.length();
int topicFilterLength = topicFilter.length();
for (int i = prefixLength; i < topicFilterLength; i++) {
char ch = topicFilter.charAt(i);
if ('/' == ch) {
return startDelimiter ? i : i + 1;
return i + 1;
}
}
throw new IllegalArgumentException("Share subscription topicFilter: " + topicFilter + " not conform to the $share/<group-name>/xxx");
}
private static boolean startsWithSlash(String text) {
return '/' == text.charAt(0);
}
}
......@@ -3,14 +3,40 @@ package net.dreamlu.iot.mqtt.core.common;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
/**
* TopicFilterType 测试
*
* @author L.cm
*/
class TopicFilterTypeTest {
@Test
void test() {
boolean match1 = TopicFilterType.SHARE.match("$share/test/abc", "abc");
Assertions.assertTrue(match1);
boolean match2 = TopicFilterType.SHARE.match("$share/test/abc", "/abc");
Assertions.assertTrue(match2);
void test1() {
String topic1 = "$queue/123";
TopicFilterType type1 = TopicFilterType.getType(topic1);
Assertions.assertEquals(TopicFilterType.QUEUE, type1);
Assertions.assertTrue(type1.match(topic1, "123"));
Assertions.assertFalse(type1.match(topic1, "/123"));
String topic2 = "$share/test/123";
TopicFilterType type2 = TopicFilterType.getType(topic2);
String groupName = TopicFilterType.getShareGroupName(topic2);
Assertions.assertEquals("test", groupName);
Assertions.assertEquals(TopicFilterType.SHARE, type2);
Assertions.assertTrue(type2.match(topic2, "123"));
Assertions.assertFalse(type2.match(topic2, "/123"));
String topic3 = "$queue//123";
TopicFilterType type3 = TopicFilterType.getType(topic3);
Assertions.assertEquals(TopicFilterType.QUEUE, type3);
Assertions.assertFalse(type3.match(topic3, "123"));
Assertions.assertTrue(type3.match(topic3, "/123"));
String topic4 = "$share/test//123";
TopicFilterType type4 = TopicFilterType.getType(topic4);
Assertions.assertEquals(TopicFilterType.SHARE, type4);
Assertions.assertFalse(type4.match(topic4, "123"));
Assertions.assertTrue(type4.match(topic4, "/123"));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册