gemercheung il y a 3 ans
Parent
commit
25908bdd38
1 fichiers modifiés avec 43 ajouts et 21 suppressions
  1. 43 21
      src/controller/roomController.js

+ 43 - 21
src/controller/roomController.js

@@ -2,7 +2,7 @@ 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 } from "../service/userService.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";
@@ -62,6 +62,7 @@ const joinRoom = async (roomId, userId, user) => {
 const leaveRoom = async (roomId, userId) => {
   logger.info("leaveRoom", roomId);
   await pubClient.hDel(roomId, userId);
+  return Promise.resolve();
 };
 
 /**
@@ -71,15 +72,16 @@ const leaveRoom = async (roomId, userId) => {
  */
 const joinRoomAction = async (roomId, userId, user, socket) => {
   const isJoinRoom = await pubClient.hExists(roomId, userId);
-  joinRoom(roomId, userId, user);
+  await joinRoom(roomId, userId, user);
   if (!isJoinRoom) {
     logger.info("加入房间 :", { userId, roomId, user });
     socket.join(roomId);
     const AllRoomUsers = await getAllRoomUsers(roomId);
-    socket.broadcast.emit(EVENT.roomIn, {
+    const roomConfig = await getRoomConfig(roomId);
+    socket.broadcast.to(roomId).emit(EVENT.roomIn, {
       user,
       roomsPerson: AllRoomUsers,
-      roomsConfig: {},
+      roomsConfig: roomConfig,
     });
   } else {
     logger.info(`已加入房间 :`, { userId });
@@ -96,11 +98,17 @@ const joinRoomAction = async (roomId, userId, user, socket) => {
 export const leaveRoomAction = async (roomId, userId, user, socket) => {
   logger.info("离开房间", userId);
   socket.leave(roomId);
-  leaveRoom(roomId, userId);
-  socket.broadcast.emit(EVENT.roomOut, {
+  await leaveRoom(roomId, userId);
+  const AllRoomUsers = await getAllRoomUsers(roomId);
+  const roomConfig = await getRoomConfig(roomId);
+  socket.broadcast.to(roomId).emit(EVENT.roomOut, {
     user,
-    // roomsPerson: sortRoomUser(roomsPerson),
-    // roomsConfig: this._roomsConfig[roomId],
+    roomsPerson: AllRoomUsers,
+    roomsConfig: roomConfig,
+  });
+  socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, {
+    user,
+    roomsPerson: AllRoomUsers,
   });
 };
 
@@ -118,6 +126,7 @@ const closeRoomAction = async (roomId, userId, user, socket) => {
   socket.broadcast.emit(EVENT.roomClose, { code: 3002, msg: CODEMEG[3002] });
 };
 export async function roomController(socket) {
+  // try {
   let user = socket.handshake.query;
   const { roomId, userId, sceneNum, isClient, role, userLimitNum, sceneNumber, roomType, from, enableTalk } = user;
   if (user) {
@@ -133,17 +142,14 @@ export async function roomController(socket) {
       const userObj = { ...user, isConnected: true, roomType: roomType || "" };
 
       updateUser(userUniqueId, userObj);
-      // await pubClient.hSet(userUniqueId, user);
-      // await pubClient.expire(userUniqueId, 60 * 60 * 24);
       // 房主自动创建房间
-
       if (isHoster(role)) {
         if ([FROMTYPE.MiniAPP].includes(Number(from))) {
           logger.debug("房主自动创建房间 :", { roomId: roomUniqueId, userId: userUniqueId, user });
           buildRoom(roomUniqueId, userUniqueId, user);
           await setRoomConfig(roomUniqueId, {
             userLimitNum,
-            enableTalk: enableTalk,
+            enableTalk: enableTalk === "true" ? true : false,
           });
         }
         socket.join(roomUniqueId);
@@ -158,27 +164,39 @@ export async function roomController(socket) {
     socket.on(EVENT.stopCall, stopCallAction.bind(null, roomUniqueId, userUniqueId, user, socket));
 
     socket.on(EVENT.action, (data) => {
-      console.log("room -action");
+      console.log("room-action", roomUniqueId);
       socket.broadcast.to(roomUniqueId).emit(EVENT.action, data);
     });
 
     // 通知 baseView 减少大量通知
     socket.on(EVENT.webSyncAction, (data) => {
+      console.log("同屏操作中");
       if ([FROMTYPE.base].includes(Number(from))) {
+        console.log("同屏操作中");
         socket.broadcast.to(roomUniqueId).emit(EVENT.webSyncAction, data);
       }
     });
 
     socket.onAny((event, data) => {
-      // console.log(`onAny:get ${event}`);
       console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
+      // if (event !== "webSyncAction") {
+      //   console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
+      // }
     });
 
     // test
+    socket.on(EVENT.changeRoomEnableTalk, async (data) => {
+      // this._roomsConfig[roomId].enableTalk = data;
+      await setRoomConfig(roomUniqueId, data);
+      const roomConfig = await getRoomConfig(roomUniqueId);
+      socket.broadcast.to(roomUniqueId).emit(EVENT.changeRoomEnableTalk, roomConfig);
+    });
 
     socket.on(EVENT.changeOnlineStatus, async (data) => {
+      console.log("changeOnlineStatus", data);
       user.onlineStatus = data.status;
       const AllRoomUsers = await getAllRoomUsers(roomUniqueId);
+      await updateRoomUser(roomUniqueId, userUniqueId, user);
       let actionName = user.onlineStatus ? "inRoom" : "leaveRoom";
       socket.broadcast.to(roomUniqueId).emit(EVENT.roomPersonChange, {
         roomsPerson: AllRoomUsers,
@@ -188,12 +206,9 @@ export async function roomController(socket) {
     });
 
     socket.on("disconnect", async (reason) => {
-      // leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
-      // watchRoomWithMaster(roomUniqueId, socket);
       console.log("reason", reason);
       if (reason === "transport close" || reason === "client namespace disconnect") {
         // 主动离开
-
         shotGunLeaveAction(
           {
             syncId,
@@ -220,7 +235,12 @@ export async function roomController(socket) {
       console.log("reconnect");
     });
   }
+  // } catch (error) {
+  //   logger.info("mainRoomController", error);
+  // }
 }
+// roomController end
+
 const shotGunLeaveAction = async (ids, socket, user) => {
   console.log("主动离开");
   const { syncId, roomId, userId } = ids;
@@ -252,18 +272,20 @@ const startCallAction = async (roomId, userId, user, socket) => {
   }
   user.isInRoom = true;
   const AllRoomUsers = await getAllRoomUsers(roomId);
-
+  await updateRoomUser(roomId, userId, user);
+  const roomConfig = await getRoomConfig(roomId);
   logger.info("roomId", roomId);
-  logger.info("AllRoomUsers", AllRoomUsers.length, AllRoomUsers);
+  logger.info("AllRoomUsers", AllRoomUsers.length);
   socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, {
     user,
     roomsPerson: AllRoomUsers,
   });
+  console.log("roomConfig", JSON.stringify(roomConfig));
 
-  socket.emit(EVENT.roomIn, {
+  socket.broadcast.to(roomId).emit(EVENT.roomIn, {
     user,
     roomsPerson: AllRoomUsers,
-    roomsConfig: {},
+    roomsConfig: roomConfig,
   });
   // } catch (error) {
   //   logger.error("startCallAction:", error);