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

相关推荐
代码不停2 小时前
Java模拟算法题目练习
java·开发语言·算法
彡皮2 小时前
基于Qt,调用千问7B大模型,实现智能对话
开发语言·qt·大模型·千问7b
LiLiYuan.3 小时前
Arrays类和List接口的关联
java·开发语言·windows·python
叫我龙翔3 小时前
【数据结构】从零开始认识B树 --- 高效外查找的数据结构
数据结构·c++·b树
武子康3 小时前
Java-170 Neo4j 事务、索引与约束实战:语法、并发陷阱与速修清单
java·开发语言·数据库·sql·nosql·neo4j·索引
7澄13 小时前
Java 实战:投票统计系统(HashMap 应用)
java·开发语言·intellij-idea·交互·控制台·hashmap
zzzsde3 小时前
【C++】红黑树:使用及实现
开发语言·c++·算法
点云SLAM3 小时前
C++ 中的栈(Stack)数据结构与堆的区别与内存布局(Stack vs Heap)
开发语言·数据结构·c++·内存布局·栈数据结构·c++标准算法·heap内存分配
码界奇点3 小时前
Linux进程间通信三System V 共享内存完全指南原理系统调用与 C 封装实现
linux·c语言·网络·c++·ux·risc-v