【Qt聊天室客户端】用户信息界面设置功能实现

1. 按钮禁用关系梳理

基本逻辑梳理

用户界面-申请好友按钮

  • 只有当前用户不是你的好友时,该按钮才可以使用,否则是禁用状态

用户界面-发送消息与删除好友

  • 当前用户是你的好友时,按钮才可以使用,否则这两个按钮禁用
  • 区分是否是你好友的关键在于单聊还是群聊

具体实现

  • 初始化按钮的禁用关系

  • 发送消息逻辑实现

2. 删除好友功能

核心逻辑

删除好友可以从会话窗口和好友窗口中实现,但是具体实现时候又需要按不同情况分析,该处仅梳理核心逻辑,该功能的实现本质上与其他前后端功能相同

  • 从好友列表中删除指定好友
  • 从会话列表中删除与该好友相关的个人聊天会话但是群聊不受影响
  • 如果当前会话是要删除的好友会话,则清空当前会话

扫描二维码关注公众号,回复: 17517324 查看本文章
  • 【待优化】删除好友后实现自动刷新消息列表 

逻辑梳理

  • 用户信息窗口初始化信号槽的时候,设置信号槽,然后当删除按钮点击后即触发该处逻辑

  •  调用核心数据类删除好友,本质上还是调用客户端去删除

  • 服务端处理客户端请求
    • 首先设置路由,然后根据客户端的请求设置响应

  •  客户端开始处理服务端的响应

  • 注意该处的删除逻辑,是需要对聊天类型进行判断
    • 补充removeIf的逻辑
      • 用于删除满足特定条件元素的算法
      • 使用Lambda表达式,则是里面的判断条件如果为真则执行删除逻辑

 

  • 主窗口更新逻辑

3. 发送添加好友申请

该部分功能的实现主要分为两个部分

  • 客户端通过HTTP请求,让服务器处理添加好友申请的功能,发送方也可以看到对应提示
  • 服务端如果想要将添加好友申请推送到另一个客户端的时候,则需用websocket服务器

websocket服务器逻辑分析

  • 点击按钮后,触发槽函数,发送信号,在Server.cpp中处理该信号逻辑 

  

  • 客户端开始处理websocket发出的请求,然后主窗口进行更新

客户端发送给服务端HTTP请求处理逻辑梳理

  • 客户端通过点击按钮触发发送HTTP请求逻辑 

  • 服务端进行处理

  • 客户端处理服务端的响应

  • 主窗口处理客户端发送过来的信号

4. 同意好友申请

逻辑梳理

  • 用户 A 发送好友申请

    • 用户 A 通过客户端发送一个好友申请,服务器接收到申请请求并将此请求存储在数据库中,以维护好友关系的状态
  • 服务器通知用户 B

    • 服务器通过 WebSocket 将好友申请的通知实时推送给用户 B,提示 B 有新的好友申请等待处理
  • 用户 B 接受好友申请

    • 用户 B 在客户端点击“同意”来接受好友申请。客户端向服务器发送一个 HTTP 请求,表示同意这次好友申请
  • 服务器更新数据

    • 服务器在收到用户 B 的同意请求后,更新数据库中两者的好友关系状态,确认 A 和 B 成为好友
  • 服务器通知用户 A

    • 在好友关系确认之后,服务器再次通过 WebSocket 通知用户 A,告知对方已同意成为好友

具体实现-HTTP层面

同意好友申请,就是上述流程图中用户B同意用户A的请求,然后用户B向用户A发送的HTTP请求

  • 同意逻辑的实现

  • 主界面更新逻辑

  •  客户端实现请求

  • 服务端处理请求

  •  客户端处理响应
    • 更新核心数据类中的信息
    • 通知主界面更新

websocket服务器实现逻辑

  • 功能演示

  • 点击按钮后逻辑(该按钮负责发送信号)

  • 服务端开始处理信号(构建一个用户信息序列化后给客户端)

  • 客户端开始处理该响应

  •  主界面的显示内容更新

 

5. 拒绝好友申请逻辑

逻辑分析

客户端A通过拒绝按钮,发送信号给服务器进行处理,然后服务器通过websocket服务器推送给客户端B,从而实现拒绝好友逻辑,其中服务器推送给客户端B拒绝申请,在同意好友逻辑中已经实现,所以该处主要目标是解决客户端向服务器通过按钮发送请求。

具体实现

  •  申请好友中的拒绝按钮

  • 客户端开始执行拒绝好友申请逻辑

 

  • 主窗口更新