const { createServer } = require("http"); const { Server } = require("socket.io"); const httpServer = createServer(); const io = new Server(httpServer); // 保存群列表 var GroupList = {}; // 保存聊天记录 var HistoryList = {}; io.on("connection", (socket) => { console.log("a user connected:", socket.id); socket.on("UserLogin", (res) => { // 如果已经有房间了 if (GroupList.hasOwnProperty(res.room)) { console.log("1 如果已经有房间了"); // 判断房间是否已经有这个用户名了 var isHave = GroupList[res.room].filter((v) => { return v.name == res.name; }); // 没有这个用户 if (isHave.length == 0) { console.log("2 没有这个用户"); // 将用户加入房间数组 GroupList[res.room].push({ name: res.name, img: res.img, }); socket.emit("LoginSuccess", res); } else { console.log("3 有这个用户"); socket.emit("UserAlready", "用户名已存在,请改名!"); } } else { console.log("4 没有房间"); GroupList[res.room] = []; // 将用户加入房间数组 GroupList[res.room].push({ name: res.name, img: res.img, }); socket.emit("LoginSuccess", res); } }); socket.on("JoinRoom", (res) => { // 将当前 socket 加入群聊 socket.join(res.room); // 向房间内的所有人发送欢迎信息 io.in(res.room).emit("WelcomeUser", `${res.name} 加入群聊`); io.in(res.room).emit("RoomOnline", GroupList[res.room]); }); socket.on("SendMessage", (res) => { console.log("后端收到的消息为:", res); socket.to(res.room).emit("SetMessage", res); }); socket.on("Shake", (res) => { console.log("Shake"); socket.to(res.room).emit("StartShake", true); }); socket.on("UserDisconnect", (res) => { console.log("有个客户端掉线了"); if (GroupList.hasOwnProperty(res.room)) { console.log("==============="); GroupList[res.room] = GroupList[res.room].filter((v) => { return v.name != res.name; }); io.in(res.room).emit("WelcomeUser", `${res.name} 离开群聊`); // 更新在线人数 io.in(res.room).emit("RoomOnline", GroupList[res.room]); } }); }); httpServer.listen(3000);