C++基于websocket的多用户网页五子棋 ---- 模块介绍1
整体代码可以参考都在我的git仓库都能找到:
我的gobang-git仓库
https://gitee.com/yaokong123/gobang项目设计思路,在上一篇博客,整理完思路再看模块会更清晰
项目设计思路
https://blog.csdn.net/2302_80253411/article/details/154647338?spm=1001.2014.3001.5501
实用工具类模块代码实现
这一部分主要是负责提前实现一些项目中会用到的边缘功能代码,提前实现好了就可以在项目中直接用到的时候直接使用了。
- 日志宏:实现程序打印
- Mysql_APL封装: 数据库的连接&初始化,句柄的销毁,语句的执行
- Jsoncpp-API封装: 封装实现Json的序列化与反序列化
- String-Split封装:主要是封装了字符串分割的功能( 后面会用到)
- File-read封装:主要封装了文件数据的读取功能如读取html文件等
日志宏
主要思路就是:
时间戳 生成对应时间结构,然后将时间结构 按照一定的格式 放到对应的buf中
主要用到的函数有这些,若不太清楚的话,可以查一查
- time_t time(NULL) ,获取系统时间戳 对应文件名 对应行号
- struct tm *localtime(time_t *t);
- char *strftime(char *buf, int max, char *format, struct tm *tm);
- int fprintf(FILE *fp, char *format, ...);
Mysql_APL封装:
mysql的操作流程无非就是
- 初始化句柄
- 连接服务器
- 设置字符集
- 选择数据库
- 执行语句
- 保存结果到本地
- 获取结果条数遍历处理结果
- 释放句柄
所以其类可以包括
class mysql_util {MYSQL *mysql_create()bool mysql_exec(MYSQL *mysql, const std::string &sql)void mysql_destroy(MYSQL *mysql);}
Jsoncpp-API封装:
- json序列化:将多个数据对象,进行序列化得到一个json格式的字符串
- json反序列化:将json格式字符串,反序列化得到多个数据对象
所以其类可以包括
class json_util{ public:static bool serialize(const Json::Value &root, std::string &str)static bool unserialize(const std::string &str, Json::Value &root) }
String-Split封装
这个没什么说的,就是实现字符串的分割
如从123,123,,,136,要获取136;
split(const std::string &src, const std::string &sep, std::vector<std::string> &res)
File-read封装
注意一下,如何获得文件大小
//获取文件大小
size_t fsize = 0;
ifs.seekg(0, std::ios::end);
fsize = ifs.tellg();
ifs.seekg(0, std::ios::beg);
body.resize(fsize);
参考代码:
参考代码见until.hpp
https://gitee.com/yaokong123/gobang
数据管理模块实现
参考项目设计文章中服务器流程图
我们需要一个 数据库和数据管理,这里会存放多个用户,也就是多张表;如此获取用户信息也简单了;
- 数据管理模块主要负责对于数据库中数据进行统一的增删改查管理,其他模块要对数据操作都必须通过数据管理模块完成。
数据库设计
创建user表,用来表示用户信息及积分信息;
这里我们就要想,在user_table中, 我们需要什么东西: id, username, password, score, total_count, win_count, lose_count;
这些信息主要基于两点:
- 用户信息,用来实现登录、注册、游戏对战数据管理等功能
- 积分信息,用来实现匹配功能
代码:
我的git仓库
见gobang/soruce/db.sq
https://gitee.com/yaokong123/gobang
建立完成可以验证:
数据管理模块的封装与实现
如开头介绍一样,数据库中有可能存在多个用户,也就是多张表,每张表中管理的数据有有不同,要进行的数据操作也各不相同;
为了方便管理,因此可以为每一张表中的数据操作都设计一个类,通过类实例化的对象来访问这张数据库表中的数据,这样的话当我们要访问哪张表的时候,使用哪个类实例化的对象即可。
封装思路(参考)

代码:
参考代码
见gobang/source/util.hpp
https://gitee.com/yaokong123/gobang
在线用户管理模块实现
简单介绍
如上篇服务器流程图中
对应已经长连接的用户来说,有时我们需要获得它们的 socket链接的关系;这对于 之后管理用户,创建对战房间等等来说,都要用到;
在线用户管理,是对于当前游戏大厅和游戏房间中的用户进行管理,主要是建立起用户与Socket连接的映射关系,这个模块具有两个功能:
- 能够让在房间,大厅获取用户的socket连接信息;或者说让程序中根据用户信息,找到能够与用户客户端进行通信的Socket连接,进而实现与客户端的通信。
- 判断一个用户是否在线,或者判断用户是否已经掉线。
封装思路(参考):
代码:
参考代码
见gobang/source/online.hpp
https://gitee.com/yaokong123/gobang





