Closed iohao closed 5 months ago
示例说明
两个逻辑服的交互如下,UserAction 使用跨服方式调用了【Home 游戏逻辑服】的几个方法,并通过 responseMessage 的协议碎片支持,简化跨服调用时的使用。
示例中演示了 string、string list、object list 的简化使用(协议碎片获取时的简化使用)。
@ProtobufClass
@FieldDefaults(level = AccessLevel.PUBLIC)
public class Student {
String name;
}
// 【Home 游戏逻辑服】提供的 action
@ActionController(HomeCmd.cmd)
public class HomeAction {
@ActionMethod(HomeCmd.name)
public String name() {
return "a";
}
@ActionMethod(HomeCmd.listName)
public List<String> listName() {
return List.of("a", "b");
}
@ActionMethod(HomeCmd.listStudent)
public List<Student> listStudent() {
Student student = new Student();
student.name = "a";
Student student2 = new Student();
student2.name = "b";
return List.of(student, student2);
}
}
// 【User 游戏逻辑服】提供的 action
@ActionController(UserCmd.cmd)
public class UserAction {
@ActionMethod(UserCmd.userSleep)
public void userSleep(FlowContext flowContext) {
flowContext.invokeModuleMessageAsync(HomeCmd.of(HomeCmd.name), responseMessage -> {
String name = responseMessage.getString();
log.info("{}", name);
});
flowContext.invokeModuleMessageAsync(HomeCmd.of(HomeCmd.listName), responseMessage -> {
var listName = responseMessage.listString();
log.info("{}", listName);
});
flowContext.invokeModuleMessageAsync(HomeCmd.of(HomeCmd.listStudent), responseMessage -> {
List<Student> studentList = responseMessage.listValue(Student.class);
log.info("{}", studentList);
});
}
}
新增功能的使用场景
框架具备协议碎片特性。某些业务中,我们需要跨服访问其他游戏逻辑服,以获取某些业务数据;一些简单的数据,我们可以通过协议碎片来返回,从而避免定义过多的协议。
现为 ResponseMessage 增加协议碎片支持,简化跨服调用时的使用,新增的方法如下