|
|
@@ -1,16 +1,11 @@
|
|
|
package com.xunmei.mediator.websocket.dto;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
-import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.xunmei.mediator.websocket.constant.WebSocketConstants;
|
|
|
-import com.xunmei.mediator.websocket.enums.TopicTypeEnums;
|
|
|
-import io.netty.util.internal.StringUtil;
|
|
|
import lombok.Data;
|
|
|
import lombok.NoArgsConstructor;
|
|
|
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
/**
|
|
|
* @author jingyuanchao
|
|
|
* @date 2024/7/18 16:56
|
|
|
@@ -24,47 +19,34 @@ public class WebsocketPayloadResolve {
|
|
|
private Object data;
|
|
|
|
|
|
|
|
|
- public WebsocketPayloadResolve(WebsocketResult result, TopicTypeEnums typeEnums) {
|
|
|
- boolean productEquals = WebSocketConstants.IOT_SERVER.equals(typeEnums.getProductName());
|
|
|
- boolean deviceEquals = WebSocketConstants.IOT_SERVER_DEVICE.equals(typeEnums.getDeviceName());
|
|
|
-
|
|
|
- if (productEquals && deviceEquals) {
|
|
|
+ public WebsocketPayloadResolve(WebsocketResult result) {
|
|
|
+ JSONObject parentPayload = (JSONObject) result.getPayload();
|
|
|
+ String serviceName = (String) parentPayload.get(WebSocketConstants.SERVICE);
|
|
|
+ if (WebSocketConstants.UP_LINK_SERVICE_PASS_THROUGH.equals(serviceName) ||
|
|
|
+ WebSocketConstants.DOWN_LINK_SERVICE_PASS_THROUGH.equals(serviceName)) {
|
|
|
// 说明是透穿的
|
|
|
- JSONObject jsb = (JSONObject) result.getPayload();
|
|
|
- JSONObject payloadObj = (JSONObject) jsb.get(WebSocketConstants.ARGS);
|
|
|
- WebsocketResult javaObject = payloadObj.toJavaObject(WebsocketResult.class);
|
|
|
- if (javaObject.getPayload() instanceof JSONObject) {
|
|
|
- processJSONObjectPayload(result.getPayload());
|
|
|
- } else if (javaObject.getPayload() instanceof JSONArray) {
|
|
|
- processJSONArrayPayload(result.getPayload());
|
|
|
+ JSONObject payloadObj = (JSONObject) parentPayload.get(WebSocketConstants.ARGS);
|
|
|
+ WebsocketResult childResult = payloadObj.toJavaObject(WebsocketResult.class);
|
|
|
+ JSONObject childValue = (JSONObject) childResult.getPayload();
|
|
|
+ Object object = childValue.get(WebSocketConstants.ARGS);
|
|
|
+ if (object instanceof JSONObject) {
|
|
|
+ JSONObject object1 = (JSONObject) object;
|
|
|
+ String event = (String) childValue.get(WebSocketConstants.EVENT);
|
|
|
+ String service = (String) childValue.get(WebSocketConstants.SERVICE);
|
|
|
+ JSONObject header = (JSONObject) object1.get(WebSocketConstants.HEADER);
|
|
|
+ String routingKey = ObjectUtil.isNotEmpty(event) ? event : service;
|
|
|
+ this.routingKey = routingKey;
|
|
|
+ this.header = header;
|
|
|
+ this.data = object1;
|
|
|
}
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (result.getPayload() instanceof JSONObject) {
|
|
|
- processJSONObjectPayload(result.getPayload());
|
|
|
- } else if (result.getPayload() instanceof JSONArray) {
|
|
|
- processJSONArrayPayload(result.getPayload());
|
|
|
+ } else {
|
|
|
+ String event = (String) parentPayload.get(WebSocketConstants.EVENT);
|
|
|
+ String service = (String) parentPayload.get(WebSocketConstants.SERVICE);
|
|
|
+ JSONObject header = (JSONObject) parentPayload.get(WebSocketConstants.HEADER);
|
|
|
+ String routingKey = ObjectUtil.isNotEmpty(event) ? event : service;
|
|
|
+ this.routingKey = routingKey;
|
|
|
+ this.header = header;
|
|
|
+ this.data = parentPayload.get(WebSocketConstants.ARGS);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- private void processJSONObjectPayload(Object payload) {
|
|
|
- Map map = ((JSONObject) payload).toJavaObject(Map.class);
|
|
|
- // 上报事件
|
|
|
- String event = (String) map.get(WebSocketConstants.EVENT);
|
|
|
- String service = (String) map.get(WebSocketConstants.SERVICE);
|
|
|
- JSONObject header = (JSONObject) map.get(WebSocketConstants.HEADER);
|
|
|
- String routingKey = ObjectUtil.isNotEmpty(event) ? event : service;
|
|
|
- JSONObject args = (JSONObject) (ObjectUtil.isNotEmpty(map.get(WebSocketConstants.DATA)) ? map.get(WebSocketConstants.DATA) : map.get(WebSocketConstants.ARGS));
|
|
|
- this.routingKey = routingKey;
|
|
|
- this.header = header;
|
|
|
- this.data = args;
|
|
|
- }
|
|
|
-
|
|
|
- private void processJSONArrayPayload(Object payload) {
|
|
|
- final JSONArray jsonArray = (JSONArray) payload;
|
|
|
- this.routingKey = StringUtil.EMPTY_STRING;
|
|
|
- this.header = new JSONObject();
|
|
|
- this.data = jsonArray;
|
|
|
- }
|
|
|
}
|