1. 按钮禁用关系梳理
基本逻辑梳理
用户界面-申请好友按钮
- 只有当前用户不是你的好友时,该按钮才可以使用,否则是禁用状态
用户界面-发送消息与删除好友
- 当前用户是你的好友时,按钮才可以使用,否则这两个按钮禁用
- 区分是否是你好友的关键在于单聊还是群聊
具体实现
- 初始化按钮的禁用关系
- 发送消息逻辑实现
2. 删除好友功能
核心逻辑
删除好友可以从会话窗口和好友窗口中实现,但是具体实现时候又需要按不同情况分析,该处仅梳理核心逻辑,该功能的实现本质上与其他前后端功能相同
- 从好友列表中删除指定好友
- 从会话列表中删除与该好友相关的个人聊天会话,但是群聊不受影响
- 如果当前会话是要删除的好友会话,则清空当前会话
- 【待优化】删除好友后实现自动刷新消息列表
逻辑梳理
- 用户信息窗口初始化信号槽的时候,设置信号槽,然后当删除按钮点击后即触发该处逻辑
- 调用核心数据类删除好友,本质上还是调用客户端去删除
- 服务端处理客户端请求
- 首先设置路由,然后根据客户端的请求设置响应
- 客户端开始处理服务端的响应
- 注意该处的删除逻辑,是需要对聊天类型进行判断
- 补充removeIf的逻辑
- 用于删除满足特定条件元素的算法
- 使用Lambda表达式,则是里面的判断条件如果为真则执行删除逻辑
- 补充removeIf的逻辑
- 主窗口更新逻辑
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拒绝申请,在同意好友逻辑中已经实现,所以该处主要目标是解决客户端向服务器通过按钮发送请求。
具体实现
-
申请好友中的拒绝按钮
- 客户端开始执行拒绝好友申请逻辑
- 主窗口更新