目录
在之前业务的基础上继续进行完善,主要针对群组相关的业务增加了创建群组、加入群组、以及发送群聊消息的功能。
开始之前,需要在数据库中创建两个表:allgroup 和 groupuser。allgroup主要用于保存所有群组信息,包括群组id、群组名称、群组描述;groupuser主要用于保存用户与群组的关系以及用户的角色,包括用户id、群组id、用户角色。
mysql> desc allgroup;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| groupname | varchar(50) | NO | UNI | NULL | |
| groupdesc | varchar(200) | YES | | | |
+-----------+--------------+------+-----+---------+----------------+
mysql> desc groupuser;
+-----------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------------------+------+-----+---------+-------+
| groupid | int | NO | PRI | NULL | |
| userid | int | NO | PRI | NULL | |
| grouprole | enum('creator','normal') | YES | | normal | |
+-----------+--------------------------+------+-----+---------+-------+
1 总体架构设计
沿用之前的设计思路,将数据层和业务层进行区分开:
数据层主要负责对象的封装以及数据库的交互,包括群组对象的封装、群组成员的封装、创建/加入/查询群组;
业务层则负责与客户端的交互,包括创建群组业务、加入群组业务、群组聊天业务。
2 数据层
- 对象的封装
主要封装群组对象{群组id 群组名称 群组描述 组内成员}以及相关接口、组内成员对象{成员信息 角色}。
群组对象的封装在group.hpp中实现:
#ifndef GROUP_H
#define GROUP_H
#include <