|
@@ -1,199 +0,0 @@
|
|
-import { pubClient } from "../connection/redis.js";
|
|
|
|
-import { ROLES, CODEMEG, EVENT, FROMTYPE } from "../enum/index.js";
|
|
|
|
-import { io } from "../core/io.js";
|
|
|
|
-import { logger } from "../core/logger.js";
|
|
|
|
-import { updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../service/userService.js";
|
|
|
|
-import { watchRoomService } from "../service/watchRoomService.js";
|
|
|
|
-import { setRoomConfig, getRoomConfig } from "../service/roomConfigService.js";
|
|
|
|
-import { getSig } from "../core/getSig.js";
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * 检查是否是房主
|
|
|
|
- */
|
|
|
|
-const isHoster = (role) => {
|
|
|
|
- return String(role).toLowerCase() === ROLES.LEADER;
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * 创建房间
|
|
|
|
- * @param {*} roomId
|
|
|
|
- * @param {*} userId
|
|
|
|
- * @param {*} user
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-const buildRoom = async (roomId, userId, user) => {
|
|
|
|
- const hasJoin = await pubClient.HVALS(roomId, userId);
|
|
|
|
- if (hasJoin.length === 0) {
|
|
|
|
- logger.info("buildRoom", { roomId });
|
|
|
|
- await pubClient.hSet(roomId, userId, JSON.stringify(user));
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * 关闭房间
|
|
|
|
- * @param {*} roomId
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-const removeRoom = async (roomId) => {
|
|
|
|
- logger.info("removeRoom", { roomId });
|
|
|
|
- await pubClient.del(roomId);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * 加入房间
|
|
|
|
- * @param {*} roomId
|
|
|
|
- * @param {*} userId
|
|
|
|
- * @param {*} user
|
|
|
|
- */
|
|
|
|
-const joinRoom = async (roomId, userId, user) => {
|
|
|
|
- logger.info("joinRoom", { roomId });
|
|
|
|
- try {
|
|
|
|
- const hasRoom = await pubClient.exists(roomId);
|
|
|
|
- if (hasRoom) {
|
|
|
|
- await pubClient.hSet(roomId, userId, JSON.stringify(user));
|
|
|
|
- } else {
|
|
|
|
- logger.info("no room join");
|
|
|
|
- }
|
|
|
|
- return Promise.resolve();
|
|
|
|
- } catch (error) {
|
|
|
|
- logger.error(error);
|
|
|
|
- return Promise.reject(error);
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * 离开房间
|
|
|
|
- * @param {*} roomId
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-const leaveRoom = async (roomId, userId) => {
|
|
|
|
- logger.info("leaveRoom", roomId);
|
|
|
|
- await pubClient.hDel(roomId, userId);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * 加入房间
|
|
|
|
- * @param {*} clientRoom
|
|
|
|
- * @param {*} socket
|
|
|
|
- */
|
|
|
|
-const joinRoomAction = async (roomId, userId, user, socket) => {
|
|
|
|
- const isJoinRoom = await pubClient.hExists(roomId, userId);
|
|
|
|
- await joinRoom(roomId, userId, user);
|
|
|
|
- if (!isJoinRoom) {
|
|
|
|
- logger.info("加入房间 :", { userId, roomId, user });
|
|
|
|
- socket.join(roomId);
|
|
|
|
- const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
|
|
- const roomConfig = await getRoomConfig(roomId);
|
|
|
|
- socket.broadcast.emit(EVENT.roomIn, {
|
|
|
|
- user,
|
|
|
|
- roomsPerson: AllRoomUsers,
|
|
|
|
- roomsConfig: roomConfig,
|
|
|
|
- });
|
|
|
|
- } else {
|
|
|
|
- logger.info(`已加入房间 :`, { userId });
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
-/**
|
|
|
|
- * 离开房间
|
|
|
|
- * @param {*} clientRoom
|
|
|
|
- * @param {*} userUniqueId
|
|
|
|
- * @param {*} roomUniqueId
|
|
|
|
- * @param {*} socket
|
|
|
|
- */
|
|
|
|
-const leaveRoomAction = async (roomId, userId, user, socket) => {
|
|
|
|
- logger.info("离开房间", userId);
|
|
|
|
- await leaveRoom(roomId, userId);
|
|
|
|
- const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
|
|
- const roomConfig = await getRoomConfig(roomId);
|
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.roomOut, {
|
|
|
|
- user,
|
|
|
|
- roomsPerson: AllRoomUsers,
|
|
|
|
- roomsConfig: roomConfig,
|
|
|
|
- });
|
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, {
|
|
|
|
- user,
|
|
|
|
- roomsPerson: AllRoomUsers,
|
|
|
|
- });
|
|
|
|
- await socket.leave(roomId);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * 房主关闭房间
|
|
|
|
- * @param {*} clientRoom
|
|
|
|
- * @param {*} userUniqueId
|
|
|
|
- * @param {*} roomUniqueId
|
|
|
|
- * @param {*} socket
|
|
|
|
- */
|
|
|
|
-const closeRoomAction = async (roomId, userId, user, socket) => {
|
|
|
|
- logger.info("房主关闭房间", userId);
|
|
|
|
- console.log("isInRoom", socket.rooms.has(roomId));
|
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.roomClose, { code: 3002, msg: CODEMEG[3002] });
|
|
|
|
- await removeRoomAllUsers(roomId);
|
|
|
|
- socket.leave(roomId);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-const shotGunLeaveAction = async (ids, socket, user) => {
|
|
|
|
- console.log("主动离开");
|
|
|
|
- const { syncId, roomId, userId } = ids;
|
|
|
|
- socket.leave(syncId);
|
|
|
|
- socket.leave(roomId);
|
|
|
|
- await pubClient.del(syncId);
|
|
|
|
- await pubClient.del(userId);
|
|
|
|
-
|
|
|
|
- // if (isHoster(user.role)) {
|
|
|
|
- // await pubClient.del(roomId);
|
|
|
|
- // }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-const disconnectAction = async (ids, socket, user) => {
|
|
|
|
- const { roomId, userId } = ids;
|
|
|
|
- const userObj = { ...user, isConnected: false };
|
|
|
|
- updateUser(userId, userObj);
|
|
|
|
- watchRoomService(roomId, userId, socket);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-const startCallAction = async (roomId, userId, user, socket) => {
|
|
|
|
- try {
|
|
|
|
- if (!isHoster(user.role)) {
|
|
|
|
- console.log("不是房主");
|
|
|
|
- await joinRoomAction(roomId, userId, user, socket);
|
|
|
|
- } else {
|
|
|
|
- const hasRoom = await pubClient.hVals(roomId);
|
|
|
|
- if (hasRoom.length === 0) {
|
|
|
|
- logger.debug("房主主动创建房间 :", { roomId, userId });
|
|
|
|
- await buildRoom(roomId, userId, user);
|
|
|
|
- } else {
|
|
|
|
- logger.debug("房主已存在房间 :", { roomId, userId });
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- user.isInRoom = true;
|
|
|
|
- const AllRoomUsers = await getAllRoomUsers(roomId);
|
|
|
|
- const roomConfig = await getRoomConfig(roomId);
|
|
|
|
- await updateRoomUser(roomId, userId, user);
|
|
|
|
- logger.info("roomId", roomId);
|
|
|
|
- logger.info("AllRoomUsers", AllRoomUsers.length);
|
|
|
|
-
|
|
|
|
- socket.emit(EVENT.roomIn, {
|
|
|
|
- user,
|
|
|
|
- roomsPerson: AllRoomUsers,
|
|
|
|
- roomsConfig: roomConfig,
|
|
|
|
- });
|
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, {
|
|
|
|
- user,
|
|
|
|
- roomsPerson: AllRoomUsers,
|
|
|
|
- });
|
|
|
|
- } catch (error) {
|
|
|
|
- // console.error("startCallAction:", error);
|
|
|
|
- logger.error("startCallAction:", error);
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-const stopCallAction = (roomId, userId, user, socket) => {
|
|
|
|
- if (!isHoster(user.role)) {
|
|
|
|
- leaveRoomAction(roomId, userId, user, socket);
|
|
|
|
- } else {
|
|
|
|
- closeRoomAction(roomId, userId, user, socket);
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-export { isHoster, buildRoom, startCallAction, stopCallAction, joinRoomAction, leaveRoomAction, shotGunLeaveAction, disconnectAction };
|
|
|