Files
ClassContent/历届学生/front-end-team-11/项目开发/上课项目/聊天室/backend/index.js
2024-09-27 02:06:13 +08:00

176 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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");
});