Browse Source

增加楼层同步

gemercheung 2 years ago
parent
commit
94bed68a5b
2 changed files with 36 additions and 3 deletions
  1. 16 1
      src/components/basic/FloorSwitch.vue
  2. 20 2
      src/components/chatRoom/controls/actions.ts

+ 16 - 1
src/components/basic/FloorSwitch.vue

@@ -27,7 +27,9 @@
 <script setup lang="ts">
 <script setup lang="ts">
   import { computed } from 'vue';
   import { computed } from 'vue';
   import { useApp } from '/@/hooks/userApp';
   import { useApp } from '/@/hooks/userApp';
+  import { useSocket } from '/@/hooks/userSocket';
   import { useAppStore } from '/@/store/modules/app';
   import { useAppStore } from '/@/store/modules/app';
+  import { useRtcStore } from '/@/store/modules/rtc';
   import { useSceneStore } from '/@/store/modules/scene';
   import { useSceneStore } from '/@/store/modules/scene';
   import { useTourStore } from '/@/store/modules/tour';
   import { useTourStore } from '/@/store/modules/tour';
   const appStore = useAppStore();
   const appStore = useAppStore();
@@ -39,10 +41,23 @@
   const floors = computed(() => sceneStore.floors.reverse());
   const floors = computed(() => sceneStore.floors.reverse());
   const floorId = computed(() => appStore.floorId);
   const floorId = computed(() => appStore.floorId);
   const showTours = computed(() => tourStore.showTours);
   const showTours = computed(() => tourStore.showTours);
+  const rtcStore = useRtcStore();
 
 
   const onGotoFloor = (id) => {
   const onGotoFloor = (id) => {
     //   store.commit("setFloor", id);
     //   store.commit("setFloor", id);
-    appStore.setFloor(id);
+    if (rtcStore.isLeader || appStore.isTourMode) {
+      const { socket } = useSocket();
+      appStore.setFloor(id);
+      if (rtcStore.isLeader) {
+        socket &&
+          socket.emit('action', {
+            type: 'sync-floor',
+            data: {
+              floorId: id,
+            },
+          });
+      }
+    }
   };
   };
   useApp().then((sdk) =>
   useApp().then((sdk) =>
     sdk.Camera.on('mode.beforeChange', ({ toMode, floorIndex }) => {
     sdk.Camera.on('mode.beforeChange', ({ toMode, floorIndex }) => {

+ 20 - 2
src/components/chatRoom/controls/actions.ts

@@ -8,6 +8,7 @@ import { useRoom, SceneItemType } from '/@/hooks/useRoom';
 import { useI18n } from '/@/hooks/useI18n';
 import { useI18n } from '/@/hooks/useI18n';
 import browser from '/@/utils/browser';
 import browser from '/@/utils/browser';
 import { unref } from 'vue';
 import { unref } from 'vue';
+import { useAppStore } from '/@/store/modules/app';
 interface ActionDataType {
 interface ActionDataType {
   type: string;
   type: string;
   data: any;
   data: any;
@@ -82,6 +83,10 @@ export function handleActions({
     case 'error':
     case 'error':
       // Dialog.toast({ content: `房间未找到`, type: 'error' });
       // Dialog.toast({ content: `房间未找到`, type: 'error' });
       handleError();
       handleError();
+
+    case 'sync-floor':
+      handleSyncFloor(data);
+
     default:
     default:
       break;
       break;
   }
   }
@@ -143,7 +148,7 @@ function handleUserJoin(members?: UserInfoType[], user?: UserInfoType) {
     message: '有人进来了',
     message: '有人进来了',
   });
   });
   const rtcStore = useRtcStore();
   const rtcStore = useRtcStore();
-
+  const appStore = useAppStore();
   members && rtcStore.setMemberList(members);
   members && rtcStore.setMemberList(members);
   const isMaxAlert = rtcStore.memberList.length > Number(import.meta.env.VITE_ROOM_MEMBER);
   const isMaxAlert = rtcStore.memberList.length > Number(import.meta.env.VITE_ROOM_MEMBER);
 
 
@@ -154,6 +159,7 @@ function handleUserJoin(members?: UserInfoType[], user?: UserInfoType) {
       name = t('action.hoster');
       name = t('action.hoster');
       Dialog.toast({ content: t('action.hosterEnterRoom') });
       Dialog.toast({ content: t('action.hosterEnterRoom') });
       socket.emit('action', { type: 'user-init' });
       socket.emit('action', { type: 'user-init' });
+      socket.emit('sync-floor', { floorId: appStore.floorId });
     }
     }
     const data: ChatContentType = {
     const data: ChatContentType = {
       role: user?.Role,
       role: user?.Role,
@@ -301,7 +307,7 @@ const handleLeaderDismiss = () => {
       closeTxt: t('base.cancel'),
       closeTxt: t('base.cancel'),
       isSingle: true,
       isSingle: true,
     },
     },
-    () => {},
+    () => { },
   );
   );
   setTimeout(() => {
   setTimeout(() => {
     closeSocket();
     closeSocket();
@@ -327,3 +333,15 @@ const handleError = () => {
     },
     },
   );
   );
 };
 };
+
+interface FloorType {
+  floorId: string;
+}
+const handleSyncFloor = (data: FloorType) => {
+  const rtcStore = useRtcStore();
+  const appStore = useAppStore();
+  if (!rtcStore.isLeader) {
+    console.log('data', data, rtcStore);
+    appStore.setFloor(data.floorId);
+  }
+};