gemercheung 3 năm trước cách đây
mục cha
commit
6f2b2049b8

+ 2 - 2
.env.development

@@ -1,5 +1,5 @@
-PORT=12000
-SOCKET_PORT=12000
+PORT=12001
+SOCKET_PORT=12001
 CONTAINER_NAME='socket-chat-IM'
 VOLUME_DIR=./data
 REDIS_HOST=127.0.0.1

+ 20 - 9
src/controller/room/assistant.js

@@ -1,7 +1,7 @@
 // 房间行为助手
 import { EVENT, CODEMEG, FROMTYPE } from "../../enum/index.js";
 import { getCurrentUser, updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../../service/userService.js";
-import { setRoomConfig, getRoomConfig } from "../../service/roomConfigService.js";
+import { setRoomConfig, getRoomConfig, isRoomMaster } from "../../service/roomConfigService.js";
 import { subClient } from "../../connection/redis.js";
 export class RoomAssistant {
   constructor(socket, redis, room) {
@@ -52,21 +52,26 @@ export class RoomAssistant {
    * @param {*} roomId
    * @param {*} userId
    */
-  async setAssistant(roomId, userId) {
+  async setAssistant(roomId, userId, callback) {
     try {
       const userRes = await getCurrentUser(roomId, userId, FROMTYPE.MiniAPP);
       const user = JSON.parse(userRes);
       const roomConfigRes = await getRoomConfig(roomId);
-      // const roomConfig = JSON.parse(roomConfigRes);
-      // roomConfig.assistantId = user.userId;
+      if (this.room.userId == userId) {
+        console.log("不能设置自己为助理!");
+        return;
+      }
 
       //  0是助手,1不是助手
-      const userObj = Object.assign({}, { isAssistant: 0 }, user);
-      const roomObj = Object.assign({}, { assistantId: user.userId }, roomConfigRes);
-      console.log("setAssistant", userObj, roomObj);
+      const userObj = Object.assign({}, user, { isAssistant: 0 });
+      const roomObj = Object.assign({}, roomConfigRes, { assistantId: user.userId });
+      // console.log("setAssistant", userObj, roomObj);
+      // console.error("roomObj", roomObj);
       await updateRoomUser(roomId, userId, userObj);
       // // 更新roomConfig 设置助手id
       await setRoomConfig(roomId, roomObj);
+      // callback(user);
+      this.room.notify.notifyBeAssistant(roomId, userId, user);
     } catch (error) {
       this.room.logger.error("setAssistant", error);
     }
@@ -188,8 +193,14 @@ export class RoomAssistant {
           this.room.logger.info("房主主动创建房间 :", { roomId, userId });
           await this.buildRoom(roomId, userId, user);
         } else {
-          this.room.logger.info("房主已存在房间 :", { roomId, userId, from: user.from });
-          this.notifyUserJitter(roomId);
+          //TODO
+          const checkIsRoomMaster = await isRoomMaster(roomId, userId);
+          console.log("isRoomMaster", checkIsRoomMaster);
+          if (checkIsRoomMaster) {
+            this.room.logger.info("房主已存在房间 :", { roomId, userId, from: user.from });
+            // await this.joinRoom(roomId, userId, user);
+            this.notifyUserJitter(roomId);
+          }
         }
       }
       user.isInRoom = true;

+ 21 - 8
src/controller/room/index.js

@@ -1,9 +1,10 @@
 import { ROLES, CODEMEG, EVENT, FROMTYPE } from "../../enum/index.js";
 import { getCurrentUser, updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../../service/userService.js";
 // import { watchRoomService } from "../../service/watchRoomService.js";
-import { setRoomConfig, getRoomConfig, updateRoomConfigByKey } from "../../service/roomConfigService.js";
+import { setRoomConfig, getRoomConfig, updateRoomConfigByKey, isRoomMaster } from "../../service/roomConfigService.js";
 
 import { RoomAssistant } from "./assistant.js";
+
 import { Notify } from "./notify.js";
 import { BasicController } from "../basicController.js";
 
@@ -77,14 +78,21 @@ export class RoomController extends BasicController {
 
       updateUser(this.userId, userObj);
       // this.sysUsers.push(this.user);
-
       // 只有来源于小程序用户信息才记录到redis
       if (this.isHoster(this.user.role)) {
         if ([FROMTYPE.MiniAPP].includes(Number(this.user.from))) {
-          await setRoomConfig(this.roomId, {
-            userLimitNum: this.user.userLimitNum,
-            enableTalk: this.user.enableTalk === "true" ? true : false,
-          });
+          const roomConfig = getRoomConfig(this.roomId);
+          const checkoutMaster = await isRoomMaster(this.roomId, this.userId);
+          const isNoExistMaster = "masterId" in roomConfig;
+          console.log("checkoutMaster-isNoExistMaster", checkoutMaster, !isNoExistMaster);
+
+          if (checkoutMaster || !isNoExistMaster) {
+            await setRoomConfig(this.roomId, {
+              masterId: this.userId,
+              userLimitNum: this.user.userLimitNum,
+              enableTalk: this.user.enableTalk === "true" ? true : false,
+            });
+          }
         }
       }
 
@@ -155,8 +163,10 @@ export class RoomController extends BasicController {
     this.socket.on(EVENT.changeRoomEnableTalk, async (data) => {
       // this._roomsConfig[roomId].enableTalk = data;
       try {
-        await setRoomConfig(this.roomId, data);
         const roomConfig = await getRoomConfig(this.roomId);
+        roomConfig.enableTalk = data;
+        await setRoomConfig(this.roomId, roomConfig);
+        console.log("setRoomConfig", data, roomConfig);
         this.socket.broadcast.to(this.roomId).emit(EVENT.changeRoomEnableTalk, roomConfig);
       } catch (error) {
         this.logger.error("event:changeRoomEnableTalk", error);
@@ -213,7 +223,8 @@ export class RoomController extends BasicController {
             this.socket.broadcast.to(roomId).emit(EVENT.beKicked, data);
           }
         } else {
-          this.logger.warn(user.nickname || "" + " is hoster,cant be out of room");
+          const nickname = user.nickname || "";
+          this.logger.warn(nickname + "是房主,不能被踢!!");
         }
       } catch (error) {
         console.error("error", error);
@@ -224,7 +235,9 @@ export class RoomController extends BasicController {
       const userId = `user:${data.userId}`;
       const roomId = `room:${data.sceneNumber}:${data.roomId}`;
       console.log("设置助手", userId, roomId);
+
       this.roomAssistant.setAssistant(roomId, userId);
+      // this.notify.notifyBeAssistant(roomId, userId, user);
     });
 
     if (this.debugger) {

+ 5 - 3
src/controller/room/notify.js

@@ -12,10 +12,12 @@ export class Notify {
     this.room = room;
   }
 
-  notifyBeAssistant(userId, roomId) {
-    const user = {};
+  notifyBeAssistant(userId, roomId, user) {
+    this.socket.emit(EVENT.beAssistant, {
+      user: user,
+    });
     this.socket.broadcast.to(roomId).emit(EVENT.beAssistant, {
-      user: user
+      user: user,
     });
   }
 }

+ 16 - 1
src/service/roomConfigService.js

@@ -19,5 +19,20 @@ const updateRoomConfigByKey = async (roomId, keyName, value) => {
   const updateObj = Object.assign({}, res, newKey);
   return pubClient.hSet(roomConfigKey, updateObj);
 };
+const isRoomMaster = async (roomId, userId) => {
+  // const roomConfigKey = `config:${roomId}`;
+  const res = await getRoomConfig(roomId);
 
-export { setRoomConfig, getRoomConfig, removeRoomConfig, updateRoomConfigByKey };
+  if (res) {
+    console.log("isRoomMaster-res", userId);
+    if (res.masterId == userId) {
+      return Promise.resolve(true);
+    } else {
+      return Promise.resolve(false);
+    }
+  } else {
+    return Promise.resolve(false);
+  }
+};
+
+export { setRoomConfig, getRoomConfig, removeRoomConfig, updateRoomConfigByKey, isRoomMaster };