Browse Source

修复,ask-currentscene

gemercheung 2 years ago
parent
commit
d51a4adb78

+ 37 - 5
src/components/chatRoom/controls/actions.ts

@@ -6,7 +6,8 @@ import consola from 'consola';
 import { useSocket } from '/@/hooks/userSocket';
 import { useRoom, SceneItemType } from '/@/hooks/useRoom';
 import { useI18n } from '/@/hooks/useI18n';
-
+import browser from '/@/utils/browser';
+import { unref } from 'vue';
 interface ActionDataType {
   type: string;
   data: any;
@@ -17,6 +18,10 @@ interface ActionDataType {
   words?: boolean;
   muted?: boolean;
 }
+interface sceneAnswerType {
+  scene?: string;
+  pose?: string;
+}
 
 export function handleActions({
   data,
@@ -68,7 +73,11 @@ export function handleActions({
       handleTagImageIndex(data);
       break;
     case 'ask-currentscene':
-      handleAskCurrentscene(data);
+      handleAskCurrentscene();
+      break;
+    case 'answer-currentscene':
+      console.log('handleAnswerCurrentscene', data);
+      handleAnswerCurrentscene(data as sceneAnswerType);
       break;
     case 'error':
       // Dialog.toast({ content: `房间未找到`, type: 'error' });
@@ -189,9 +198,32 @@ const handleChangeScene = (data: SceneItemType) => {
   console.log('handleChangeScene', data);
   data && changeScene(data);
 };
-//
-const handleAskCurrentscene = (data) => {
-  console.log('data', data);
+// 由leader回复转场
+const handleAskCurrentscene = () => {
+  const { socket } = useSocket();
+  const rtcStore = useRtcStore();
+  if (rtcStore.isLeader) {
+    socket.emit('action', {
+      type: 'answer-currentscene',
+      data: {
+        scene: browser.getURLParam('m'),
+        pose: browser.getURLParam('pose'),
+      },
+    });
+  }
+};
+
+const handleAnswerCurrentscene = (data: sceneAnswerType) => {
+  const rtcStore = useRtcStore();
+  const { currentScene, changeScene, sceneList } = useRoom();
+  if (!rtcStore.isLeader) {
+    if (unref(currentScene)?.num !== data.scene) {
+      const otherScene = unref(sceneList).find((item) => item.num === data.scene);
+      otherScene && changeScene(otherScene);
+    }
+    // if(unref(currentScene))
+    // debugger;
+  }
 };
 
 const handleTagImageIndex = (data) => {

+ 3 - 0
src/components/chatRoom/controls/join.ts

@@ -69,6 +69,9 @@ export function handleJoin(data: any) {
       socket.emit('action', {
         type: 'user-init',
       });
+      socket.emit('action', {
+        type: 'ask-currentscene',
+      });
     } else {
       const { currentScene } = useRoom();
       console.log('currentScene', unref(currentScene));

+ 4 - 1
src/hooks/useRoom.ts

@@ -1,6 +1,7 @@
 import browser from '/@/utils/browser';
 import axios from 'axios';
 import { ref, computed, unref } from 'vue';
+import { useRtcStore } from '../store/modules/rtc';
 
 const roomParam = browser.getURLParam('roomId');
 
@@ -29,7 +30,7 @@ export interface SceneItemType {
 
 export const room = ref<Nullable<roomDataType>>(null);
 export const roomId = roomParam && roomParam.substr(7);
-export const sceneList = computed(() => unref(room)?.sceneData || []);
+export const sceneList = computed<SceneItemType[]>(() => unref(room)?.sceneData || []);
 export const isLeader = browser.getURLParam('role') === 'leader';
 
 interface roomParamsType {
@@ -74,6 +75,8 @@ export const currentScene = computed(() => {
 });
 
 export const changeScene = (scene: SceneItemType) => {
+  const rtcStore = useRtcStore();
+  rtcStore.clearMemberList();
   if (currentScene.value?.num !== scene.num && scene?.num.length) {
     console.log(scene, currentScene.value);
     const params = new URLSearchParams(location.search);