浏览代码

增加前端踢人

gemercheung 3 年之前
父节点
当前提交
9e30754525
共有 2 个文件被更改,包括 51 次插入39 次删除
  1. 3 4
      src/controller/room/assistant.js
  2. 48 35
      src/controller/room/index.js

+ 3 - 4
src/controller/room/assistant.js

@@ -318,7 +318,6 @@ export class RoomAssistant {
         roomsPerson: AllRoomUsers,
       });
       // await this.notifyUsersChange(roomId, user, true);
-
     } catch (error) {
       this.room.logger.error("assistant::startCall:", error);
     }
@@ -378,10 +377,10 @@ export class RoomAssistant {
   async getOpenidInRoom(roomId, oid) {
     const AllRoomUsers = await getAllRoomUsers(roomId);
     if (AllRoomUsers.length > 0) {
-      const user = AllRoomUsers.find((item) => item.oid === oid);
-      return user;
+      const users = AllRoomUsers.filter((item) => item.oid === oid);
+      return Promise.resolve(users);
     } else {
-      return false;
+      return Promise.resolve([]);
     }
   }
   // 主动断开

+ 48 - 35
src/controller/room/index.js

@@ -104,9 +104,19 @@ export class RoomController extends BasicController {
       }
       if (user.oid) {
         const hasDuplicateUser = await this.roomAssistant.getOpenidInRoom(this.roomId, user.oid);
-        if (hasDuplicateUser) {
-          this.logger.info("hasDuplicateUser", hasDuplicateUser);
-          await removeRoomUser(this.roomId, hasDuplicateUser.userId);
+        if (hasDuplicateUser.length > 0) {
+          this.logger.info(
+            "hasDuplicateUser",
+            hasDuplicateUser.reduce((prev, current) => {
+              prev.concat(current.userId);
+            }, []),
+          );
+          const removeAll = [];
+          Array.from(hasDuplicateUser).forEach((duplicateUser) => {
+            removeAll.push(removeRoomUser(this.roomId, duplicateUser.userId));
+          });
+          const res = Promise.all(removeAll);
+          console.log("去重完成");
         }
       }
       // if (assistantId && Number(this.userId) !== Number(assistantId) && !this.isHoster(this.user.role)) {
@@ -242,40 +252,43 @@ export class RoomController extends BasicController {
      */
 
     this.socket.on(EVENT.kickUser, async ({ data, from }) => {
-      try {
-        const userId = `user:${data.userId}`;
-        const roomId = `room:${data.sceneNumber}:${data.roomId}`;
-        const currentUser = await getCurrentUser(userId, FROMTYPE.MiniAPP);
-        const user = JSON.parse(currentUser);
-        // 被踢人不能是hoster
-        console.log("user", JSON.stringify(user));
-        if (user && !this.isHoster(user.role)) {
-          console.log("currentUser.role", user.role);
-          const isKick = await this.roomAssistant.kickPersion(roomId, userId);
-          if (isKick) {
-            const AllRoomUsers = await getAllRoomUsers(roomId);
-            console.log("kickUser-AllRoomUsers", AllRoomUsers.length);
-            this.logger.info("kickUser", currentUser, userId, roomId);
-            // 通知管理
-            this.socket.emit(EVENT.someOneLeaveRoom, {
-              user: user,
-              roomsPerson: AllRoomUsers,
-            });
-            // 通知房间人员变动
-            this.socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, {
-              user: user,
-              roomsPerson: AllRoomUsers,
-            });
-            // 如果踢人后 如何通知?
-            this.socket.broadcast.to(roomId).emit(EVENT.beKicked, data);
+      // 要前端断线才可以踢人
+      setTimeout(async () => {
+        try {
+          const userId = `user:${data.userId}`;
+          const roomId = `room:${data.sceneNumber}:${data.roomId}`;
+          const currentUser = await getCurrentUser(userId, FROMTYPE.MiniAPP);
+          const user = JSON.parse(currentUser);
+          // 被踢人不能是hoster
+          console.log("user", JSON.stringify(user));
+          if (user && !this.isHoster(user.role)) {
+            console.log("currentUser.role", user.role);
+            const isKick = await this.roomAssistant.kickPersion(roomId, userId);
+            if (isKick) {
+              const AllRoomUsers = await getAllRoomUsers(roomId);
+              console.log("kickUser-AllRoomUsers", AllRoomUsers.length);
+              this.logger.info("kickUser", currentUser, userId, roomId);
+              // 通知管理
+              this.socket.emit(EVENT.someOneLeaveRoom, {
+                user: user,
+                roomsPerson: AllRoomUsers,
+              });
+              // 通知房间人员变动
+              this.socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, {
+                user: user,
+                roomsPerson: AllRoomUsers,
+              });
+              // 如果踢人后 如何通知?
+              this.socket.broadcast.to(roomId).emit(EVENT.beKicked, data);
+            }
+          } else {
+            const nickname = user.nickname || "";
+            this.logger.warn(nickname + "是房主,不能被踢!!");
           }
-        } else {
-          const nickname = user.nickname || "";
-          this.logger.warn(nickname + "是房主,不能被踢!!");
+        } catch (error) {
+          console.error("error", error);
         }
-      } catch (error) {
-        console.error("error", error);
-      }
+      }, 1000);
     });
     /**
      * 设置助手