Files
ClassContent/历届学生/fontendseven/项目练习/上课项目/聊天/backend/index.js
2024-09-27 02:06:13 +08:00

110 lines
3.1 KiB
JavaScript

var WebSocketServer = require('ws').Server,
ws = new WebSocketServer({ port: 3000 });
// 群的数据结构
// 10086: [
// {
// userName: '刘兵',
// userAuthor: 'http://1.com/1.jpg',
// roomNumber: 10086,
// userSocket: "WebSocket",
// type: 1 ,// 1 群主 2 管理员 3 群成员
// }
// ]
var groundList = { }
ws.on('connection', function (io, req) {
console.log('前端简历链接....');
io.on('message', function (message) {
var text = JSON.parse(message.toString());
switch (text.type) {
case "SocketHealthy":
send(io,{ type: 'SocketHealthy', data: "pong" })
break;
case "SocketUser":
console.log("用户消息:", text)
switch (text.action) {
case "send":
SendAllExceptTheSender(text.data)
break;
case "userList":
SendAll(text.data, {
type: "SocketUser",
action: 'list',
data: groundList[text.data.room]
})
break;
}
// send(io,{ type: 'SocketUser', data: "这是SocketUser的测试消息" })
break;
case "SocketSystem":
console.log("系统消息:", text)
switch (text.action) {
case "join":
joinUser(io,text.data)
break;
}
break;
}
});
});
function joinUser(io,info) {
console.log("用户加群:", info);
// 如果已经有这个群了
if (groundList.hasOwnProperty(info.room)) {
console.log("已经有这个群了")
groundList[info.room].push({
userName: info.name,
userAuthor: info.img,
roomNumber: info.room,
userSocket: io,
type: 3
})
// 没有这个群
} else {
console.log("没有这个群")
groundList[info.room] = [];
groundList[info.room].push({
userName: info.name,
userAuthor: info.img,
roomNumber: info.room,
userSocket: io,
type: 1
});
}
SendAll(info, {
type: 'SocketSystem',
action: 'joinMessage',
data: `欢迎用户 ${info.name} 加入群聊!`
})
console.log(groundList)
}
function SendAll(info, message) {
var currentUserGround = groundList[info.room];
currentUserGround.forEach(v => {
v.userSocket.send(JSON.stringify(message))
})
}
// 向群内所有人推送消息,但是排除消息发送者自己
function SendAllExceptTheSender(info) {
var currentUserGround = groundList[info.room];
currentUserGround.forEach(v => {
if (info.name != v.userName) {
v.userSocket.send(JSON.stringify({
type: 'SocketUser',
action: 'to',
data: info
}))
}
})
}
function send(socket,data) {
socket.send(JSON.stringify(data));
}