129 lines
3.2 KiB
JavaScript
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');
|
|
}); |