[集群聊天服务器]----(五)User类、UserModel类

2024-05-25 08:52

本文主要是介绍[集群聊天服务器]----(五)User类、UserModel类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接着上文[集群聊天服务器]----(四)MySQL数据库模块,接下来我们对User类、UserModel类进行剖析,User表和UserModel类是项目最基本也是最重要的部分,通过它我们对用户的id,用户名,密码,状态相关信息进行存储,也决定了登录成功与否以及后续的聊天等内容。

User表设计

在这里插入图片描述
创建 User 类:

#ifndef USER_H
#define USER_H#include <string>
using namespace std;//匹配user表的ORM类
class User {
public:User(int id=-1,string name="", string pwd="",string state="offline"){this->id=id;this->name=name;this->password=password;this->state=state;}void setId(int id) {this->id=id;}void setName(string name) {this->name=name;}void setPwd(string password) {this->password=password;}void setState(string state) {this->state=state;}int getId() {return this->id;}string getName() {return this->name;}string getPwd() {return this->password;}string getState() {return this->state;}private:int id;string name;string password;string state;};#endif
  • 由于user的id是填入表格以后,数据库自动创建的,所以初始时赋予-1,并提供了设置/获取id,用户名,用户密码,用户状态的相关函数。

创造UserModel类对User表进行数据操作

成员函数

    //user表的增加方法bool insert(User &user);//根据用户号码查询用户信息 User query(int id);//更新用户的状态信息bool updateState(User &user);//重置用户的状态信息void resetState();

user表的增加方法

 bool UserModel::insert(User &user){//组装sql语句char sql[1024] = {0};sprintf(sql,"insert into user(name,password,state) values('%s','%s','%s')",user.getName().c_str(),user.getPwd().c_str(),user.getState().c_str()); MySQL mysql;//连接数据库if(mysql.connect()){//更新数据库语句if(mysql.update(sql)){//获取插入成功的用户数据生成的主键iduser.setId(mysql_insert_id(mysql.getConnection()));return true;}}return false;
}
  • 首先组装sql语句;
  • 创建数据库对象,并连接数据库,根据sql语句进行更新user表,其中user为表格名字,user()括号中的为要插入的内容标题,values为对应的值,注意,表格名字以及对应的内容标题一定要和表格对应,否则插入失败
  • 更新成功会生成用户id,调用mysql_insert_id()函数在user中进行设置,(mysql.getConnection()作用是获取mysql的连接

根据用户号码查询用户信息

User UserModel::query(int id)
{char sql[1024] = {0};sprintf(sql,"select * from user where id =%d",id);MySQL mysql;//连接数据库if(mysql.connect()){//更新数据库语句MYSQL_RES *res = mysql.query(sql); //指针 内部动态内存开辟 需要释放资源if(res != nullptr){//获取行 根据主键查MYSQL_ROW row = mysql_fetch_row(res);if(row != nullptr){User user;user.setId(atoi(row[0]));user.setName(row[1]);user.setPwd(row[2]);user.setState(row[3]);mysql_free_result(res);return user;}}}return User();
}
  • 组装sql语句,select * from user where id =%d是对user进行查找id;
  • 连接数据库,并根据sql语句调用mysql_use_result()函数(属于MYSQL_RES类型)逐行进行查询,在调用mysql_fetch_row()读取结果;
  • 创建一个User对象,并根据查找结果设置其相应值,返回User对象
  • 注意res为内部动态内存开辟,需要释放资源

更新用户的状态信息

bool UserModel::updateState(User &user)
{char sql[1024] = {0};sprintf(sql,"update user set state = '%s' where id = %d",user.getState().c_str(),user.getId()); MySQL mysql;//连接数据库if(mysql.connect()){//更新数据库语句if(mysql.update(sql)){return true;}}return false;
}
  • 组装sql语句,根据id,更新 user表中的状态;
  • 连接数据库进行更新

重置用户的状态信息

void UserModel::resetState()
{char sql[1024] = "update user set state = 'offline' where state = 'online'";MySQL mysql;//连接数据库if(mysql.connect()){//更新数据库语句mysql.update(sql);}}
  • 组装sql语句,这个函数主要是针对捕捉到服务器ctrl+c异常结束后,重置user的状态信息,将表格中online用户的状态都改为offline;
  • 连接数据库进行更新

好了~ 关于集群聊天服务器中的User类和UserModel类的剖析就到此结束了,接下来我们将进入业务模块正题,用户注册、登录、退出以及客户端异常退出回调函数,下一节见~

这篇关于[集群聊天服务器]----(五)User类、UserModel类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001042

相关文章

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项