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的操作流程无非就是

  1. 初始化句柄
  2. 连接服务器
  3. 设置字符集
  4. 选择数据库
  5. 执行语句
  6. 保存结果到本地
  7. 获取结果条数遍历处理结果
  8. 释放句柄
    所以其类可以包括
cpp 复制代码
class mysql_util {

MYSQL *mysql_create()

bool mysql_exec(MYSQL *mysql, const std::string &sql)

void mysql_destroy(MYSQL *mysql);

}

Jsoncpp-API封装:

  1. json序列化:将多个数据对象,进行序列化得到一个json格式的字符串
  2. json反序列化:将json格式字符串,反序列化得到多个数据对象

所以其类可以包括

cpp 复制代码
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封装

注意一下,如何获得文件大小

cpp 复制代码
//获取文件大小
size_t fsize = 0;
ifs.seekg(0, std::ios::end);
fsize = ifs.tellg();
ifs.seekg(0, std::ios::beg);
body.resize(fsize);

参考代码:

参考代码见until.hpphttps://gitee.com/yaokong123/gobang

数据管理模块实现

参考项目设计文章中服务器流程图

我们需要一个 数据库和数据管理,这里会存放多个用户,也就是多张表;如此获取用户信息也简单了;

  • 数据管理模块主要负责对于数据库中数据进行统一的增删改查管理,其他模块要对数据操作都必须通过数据管理模块完成。

数据库设计

创建user表,用来表示用户信息及积分信息;

这里我们就要想,在user_table中, 我们需要什么东西: id, username, password, score, total_count, win_count, lose_count;

这些信息主要基于两点:

  • 用户信息,用来实现登录、注册、游戏对战数据管理等功能
  • 积分信息,用来实现匹配功能
代码:

我的git仓库

见gobang/soruce/db.sqhttps://gitee.com/yaokong123/gobang

建立完成可以验证:

数据管理模块的封装与实现

如开头介绍一样,数据库中有可能存在多个用户,也就是多张表,每张表中管理的数据有有不同,要进行的数据操作也各不相同;

为了方便管理,因此可以为每一张表中的数据操作都设计一个类 ,通过类实例化的对象来访问这张数据库表中的数据,这样的话当我们要访问哪张表的时候,使用哪个类实例化的对象即可。


封装思路(参考)

代码:

参考代码

见gobang/source/util.hpphttps://gitee.com/yaokong123/gobang

在线用户管理模块实现

简单介绍

如上篇服务器流程图中

对应已经长连接的用户来说,有时我们需要获得它们的 socket链接的关系;这对于 之后管理用户,创建对战房间等等来说,都要用到;

在线用户管理,是对于当前游戏大厅和游戏房间中的用户进行管理,主要是建立起用户与Socket连接的映射关系,这个模块具有两个功能:

  1. 能够让在房间,大厅获取用户的socket连接信息;或者说让程序中根据用户信息 ,找到能够与用户客户端进行通信的Socket连接,进而实现与客户端的通信。
  2. 判断一个用户是否在线,或者判断用户是否已经掉线。

封装思路(参考):

代码:

参考代码

见gobang/source/online.hpphttps://gitee.com/yaokong123/gobang

相关推荐
柒星栈15 分钟前
PHP 源码怎么加密防破解?三套方案实战指南
开发语言·php·android studio
勉灬之21 分钟前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
这是个栗子1 小时前
前端开发中的常用工具函数(九)
开发语言·javascript·ecmascript·at
啦啦啦啦啦zzzz1 小时前
算法:回溯算法
c++·算法·leetcode
蓝创工坊Blue Foundry1 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
会飞的小新1 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
Lzg_na1 小时前
订阅发布模块事例
c++
郝学胜-神的一滴1 小时前
[简化版 GAMES 104] 现代游戏引擎 02:拆解现代游戏引擎5+1层级架构,吃透引擎底层核心逻辑
c++·unity·架构·游戏引擎·图形渲染·unreal engine·系统设计
汉克老师1 小时前
2026年CSP-J初赛分数线-----预测
c++·csp-j·小学生·学c++编程
脱胎换骨-军哥1 小时前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树