176 lines
4.3 KiB
JavaScript
176 lines
4.3 KiB
JavaScript
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");
|
||
}); |