Skip to content

netty 网络游戏服务器框架 ioGame 17.1.58 模拟客户端请求新 api

Compare
Choose a tag to compare
@iohao iohao released this 02 Nov 03:39
· 283 commits to main since this release

优化 FlowContext createRequestMessage

#194

可能在 springboot 集成 light-domain-event 时,启动报 java.lang.ClassNotFoundException

#198

关于改造现有或老客户端项目到 ioGame 遇到的问题

HeadMetadata 增加 customData 属性;用于自定义数据,专为开发者预留的一个字段,开发者可以利用该字段来传递自定义数据。该字段由开发者自己定义,框架不会对数据做任何处理,也不会做任何检查,开发者可以利用该字段来传递任何数据,包括自定义对象。


模拟客户端

因发展需要,模拟客户端使用新 api ,与 SDK 风格做统一。从 17.1.58 版本开始,推荐开发者使用新版本的 api。已经将老的 api 做了过期标记,将在 ioGame21 版本中完全移除这些过期的 api。整体变化不大,内容如下

请求 api

变更说明

新版本反序列化消息放在 result 时解析。

setDescription 使用 setTitle 代替。

setInputRequestData 使用 setRequestData 代替。

对于 List 类型的使用更友好

请求 - list 响应

########## 请求 - 旧版本 ##########
// 创建一个模拟命令 - 【125-3】读取某个玩家的私有消息
ofCommandUserId(ChatCmd.readPrivateMessage).callback(ByteValueList.class, result -> {
    List<ChatMessage> list = result.toList(ChatMessage.class);
    if (CollKit.isEmpty(list)) {
        return;
    }

    log.info("玩家【{}】读取私聊消息数量 : {}", userId, list.size());
    System.out.println("------------------------------");
    list.stream().map(ClientChatKit::toString).forEach(System.out::println);
    System.out.println("------------------------------");

}).setDescription("读取某个玩家的私有消息");

########## 请求 - 新版本 ##########
// 创建一个模拟命令 - 【125-3】读取某个玩家的私有消息
ofCommandUserId(ChatCmd.readPrivateMessage)
        .setTitle("读取某个玩家的私有消息")
        .callback(result -> {
            List<ChatMessage> list = result.listValue(ChatMessage.class);
            if (CollKit.isEmpty(list)) {
                return;
            }

            log.info("玩家【{}】读取私聊消息数量 : {}", userId, list.size());
            System.out.println("------------------------------");
            list.stream().map(ClientChatKit::toString).forEach(System.out::println);
            System.out.println("------------------------------");
        });
########## 请求 - 旧版本 ##########
// 创建一个模拟命令 - 【125-2】未读消息的发送者列表
ofCommand(ChatCmd.listUnreadUserId).callback(LongValueList.class, result -> {
    LongValueList longValueList = result.getValue();
    log.info("未读消息的发送者列表 : {}", longValueList.values);
}).setDescription("未读消息的发送者列表");

########## 请求 - 新版本 ##########
// 创建一个模拟命令 - 【125-2】未读消息的发送者列表
ofCommand(ChatCmd.listUnreadUserId)
        .setTitle("未读消息的发送者列表")
        .callback(result -> {
            List<Long> values = result.listLong();
            log.info("未读消息的发送者列表 : {}", values);
        });

请求

########## 请求 - 旧版本 ##########
// 创建一个模拟命令 - 【125-1】玩家与玩家的私聊
ofCommand(ChatCmd.c_2_c)
        // 动态请求内容 - 私聊,聊天内容
        .setInputRequestData(() -> {
            ... 省略部分

            return chatSendMessage;
        })
        // 命令描述
        .setDescription("玩家与玩家的私聊");

########## 请求 - 新版本 ##########
// 创建一个模拟命令 - 【125-1】玩家与玩家的私聊
ofCommand(ChatCmd.c_2_c)
        .setTitle("玩家与玩家的私聊")
        // 动态请求内容 - 私聊,聊天内容
        .setRequestData(() -> {
            ... 省略部分

            return chatSendMessage;
        });

title、请求参数、响应

########## 请求 - 旧版本 ##########
HelloReq helloReq = new HelloReq();
helloReq.name = "abc12";

ofCommand(DemoCmd.here).callback(HelloReq.class, result -> {
    HelloReq value = result.getValue();
    log.info("value : {}", value);
}).setDescription("here").setRequestData(helloReq);

########## 请求 - 新版本 ##########
ofCommand(DemoCmd.here)
// 标题
.setTitle("here")
// 请求参数
.setRequestData(() -> {
    HelloReq helloReq = new HelloReq();
    helloReq.name = "abc12";
    return helloReq;
})
// 响应
.callback(result -> {
    HelloReq value = result.getValue(HelloReq.class);
    log.info("value : {}", value);
});

########## 请求 - 新版本 - 简写 ##########
ofCommand(DemoCmd.here).setTitle("here").setRequestData(() -> {
    HelloReq helloReq = new HelloReq();
    helloReq.name = "abc12";
    return helloReq;
}).callback(result -> {
    HelloReq value = result.getValue(HelloReq.class);
    log.info("value : {}", value);
});

广播 api

变更说明

listenBroadcast 使用 ofListen 代替。

新版本反序列化消息放在 result.getValue 时解析。

########## 广播 - 旧版本 ##########
// 广播监听回调 - 监听【125-11】玩家私聊消息通知
listenBroadcast(ChatNotifyMessage.class, result -> {
    ChatNotifyMessage chatNotifyMessage = result.getValue();
    // 聊天消息发送方的 userId
    long senderId = chatNotifyMessage.senderId;
    log.info("玩家[{}]给我的私聊通知", senderId);
}, ChatCmd.notifyPrivate, "玩家私聊消息通知");

########## 广播 - 新版本 ##########
// 广播监听回调 - 监听【125-11】玩家私聊消息通知
ofListen(result -> {
    ChatNotifyMessage chatNotifyMessage = result.getValue(ChatNotifyMessage.class);
    // 聊天消息发送方的 userId
    long senderId = chatNotifyMessage.senderId;
    log.info("玩家[{}]给我的私聊通知", senderId);
}, ChatCmd.notifyPrivate, "玩家私聊消息通知");

其他更新

<netty.version>4.1.100.Final</netty.version>
<lombok.version>1.18.30</lombok.version>

Full Changelog: 17.1.55...17.1.58