当前位置: 首页 > news >正文

AQchat

在当前项目里,Handler 类主要用于处理不同类型的命令或者消息,下面按照不同功能模块为你详细介绍各 Handler 的作用。

命令处理 Handler(位于 com.howcode.aqchat.handler.impl 包)

  • SyncRoomMembersCmdHandler:处理同步房间成员命令。验证用户登录状态和是否加入指定房间,若验证通过则获取房间所有成员信息并返回给客户端。
// 验证用户登录和房间信息,同步房间成员信息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.SyncRoomMembersCmd cmd) {
    // ...已有代码...
}
  • JoinRoomCmdHandler:处理加入房间命令。验证用户登录状态、是否已在房间中以及房间号是否存在,若都满足条件则将用户加入房间并返回加入成功消息。
// 验证用户登录和房间信息,将用户加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.JoinRoomCmd cmd) {
    // ...已有代码...
}
  • SendMsgCmdHandler:处理发送消息命令。验证消息 ID、用户登录状态、是否在房间以及房间是否存在等信息,若验证通过则发送消息并处理 AI 消息,最后返回消息发送成功消息。
// 验证消息和用户信息,发送消息并处理 AI 消息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.SendMsgCmd cmd) {
    // ...已有代码...
}
  • LeaveRoomCmdHandler:处理离开房间命令。验证用户登录状态、是否在房间以及房间是否存在,若验证通过则将用户从房间移除,判断房间是否为空并决定是否解散房间,最后返回离开房间成功消息。
// 验证用户登录和房间信息,将用户从房间移除
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.LeaveRoomCmd cmd) {
    // ...已有代码...
}
  • CreateRoomCmdHandler:处理创建房间命令。验证用户登录状态、是否已在房间以及房间号是否已存在,若都满足条件则创建房间,将创建者加入房间,处理 AI 助手相关操作,最后返回创建房间成功消息。
// 验证用户登录和房间信息,创建房间并将用户加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.CreateRoomCmd cmd) {
    // ...已有代码...
}
  • OpenAiRoomCmdHandler:处理创建 AI 房间命令。验证用户登录状态、是否已在房间,若都满足条件则创建 AI 房间,将创建者和 AI 成员加入房间,最后返回创建 AI 房间成功消息。
// 验证用户登录和房间信息,创建 AI 房间并将用户和 AI 成员加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.OpenAiRoomCmd cmd) {
    // ...已有代码...
}
  • RecoverUserCmdHandler:处理恢复用户命令。验证用户信息是否存在,若存在则重新登录用户,添加用户 channel,判断用户是否有房间,若有则将用户加入房间,最后返回用户信息。
// 验证用户信息,恢复用户登录状态并处理房间信息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.RecoverUserCmd cmd) {
    // ...已有代码...
}

AI 消息处理 Handler(位于 com.howcode.aqchat.handler.at.chain 包)

这些 Handler 采用责任链模式处理 AI 消息,若当前 Handler 无法处理消息,则将消息传递给下一个 Handler

  • XQHandler:判断消息是否 @ 了 AI 助手,若是则复制消息,修改消息 ID 和内容,去掉 @AI 部分,然后通过消息队列发送给 AI 助手。
// 判断消息是否 @ 了 AI 助手,处理 AI 消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
  • MultipleRoundsHandler:判断房间类型是否为 AI 空间且消息扩展信息为空,若是则复制消息,修改消息 ID,然后通过消息队列发送进行多轮对话处理。
// 判断房间类型和消息信息,处理多轮对话消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
  • XMHandler:判断消息是否 @ 了 XM,若是则复制消息,修改消息 ID 和内容,去掉 @XM 部分,然后通过消息队列发送给 XM。
// 判断消息是否 @ 了 XM,处理 XM 相关消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
  • XTHandler:判断消息是否 @ 了 XT,若是则复制消息,修改消息 ID 和内容,去掉 @XT 部分,然后通过消息队列发送给 XT。
// 判断消息是否 @ 了 XT,处理 XT 相关消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
  • XVHandler:判断消息是否 @ 了 XV,若是则复制消息,修改消息 ID 和内容,去掉 @XV 部分,然后通过消息队列发送给 XV。
// 判断消息是否 @ 了 XV,处理 XV 相关消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}

工厂类 Handler(位于 com.howcode.aqchat.handler.at 包)

  • HandlerFactory:实现 ApplicationContextAwareInitializingBean 接口,在初始化时获取所有 Handler 实例并构建责任链。提供 handleMessage 方法,处理消息内容,然后将消息传递给责任链的第一个 Handler 进行处理。
// 初始化 Handler 责任链,处理消息并传递给责任链
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}

相关文章:

  • Vite配置postcss-px-to-viewport
  • 代理模式简述
  • 贪心算法(19)(java)重构字符串
  • 银河麒麟系统添加开机自启动
  • 【AI】使用Huggingface模型实现文本内容摘要器
  • DeepSeek 接入 Word 完整教程
  • shell 编程之循环语句
  • UNet深度学习实战遥感图像语义分割
  • 孟加拉slot游戏出海代投FB脸书广告策略
  • HTTP协议入门
  • c# 委托和事件的区别及联系,Action<T1,T2>与Func<T1,T2>的区别
  • RTX 5060 Ti 3DMark跑分首次流出:比RTX 4060 Ti快20%
  • JVM——运行时数据区
  • Linux内核中struct net_protocol的early_demux字段解析
  • 谷歌A2A与Anthropic MCP: AI 智能体互补双协议
  • 【MySQL】MVCC工作原理、事务隔离机制、undo log回滚日志、间隙锁
  • mac中的zip文件压缩与压缩文件中指定目录删除
  • 【话题讨论】Python + AI图像生成实战:AI图像生成——用代码点亮数字艺术
  • Uipath获取最新下载文件
  • Express学习笔记(六)——前后端的身份认证
  • 运油-20亮相中埃空军联训
  • 女子伸腿阻止高铁关门被拘,央媒:严格依规公开处理以儆效尤
  • 山西一国道发生塌陷,造成4车追尾2人死亡
  • 收藏家尤伦斯辞世,曾是中国当代艺术的推手与收藏者
  • 澳门世界杯“中日对决”,蒯曼击败伊藤美诚晋级女单决赛
  • 对话地铁读书人|来自法学教授的科普:读书日也是版权日