Files
ClassContent/历届学生/font-end-nine/项目练习/学生项目/张婷/练习/聊天室/backend/index.js
2024-09-27 02:06:13 +08:00

90 lines
2.1 KiB
JavaScript

const { Server } = require("socket.io");
//初始化
const io = new Server(3000, {
// 端口 路径 适配器 连接超时等等
});
//!!!数据分组!!!!
//群信息保存
var onlineUser = {
// "groupName":[
// {
// name:"",
// ronm:"",
// img:"",
// type:""//1群主 2管理 3成员
// }
// ]
}
//聊天记录八平村
var chatRecord = {
// "groupName":[
// {
// // name:"",
// // ronm:"",
// // img:"",
// // type:""//1群主 2管理 3成员
// }
// ]
}
//!!!前后端连接同样也要分组!!!!
io.on("connection", (socket) => {
console.log("客户端建立连接了...");
//监听登录页面
socket.on("UserLogin", function (arg) {
console.log(arg);
//群已存在 3群成员
if (onlineUser.hasOwnProperty(arg.room)) {
arg.type = 3
//创建群 1群主 建立群数组为空
} else {
arg.type = 1
onlineUser[arg.room] = []
}
//保存登陆数据
onlineUser[arg.room].push(arg);
//将客户端添加到相同的room里
socket.join(arg.room);
//系统消息 欢迎新人
io.in(arg.room).emit("SystemMessage", `欢迎${arg.name}加入群聊`);
// console.log("onlineUser",onlineUser);
});
//服务器监听消息发送消息
socket.on("sendMessage", (arg) => {
//判断聊天记录是否是第一次建立
if (!chatRecord.hasOwnProperty(arg.room)) {
//是 则追加一个room为空用于存储后续相关数据
chatRecord[arg.room] = []
}
//将聊天记录保存
chatRecord[arg.room].push(arg)
//服务器推送消息
//除开发送者将详细推送给房间内所有人
socket.to(arg.room).emit("PushMessage", arg);
})
//监听在线成员询问事件
socket.on("getOnlineUser", (arg) => {
io.in(arg.room).emit("PushOnlineUser", onlineUser[arg.room]);
})
//【2后端】服务器监听窗口抖动
socket.on("SetShake", (arg) => {
socket.to(arg.room).emit("PushShake");
});
socket.on("disconnect", () => {
console.log("客户端断开连接了...");
})
});