const express = require("express"); const { writeFileSync } = require("fs"); const { createServer } = require("http"); const { Server } = require("socket.io"); const app = express(); app.use('/upload', express.static('upload')) const httpServer = createServer(app); const io = new Server(httpServer, { cors: { origin: "*", allowedHeaders: "*", credentials: true } }); let onlineUserSocket = [] // 在线群和用户 let onlineUserList = { // "10086": [ // { // socketId: SWERGFAEGRFBE345Y // room_id: "10086", // user_img: "../img/7.jpg", // user_name: "bmy", // level: 1, // 1群主(第一个加群的人) 2管理员(群主右键设置的) 3普通成员(之后进入的) // }, // { // socketObject: socket // room_id: "10086", // user_img: "../img/7.jpg", // user_name: "bmy", // level: 1, // 1群主(第一个加群的人) 2管理员(群主右键设置的) 3普通成员(之后进入的) // } // ], // "10011": [ // { // room_id: "10011", // user_img: "../img/7.jpg", // user_name: "bmy", // level: 1, // } // ] } // 聊天记录 let ChatRecords = { "10086": [ { room_id: "10086", user_img: "../img/7.jpg", user_name: "bmy", timestamp: '1234564323456', level: 1, // 1群主(第一个加群的人) 2管理员(群主右键设置的) 3普通成员(之后进入的) message: '这是我发的消息' } ] } io.on("connection", (socket) => { console.log("链接成功..."); // 加入群聊 socket.on('JoinRoom', (msg) => { socket.roomId = msg.room_id // 已经存在了这个群 if (onlineUserList.hasOwnProperty(msg.room_id)) { if (checkUserNameisExist(msg)) { msg.level = 3 // msg.socket = socket onlineUserList[msg.room_id].push(msg) } msg.socketId = socket.id onlineUserSocket.push(socket) socket.join(msg.room_id); console.log("已经存在了这个群"); // 不存在这个群 } else { onlineUserList[msg.room_id] = [] msg.socketId = socket.id onlineUserSocket.push(socket) msg.level = 1 onlineUserList[msg.room_id].push(msg) console.log(onlineUserList[msg.room_id]); socket.join(msg.room_id); console.log("不存在这个群"); } io.in(msg.room_id).emit("onLineUserList", onlineUserList[msg.room_id]); io.in(msg.room_id).emit("WelcomeUser", `欢迎用户 ${msg.user_name} 加入群聊`); }); socket.on('sendMessage', (msg) => { console.log("msg: ", msg); socket.to(msg.room_id).emit("ServerMessage", msg); }) socket.on('uploadFile', (msg) => { console.log("图片base64: ", msg); msg.user.message = saveFile(msg) socket.to(msg.user.room_id).emit("uploadImgName", msg.user); }) socket.on('socketShake', (msg) => { if (msg.hasOwnProperty("clickUserName")) { console.log("私发抖动"); let userSocket = onlineUserSocket.filter(v => onlineUserList[msg.room_id].filter(v => msg.clickUserName == v.user_name)[0].socketId == v.id)[0]; let a = parseInt(Math.random() * 100000) console.log("a: ", a); socket.join(a); userSocket.join(a) // console.log("socket: ", socket.id); // console.log("userSocket: ", userSocket.id); // console.log(socket.rooms); // console.log(userSocket.rooms); io.in(a).emit("ShakeMessage", msg); io.in(a).emit("openShake"); } else { console.log("群发抖动"); io.in(msg.room_id).emit("openShake"); io.in(msg.room_id).emit("ShakeMessage", msg); } }) socket.on("disconnect", (reason) => { socket.leave(socket.roomId); }); }); function saveFile(imgData) { var base64Data = imgData.base64.replace(/^data:image\/\w+;base64,/, ""); var dataBuffer = Buffer.from(base64Data, 'base64'); let fileName = `${new Date().getTime().toString() + (Math.random() * new Date().getTime())}.${imgData.fileType}` writeFileSync(`upload/${fileName}`, dataBuffer); return fileName } function checkUserNameisExist(msg) { let arr = onlineUserList[msg.room_id].filter(v => v.user_name == msg.user_name) return arr.length == 0 ? true : false } httpServer.listen(3000, () => { console.log("ws运行在: ws://127.0.0.1:3000"); });