C++项目 | 集群聊天服务器 | 服务器异常退出

本次主要处理服务器程序因为ctrl+c退出的异常,会将所有online的改为offline

1.main.cpp

捕获ctrl+c信号,进行处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include"chatserver.hpp"
#include"chatservice.hpp"
#include<iostream>
#include<signal.h>
using namespace std;

//处理器ctrl + c结束后,重置user 的状态信息,把登录变成未登录
void resetHandler(int)
{
ChatService::instance()->reset();
exit(0);
}

int main()
{
signal(SIGINT,resetHandler);

EventLoop loop;
InetAddress addr("127.0.0.1",6000);
ChatServer server(&loop,addr,"ChatServer");

server.start();
loop.loop();
return 0;
}

2. ChatService::instance()->reset()

1
2
3
4
5
6
//服务器异常后业务重置方法
void ChatService::reset()
{
//把online的用户设置为offline
_userModel.resetState();
}

3. _userModel.resetState()

1
2
3
4
5
6
7
8
9
10
11
12
//重置用户的状态信息
void UserModel::resetState()
{
//1.组装sql语句
char sql[1024]="update user set state = 'offline' where state = 'online'";

MySQL mysql;
if(mysql.connect())
{
mysql.update(sql);
}
}

4.测试

image-20250122175321512

张三登录后,服务器异常退出,张三的状态由登录后的online改为服务器退出后的offline

image-20250122175425332