当前位置: 首页 > news >正文

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. 释放句柄

所以其类可以包括

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格式字符串,反序列化得到多个数据对象

所以其类可以包括

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.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

http://www.dtcms.com/a/601791.html

相关文章:

  • Java-169 Neo4j CQL 实战速查:字符串/聚合/关系与多跳查询
  • STM32电机运动控制的设计
  • 安徽福凯建设集团网站南宁网站建设是什么意思
  • TCP/IP 协议栈
  • 今天我们开始学习Linux自动化运维Ansible基础
  • .mom域名可以做网站吗wordpress woo插件
  • Skywalking运维之路(exporter状态监控)
  • Java 8 Stream API 高级实战:从数据处理到性能优化的深度解析
  • 网站建设目标个人博客dwwordpress微信付费
  • 梯度提升树与随机森林对比详解以及python实现
  • C语言编译器推荐 | 选择适合你的开发工具
  • 网站域名和空间网站产品优化方案
  • java.net.http 包详解
  • K8s Service核心功能:稳定访问与负载均衡
  • 有向图的可达性分析
  • 网站开发西安网页设计基础项目考核
  • INT305 Machine Learning 机器学习 Pt.8 Bagging 和 Boosting
  • React+Ant design
  • C++四种类型转换cast,其在参数传递时的作用
  • 什么网站可以做图赚钱网站建设主体设计要求
  • 云手机的核心价值
  • L10_参数验证
  • 免费网站制作手机软件的appaso排名优化
  • Java是编译型语言吗?解析Java语言的编译与执行过程
  • Hugging face微调 GPT-2模型
  • 1.3 半监督学习黑科技:如何用少量标注数据提升模型性能,节省90%标注成本?
  • 声学超材料与AI驱动的声振仿真优化设计
  • 罗湖建设公司网站建设企业推广app
  • 2025最新版Python 3.14.0安装使用指南
  • Keil5创建新工程时找不到STM32芯片