接口 InvokeModuleContext

所有已知子接口:
CommunicationAggregationContext
所有已知实现类:
BrokerClientItem

public interface InvokeModuleContext
内部模块通讯上下文,内部模块指的是游戏逻辑服
     单个逻辑服与单个逻辑服通信请求-有响应值(可跨进程)
     单个逻辑服与单个逻辑服通信请求-无响应值(可跨进程)
     单个逻辑服与同类型多个逻辑服通信请求(可跨进程)
 
获取内部模块通讯上下文

     // 游戏逻辑服通讯上下文
     InvokeModuleContext invokeModuleContext = BrokerClientHelper.getInvokeModuleContext();
 
 
参考文档 异步小技巧
     默认情况下,跨服且有返回值的 action 调用,则都是同步的;
     如果想要使用异步的方式,可以通过 CompletableFuture 或虚拟线程来实现。
 

example async : 通过 CompletableFuture 实现;


     CompletableFuture<YourMsg> future = CompletableFuture.supplyAsync(() -> {
         // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
         CmdInfo cmdInfo = ...
         // 游戏逻辑服通讯上下文
         InvokeModuleContext invokeModuleContext = ...
         // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
         return invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class);
     });

     ... 你的其他逻辑
     var msg = future.get();
     log.info("message : {} ", msg);
 
 

example async : 通过 CompletableFuture 实现的回调写法;


     CompletableFuture<YourMsg> future = CompletableFuture.supplyAsync(() -> {
         // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
         CmdInfo cmdInfo = ...
         // 游戏逻辑服通讯上下文
         InvokeModuleContext invokeModuleContext = ...
         // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
         return invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class);
     }).thenAccept(msg -> {
         // 回调写法
         log.info("message : {}", msg);
     });
 
 
作者:
渔民小镇
日期:
2022-06-07
  • 方法详细资料

    • invokeModuleVoidMessage

      default void invokeModuleVoidMessage(CmdInfo cmdInfo, Object data)
      根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值
           异步无阻塞的方法,因为没有返回值;
           游戏逻辑服与单个游戏逻辑服通信请求 - 无返回值(可跨进程)
           单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)
       
      example
      
           // 内部模块通讯上下文,内部模块指的是游戏逻辑服
           InvokeModuleContext invokeModuleContext = ...
           // 请求房间逻辑服来创建房间,并且不需要返回值
           // 路由、业务参数
           invokeModuleContext.invokeModuleVoidMessage(cmdInfo, data);
       
       
      参数:
      cmdInfo - cmdInfo
      data - 请求参数
    • invokeModuleVoidMessage

      default void invokeModuleVoidMessage(CmdInfo cmdInfo)
      根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值
           异步无阻塞的方法,因为没有返回值;
           游戏逻辑服与单个游戏逻辑服通信请求 - 无返回值(可跨进程)
           单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)
       
      example
      
           // 内部模块通讯上下文,内部模块指的是游戏逻辑服
           InvokeModuleContext invokeModuleContext = ...
           // 请求房间逻辑服来创建房间,并且不需要返回值
           // 路由、业务参数
           invokeModuleContext.invokeModuleVoidMessage(cmdInfo);
       
       
      参数:
      cmdInfo - cmdInfo
    • invokeModuleVoidMessage

      void invokeModuleVoidMessage(RequestMessage requestMessage)
      根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值
           异步无阻塞的方法,因为没有返回值;
           游戏逻辑服与单个游戏逻辑服通信请求 - 无返回值(可跨进程)
           单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)
       
      example
      
           // 内部模块通讯上下文,内部模块指的是游戏逻辑服
           InvokeModuleContext invokeModuleContext = ...
           // 请求房间逻辑服来创建房间,并且不需要返回值
           // 路由、业务参数
           invokeModuleContext.invokeModuleVoidMessage(requestMessage);
       
       
      参数:
      requestMessage - requestMessage
    • invokeModuleMessageData

      default <T> T invokeModuleMessageData(CmdInfo cmdInfo, Object data, Class<T> clazz)
      根据路由信息来请求其他子服务器(其他逻辑服)的数据
           相关文档
           游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程)
           游戏逻辑服之间的交互
           异步小技巧
       
      example
      
           public void count() {
               // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
               CmdInfo cmdInfo = ...
               YourData data = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
               YourMsg msg = invokeModuleContext.invokeModuleMessageData(cmdInfo, data, YourMsg.class);
               log.info("message : {} ", msg);
           }
       
       
      类型参数:
      T - t
      参数:
      cmdInfo - 路由信息
      data - 请求参数
      clazz - response data class
      返回:
      pb 对象
    • invokeModuleMessageData

      default <T> T invokeModuleMessageData(CmdInfo cmdInfo, Class<T> clazz)
      根据路由信息来请求其他子服务器(其他逻辑服)的数据
           相关文档
           游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程)
           游戏逻辑服之间的交互
           异步小技巧
       
      example
      
           public void count() {
               // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
               CmdInfo cmdInfo = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
               YourMsg msg = invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class);
               log.info("message : {} ", msg);
           }
       
       
      类型参数:
      T - t
      参数:
      cmdInfo - 路由信息
      clazz - response data class
      返回:
      response data 解析后的数据
    • invokeModuleMessageData

      default <T> T invokeModuleMessageData(RequestMessage requestMessage, Class<T> clazz)
      根据 RequestMessage 来请求其他子服务器(其他逻辑服)的数据
           相关文档
           游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程)
           游戏逻辑服之间的交互
           异步小技巧
       
      example
      
           public void count() {
               RequestMessage request = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
               YourMsg msg = invokeModuleContext.invokeModuleMessageData(request, YourMsg.class);
               log.info("message : {} ", msg);
           }
       
       
      类型参数:
      T - t
      参数:
      requestMessage - RequestMessage
      clazz - response data class
      返回:
      response data 解析后的数据
    • invokeModuleMessage

      default ResponseMessage invokeModuleMessage(CmdInfo cmdInfo, Object data)
      根据路由信息来请求其他子服务器(其他逻辑服)的数据
           相关文档
           游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程)
           游戏逻辑服之间的交互
           异步小技巧
       
      example
      
           public void count() {
               // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
               CmdInfo cmdInfo = ...
               YourData data = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
               ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(cmdInfo, data);
               // 得到逻辑服返回的业务数据
               YourMsg msg = responseMessage.getData(YourMsg.class);
               log.info("message : {} ", msg);
           }
       
       
      参数:
      cmdInfo - cmdInfo
      data - 请求参数
      返回:
      ResponseMessage
    • invokeModuleMessage

      default ResponseMessage invokeModuleMessage(CmdInfo cmdInfo)
      根据路由信息来请求其他子服务器(其他逻辑服)的数据
           相关文档
           游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程)
           游戏逻辑服之间的交互
           异步小技巧
       
      example
      
           public void count() {
               // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
               CmdInfo cmdInfo = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
               ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(cmdInfo);
               // 得到逻辑服返回的业务数据
               YourMsg msg = responseMessage.getData(YourMsg.class);
               log.info("message : {} ", msg);
           }
       
       
      参数:
      cmdInfo - cmdInfo
      返回:
      ResponseMessage
    • invokeModuleMessage

      ResponseMessage invokeModuleMessage(RequestMessage requestMessage)
      根据路由信息来请求其他子服务器(其他逻辑服)的数据
           相关文档
           游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程)
           游戏逻辑服之间的交互
           异步小技巧
       
      example
      
           public void count() {
               RequestMessage request = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他子服务器(其他逻辑服)的数据
               ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(request);
               // 得到逻辑服返回的业务数据
               YourMsg msg = responseMessage.getData(YourMsg.class);
               log.info("message : {} ", msg);
           }
       
       
      参数:
      requestMessage - requestMessage
      返回:
      ResponseMessage
    • invokeModuleCollectMessage

      default ResponseCollectMessage invokeModuleCollectMessage(CmdInfo cmdInfo, Object data)
      模块之间的访问,访问【同类型】的多个逻辑服
           模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。
           假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。
      
           具体的意思可以参考文档中的说明
           游戏逻辑服与同类型多个游戏逻辑服通信请求(可跨进程)
           请求同类型多个逻辑服通信结果
           异步小技巧
       
      example
      
           public void count() {
               // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
               CmdInfo cmdInfo = ...
               YourData data = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据
               var responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(cmdInfo, data);
      
               // 每个逻辑服返回的数据集合
               List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList();
      
               for (ResponseCollectItemMessage responseCollectItemMessage : messageList) {
                   ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage();
                   // 得到逻辑服返回的业务数据
                   YourMsg msg = responseMessage.getData(YourMsg.class);
                   log.info("message : {} ", msg);
               }
           }
       
       
      参数:
      cmdInfo - 路由信息
      data - 业务数据
      返回:
      ResponseCollectMessage
    • invokeModuleCollectMessage

      default ResponseCollectMessage invokeModuleCollectMessage(CmdInfo cmdInfo)
      模块之间的访问,访问【同类型】的多个逻辑服
           模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。
           假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。
      
           具体的意思可以参考文档中的说明
           游戏逻辑服与同类型多个游戏逻辑服通信请求(可跨进程)
           请求同类型多个逻辑服通信结果
           异步小技巧
       
      example
      
           public void count() {
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
               CmdInfo cmdInfo = ...
               // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据
               ResponseCollectMessage responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(cmdInfo);
      
               // 每个逻辑服返回的数据集合
               List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList();
      
               for (ResponseCollectItemMessage responseCollectItemMessage : messageList) {
                   ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage();
                   // 得到逻辑服返回的业务数据
                   YourMsg msg = responseMessage.getData(YourMsg.class);
                   log.info("message : {} ", msg);
              }
          }
       
       
      参数:
      cmdInfo - 路由信息
      返回:
      ResponseCollectMessage
    • invokeModuleCollectMessage

      ResponseCollectMessage invokeModuleCollectMessage(RequestMessage requestMessage)
      模块之间的访问,访问【同类型】的多个逻辑服
           模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。
           假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。
           框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。
      
           具体的意思可以参考文档中的说明
           游戏逻辑服与同类型多个游戏逻辑服通信请求(可跨进程)
           请求同类型多个逻辑服通信结果
           异步小技巧
       
      example
      
           public void count() {
               RequestMessage request = ...
               // 模块通讯上下文
               InvokeModuleContext invokeModuleContext = ...
               // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据
               ResponseCollectMessage responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(request);
      
               // 每个逻辑服返回的数据集合
               List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList();
      
               for (ResponseCollectItemMessage responseCollectItemMessage : messageList) {
                   ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage();
                   // 得到逻辑服返回的业务数据
                   YourMsg msg = responseMessage.getData(YourMsg.class);
                   log.info("message : {} ", msg);
               }
           }
       
       
      参数:
      requestMessage - requestMessage
      返回:
      ResponseAggregationMessage