|
@@ -21,16 +21,25 @@ package com.iohao.mmo.common.core.flow;
|
|
|
import com.iohao.game.action.skeleton.core.CmdInfo;
|
|
|
import com.iohao.game.action.skeleton.core.commumication.BroadcastContext;
|
|
|
import com.iohao.game.action.skeleton.core.commumication.BrokerClientContext;
|
|
|
+import com.iohao.game.action.skeleton.core.commumication.InvokeExternalModuleContext;
|
|
|
import com.iohao.game.action.skeleton.core.flow.FlowContext;
|
|
|
import com.iohao.game.action.skeleton.core.flow.attr.FlowAttr;
|
|
|
import com.iohao.game.action.skeleton.protocol.HeadMetadata;
|
|
|
import com.iohao.game.action.skeleton.protocol.RequestMessage;
|
|
|
import com.iohao.game.action.skeleton.protocol.ResponseMessage;
|
|
|
+import com.iohao.game.action.skeleton.protocol.external.RequestCollectExternalMessage;
|
|
|
+import com.iohao.game.action.skeleton.protocol.external.ResponseCollectExternalMessage;
|
|
|
import com.iohao.game.common.kit.ArrayKit;
|
|
|
|
|
|
+import java.io.Serializable;
|
|
|
import java.util.Objects;
|
|
|
|
|
|
/**
|
|
|
+ * 自定义 FlowContext
|
|
|
+ * <pre>
|
|
|
+ *
|
|
|
+ * </pre>
|
|
|
+ *
|
|
|
* @author 渔民小镇
|
|
|
* @date 2023-07-24
|
|
|
*/
|
|
@@ -80,10 +89,28 @@ public class MyFlowContext extends FlowContext {
|
|
|
broadcastContext.broadcast(responseMessage, getUserId());
|
|
|
}
|
|
|
|
|
|
+ public ResponseCollectExternalMessage invokeExternal(Serializable data, int bizCode) {
|
|
|
+ HeadMetadata headMetadata = getHeadMetadata();
|
|
|
+ // 得到游戏对外服 id
|
|
|
+ int sourceClientId = headMetadata.getSourceClientId();
|
|
|
+
|
|
|
+ var requestCollectExternalMessage = new RequestCollectExternalMessage()
|
|
|
+ // 根据业务码,调用游戏对外服与业务码对应的业务实现类 (AttachmentDataExternalBizRegion)
|
|
|
+ .setBizCode(bizCode)
|
|
|
+ // 元信息
|
|
|
+ .setData(data)
|
|
|
+ // 指定游戏对外服
|
|
|
+ .setSourceClientId(sourceClientId);
|
|
|
+
|
|
|
+ BrokerClientContext brokerClientContext = this.option(FlowAttr.brokerClientContext);
|
|
|
+ InvokeExternalModuleContext context = brokerClientContext.getInvokeExternalModuleContext();
|
|
|
+ return context.invokeExternalModuleCollectMessage(requestCollectExternalMessage);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
protected RequestMessage createRequestMessage(CmdInfo cmdInfo, Object data) {
|
|
|
|
|
|
- HeadMetadata headMetadata = getRequest().getHeadMetadata();
|
|
|
+ HeadMetadata headMetadata = getHeadMetadata();
|
|
|
|
|
|
RequestMessage requestMessage = super.createRequestMessage(cmdInfo, data);
|
|
|
|
|
@@ -95,11 +122,8 @@ public class MyFlowContext extends FlowContext {
|
|
|
return requestMessage;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
private ResponseMessage createResponseMessage(CmdInfo cmdInfo, Object data) {
|
|
|
- // 创建一个响应对象
|
|
|
- RequestMessage request = this.getRequest();
|
|
|
- HeadMetadata headMetadata = request.getHeadMetadata();
|
|
|
+ HeadMetadata headMetadata = getHeadMetadata();
|
|
|
/*
|
|
|
* 创建一个 HeadMetadata,并使用原有的一些信息;
|
|
|
* 在广播时,只会给 HeadMetadata 中指定的游戏对外服广播。
|
|
@@ -110,6 +134,7 @@ public class MyFlowContext extends FlowContext {
|
|
|
.setEndPointClientId(headMetadata.getEndPointClientId())
|
|
|
.setSourceClientId(headMetadata.getSourceClientId());
|
|
|
|
|
|
+ // 创建一个响应对象
|
|
|
ResponseMessage responseMessage = new ResponseMessage();
|
|
|
responseMessage.setHeadMetadata(headMetadataClone);
|
|
|
responseMessage.setData(data);
|
|
@@ -117,4 +142,7 @@ public class MyFlowContext extends FlowContext {
|
|
|
return responseMessage;
|
|
|
}
|
|
|
|
|
|
-}
|
|
|
+ private HeadMetadata getHeadMetadata() {
|
|
|
+ return this.getRequest().getHeadMetadata();
|
|
|
+ }
|
|
|
+}
|