|
|
@@ -3,6 +3,7 @@ package com.xunmei.mediator.websocket.utils;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
import com.xunmei.mediator.websocket.dto.WebSocketMessageDto;
|
|
|
+import com.xunmei.mediator.websocket.dto.WebsocketUrlInfo;
|
|
|
import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
|
|
|
import lombok.AccessLevel;
|
|
|
import lombok.NoArgsConstructor;
|
|
|
@@ -16,6 +17,8 @@ import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.function.Consumer;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
import static com.xunmei.mediator.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC;
|
|
|
|
|
|
@@ -126,4 +129,28 @@ public class WebSocketUtils {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析websocket topic 路径参数
|
|
|
+ * @param url
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static WebsocketUrlInfo resolveUrlInfo(String url) {
|
|
|
+ // 正则表达式模式
|
|
|
+ Pattern pattern = Pattern.compile("^/things/(\\w+)/(\\w+)/service/invoke$");
|
|
|
+ // 创建Matcher对象
|
|
|
+ Matcher matcher = pattern.matcher(url);
|
|
|
+ // 检查是否匹配成功
|
|
|
+ if (matcher.find()) {
|
|
|
+ // 提取动态参数
|
|
|
+ String productName = matcher.group(1);
|
|
|
+ String deviceName = matcher.group(2);
|
|
|
+ WebsocketUrlInfo websocketUrlInfo = new WebsocketUrlInfo();
|
|
|
+ websocketUrlInfo.setDeviceName(deviceName);
|
|
|
+ websocketUrlInfo.setProductName(productName);
|
|
|
+ return websocketUrlInfo;
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|