gemercheung 3 years ago
parent
commit
703a1c60ef

+ 30 - 25
src/controller/room/assistant.js

@@ -63,7 +63,7 @@ export class RoomAssistant {
       }
       const role = cancel ? "customer" : "assistant";
       //  assistant是助手,customer是普通角色,操作role会好些
-      const userObj = Object.assign({}, user, { role: role });
+      const userObj = Object.assign({}, user, { role: role, order: 1 });
       const roomObj = Object.assign({}, roomConfigRes, { assistantId: user.userId });
       // console.log("setAssistant", userObj, roomObj);
       // console.error("roomObj", roomObj);
@@ -72,18 +72,23 @@ export class RoomAssistant {
       await setRoomConfig(roomId, roomObj);
       const AllRoomUsers = await getAllRoomUsers(roomId);
 
-      // 已存在的设置为false
-      Array.from(AllRoomUsers)
-        .filter((i) => i.role !== "leader")
-        .forEach(async (assistant) => {
-          if (assistant.userId !== userObj.userId) {
-            const unsetUserObj = Object.assign({}, assistant, { role: "customer" });
-            await updateRoomUser(roomId, userId, unsetUserObj);
-          }
+      // 同房间的其他人重置
+      const resetOther = Array.from(AllRoomUsers)
+        .filter((i) => i.role !== "leader" && i.userId !== userObj.userId)
+        .map((roomer) => {
+          const userKey = `user:${roomer.userId}`;
+          const unsetUserObj = Object.assign({}, roomer, { role: "customer", order: 2 });
+          // console.log("同房间的其他人重置", userKey, unsetUserObj);
+          return updateRoomUser(roomId, userKey, unsetUserObj);
         });
+      //总处理完成
+
+      Promise.all(resetOther).then(() => {
+        this.room.notify.notifyBeAssistant(roomId, userObj, this.room.userId);
+      });
+
       // console.log("AllRoomUsers", AllRoomUsers);
       // callback(user);
-      this.room.notify.notifyBeAssistant(roomId, userObj, this.room.userId);
     } catch (error) {
       this.room.logger.error("setAssistant:error", error);
     }
@@ -99,11 +104,10 @@ export class RoomAssistant {
       const userRes = await getCurrentUser(roomId, userId, FROMTYPE.MiniAPP);
       const user = JSON.parse(userRes);
       const roomConfigRes = await getRoomConfig(roomId);
-      if (this.room.userId == userId) {
-        console.log("不用设置自己的MIC!");
-        return;
-      }
-
+      // if (this.room.userId == userId && this.room.isHoster(this.room.user.role)) {
+      //   console.log("房主不用设置自己的MIC!");
+      //   return;
+      // }
       const reveseMic = Number(isAllowMic) === 0 ? 1 : 0;
       console.log("设置MIC权当前用户:: %s 新MIC权", user, reveseMic);
       const userObj = Object.assign({}, user, { isAllowMic: reveseMic });
@@ -113,16 +117,17 @@ export class RoomAssistant {
       await setRoomConfig(roomId, roomObj);
       const AllRoomUsers = await getAllRoomUsers(roomId);
       // 已存在的设置为false
-      Array.from(AllRoomUsers)
-        .filter((i) => i.role !== "leader")
-        .forEach(async (assistant) => {
-          if (assistant.userId !== userObj.userId) {
-            const unsetUserObj = Object.assign({}, assistant, { isAllowMic: 0 });
-            await updateRoomUser(roomId, userId, unsetUserObj);
-          }
-        });
 
-      this.room.notify.notifyBeHasMic(roomId, userObj, this.room.userId);
+      const resetOther = Array.from(AllRoomUsers)
+        .filter((i) => i.role !== "leader" && i.userId !== userObj.userId)
+        .map((roomer) => {
+          const userKey = `user:${roomer.userId}`;
+          const unsetUserObj = Object.assign({}, roomer, { isAllowMic: 0 });
+          return updateRoomUser(roomId, userKey, unsetUserObj);
+        });
+      Promise.all(resetOther).then(() => {
+        this.room.notify.notifyBeHasMic(roomId, userObj, this.room.userId);
+      });
     } catch (error) {
       this.room.logger.error("setMicRight::error", error);
     }
@@ -249,7 +254,7 @@ export class RoomAssistant {
           console.log("isRoomMaster", checkIsRoomMaster);
           if (checkIsRoomMaster) {
             this.room.logger.info("房主已存在房间 :", { roomId, userId, from: user.from });
-            // await this.joinRoom(roomId, userId, user);
+            await this.joinRoom(roomId, userId, user);
             // this.notifyUserJitter(roomId);
           } else {
             this.room.logger.error("存在非法房主", userId);

+ 17 - 1
src/controller/room/index.js

@@ -74,7 +74,23 @@ export class RoomController extends BasicController {
       const oneSceneNum = this.user.sceneNumber || this.user.sceneNum;
       const { userId, roomId } = this.user;
       await this.initParams(userId, roomId, oneSceneNum);
-      const userObj = { ...this.user, isConnected: true };
+      let order;
+      switch (user.role) {
+        case "leader":
+          order = 0;
+          break;
+        case "assistant":
+          order = 1;
+          break;
+        case "customer":
+          order = 2;
+          break;
+        default:
+          order = 2;
+          break;
+      }
+
+      const userObj = { ...this.user, isConnected: true, order };
 
       updateUser(this.userId, userObj);
       // this.sysUsers.push(this.user);

+ 1 - 0
src/controller/room/notify.js

@@ -15,6 +15,7 @@ export class Notify {
   async notifyBeAssistant(roomId, user, operator) {
     try {
       const AllRoomUsers = await getAllRoomUsers(roomId);
+      // console.log("AllRoomUsers", AllRoomUsers);
       const realOperator = String(operator).split(":")[1];
       console.log("notifyBeAssistant", realOperator);
       this.socket.emit(EVENT.beAssistant, {

+ 12 - 5
src/controller/syncDeviceController.js

@@ -32,21 +32,28 @@ export class SyncDeviceController extends BasicController {
     this.socket.on(EVENT.clientSyncAction, (data) => {
       this.socket.broadcast.to(this.room.syncId).emit(EVENT.clientSyncAction, data);
     });
-    this.socket.on(EVENT.changeVoiceStatus, async (data) => {
+    this.socket.on(EVENT.changeVoiceStatus, async ({ status, user }) => {
       try {
-        this.socket.broadcast.to(this.room.syncId).emit(EVENT.changeVoiceStatus, data);
         const updateUser = {
-          ...this.room.user,
-          voiceStatus: data.status,
+          ...user,
+          voiceStatus: status,
         };
+        console.log("changeVoiceStatus", updateUser);
+        
         const isUpdate = await updateRoomUser(this.room.roomId, this.room.userId, updateUser);
         const AllRoomUsers = await getAllRoomUsers(this.room.roomId);
-        this.logger.info("changeVoiceStatus", { roomId: this.room.roomId, data, AllRoomUsers: AllRoomUsers.length });
+
+        // this.logger.info("changeVoiceStatus", { roomId: this.room.roomId, data, AllRoomUsers: AllRoomUsers.length });
 
         this.socket.broadcast.to(this.room.roomId).emit(EVENT.changeVoiceStatus, {
           user: this.room.user,
           roomsPerson: AllRoomUsers,
         });
+        // this.socket.broadcast.to(this.room.syncId).emit(EVENT.changeVoiceStatus, {
+        //   ...data,
+        //   user: this.room.user,
+        //   roomsPerson: AllRoomUsers,
+        // });
       } catch (error) {
         this.logger.error("event::changeVoiceStatus", error);
       }

+ 4 - 2
src/service/userService.js

@@ -21,7 +21,7 @@ const updateUser = async (userId, userObj) => {
 
 const updateRoomUser = async (roomId, userId, userObj) => {
   try {
-    await pubClient.hSet(userId, userObj.from, JSON.stringify(userObj));
+    await pubClient.hSet(userId, userObj.from || 2, JSON.stringify(userObj));
     await pubClient.hSet(roomId, userId, JSON.stringify(userObj));
     return Promise.resolve(true);
   } catch (error) {
@@ -40,7 +40,9 @@ const removeRoomUser = (roomId, useId) => {
 const getAllRoomUsers = async (roomId) => {
   return new Promise(async (resolve) => {
     const AllRoomUsers = await pubClient.hVals(roomId);
-    const allUsers = Array.from(AllRoomUsers).map((i) => JSON.parse(i));
+    const allUsers = Array.from(AllRoomUsers)
+      .map((i) => JSON.parse(i))
+      .sort((a, b) => parseInt(a.order) - parseInt(b.order));
     return resolve(allUsers);
   });
 };