Files
ClassContent/项目合集/聊天室/chat_backend/index.js
2024-09-27 02:06:13 +08:00

129 lines
3.2 KiB
JavaScript

const { log } = require('console');
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
app.get('/', (req, res) => {
res.send('<h1>Hello world</h1>');
});
// 用户登录后保存用户登录列表
var OnlineUserList = [];
// 保存群列表
var GroupList = {};
// 保存群的聊天记录
var HistoryList = {};
// 消息分为两种
// 用户消息
// 系统消息
// 监听客户端是否和服务器建立链接了
io.on('connection', (socket) => {
// 用户登录
socket.on("UserLogin", (res) => {
var isHaveUser = OnlineUserList.filter(v=>{
return v.name == res.name
})
// 判断是否有这个用户
if (isHaveUser.length == 0) {
OnlineUserList.push(res)
socket.emit('LoginSuccess', res)
} else {
socket.emit('UserAlready', '用户名已存在,请改名!');
}
})
/**
* 加入房间
*/
socket.on("JoinRoom", (res) => {
// 如果存在,表示房间有了
if (GroupList.hasOwnProperty(res.room)) {
var isHave = GroupList[res.room].filter(v=>{
return v.name == res.name
})
// 没有
if (isHave.length == 0) {
GroupList[res.room].push({
name: res.name,
url: res.url
});
socket.join(res.room);
// 向房间内的所有人发送欢迎信息
io.in(res.room).emit('WelcomeUser', `欢迎用户:${res.name}加入群`);
io.in(res.room).emit('RoomOnline', GroupList[res.room]);
} else {
socket.join(res.room);
io.in(res.room).emit('RoomOnline', GroupList[res.room]);
}
} else {
// 生成房间,但是人数为空
GroupList[res.room] = []
// 将用户放入群列表中
GroupList[res.room].push({
name: res.name,
url: res.url
});
// 将当前连接的客户端加入群聊
socket.join(res.room);
// 向房间内的所有人发送欢迎信息
io.in(res.room).emit('WelcomeUser', `欢迎用户:${res.name}加入群`);
io.in(res.room).emit('RoomOnline', GroupList[res.room]);
// {
// "1001": []
// }
}
})
/**
* 发送消息
*/
socket.on("SendMessage", (res) => {
// 保存历史记录,但是先判断是否已经有人聊天了
if (!HistoryList.hasOwnProperty(res.room)) {
HistoryList[res.room] = [];
}
HistoryList[res.room].push(res)
socket.to(res.room).emit('SetMessage', res);
})
/**
* 返回聊天记录给前端
*/
socket.on("GetHistoryList", (res) => {
if (HistoryList.hasOwnProperty(res.room)) {
socket.emit("SetHistory", HistoryList[res.room]);
} else {
socket.emit("SetHistory", []);
}
})
/**
* 抖动效果
*/
socket.on("Shake", (res) => {
socket.to(res.room).emit('StartShake');
})
// disconnect 客户端掉线的时候,服务器能够通过 disconnect 事件监听到
socket.on('disconnect', () => {
console.log('有个客户端掉线了');
});
});
http.listen(3000, () => {
console.log('listening on *:3000');
});