Ver código fonte

兼容火调

gemercheung 1 ano atrás
pai
commit
b4be09acfd

+ 11 - 1
src/App.vue

@@ -275,6 +275,8 @@
     });
     app.render();
     // SDK初始化结束
+
+    window.addEventListener('message', handleMessage, true);
   });
   // SDK global Event end
   onUnmounted(() => {
@@ -347,6 +349,14 @@
       }
     }
   });
+  const handleMessage = (event: MessageEvent) => {
+    if ('type' in event.data) {
+      const { type, data } = event.data;
+      if (type === 'sync-scene') {
+        console.warn('sync-scene', data);
+      }
+    }
+  };
 </script>
 
 <template>
@@ -356,7 +366,7 @@
       {{ maxNumber }}
     </span> -->
     <span>
-      {{ t('base.debuginfo') }}:公告,测试1.2.0-0807-01,角色:{{ rtcStore.role }} rId:{{
+      {{ t('base.debuginfo') }}:公告,测试1.2.0-9-7-01,角色:{{ rtcStore.role }} rId:{{
         rtcStore.roomId || browser.getURLParam('roomId')
       }}
       sceneIndex:{{ currentSceneIndex }} uid::

+ 7 - 0
src/components/chatRoom/controls/actions.ts

@@ -405,6 +405,13 @@ const handleLeaderDismiss = () => {
       if (isUsingMiniApp.value) {
         closeRoomForWechat();
       } else {
+        window.parent &&
+          window.parent.postMessage(
+            {
+              type: 'exit',
+            },
+            '*',
+          );
         closeSocket();
       }
     },

+ 7 - 1
src/components/chatRoom/dialog/close.vue

@@ -47,8 +47,14 @@
   };
 
   const endLiveConfirm = () => {
-    // socket.value.emit("disconnect");
     emit('confirmDialog');
+    window.parent &&
+        window.parent.postMessage(
+          {
+            type: 'exit',
+          },
+          '*',
+        );
   };
 </script>
 

+ 8 - 0
src/components/chatRoom/dialog/createdName.vue

@@ -84,6 +84,14 @@
       Dialog.toast({ content: t('base.saveSuccess'), type: 'success' });
       ifShow.value = false;
       emit('confirmDialog', unref(userName));
+      window.parent &&
+        window.parent.postMessage(
+          {
+            type: 'fillName',
+            data: unref(userName),
+          },
+          '*',
+        );
     }
   };
 </script>

+ 31 - 9
src/components/chatRoom/index.vue

@@ -89,9 +89,9 @@
           <div class="mic_on" v-if="!audioMuted"></div>
           <div class="mic_no" v-if="audioMuted"></div>
         </template>
-        <div style="font-size: 0.55rem; padding-top: 0.05rem">
+        <!-- <div style="font-size: 0.55rem; padding-top: 0.05rem">
           <ImageIcon type="detail" @click="handleDetail" />
-        </div>
+        </div> -->
         <div style="font-size: 0.65rem" v-if="isNativeLeader && sceneList.length > 1">
           <ImageIcon type="scene" @click="showScenes = !showScenes" />
         </div>
@@ -209,6 +209,7 @@
   import duration from 'dayjs/plugin/duration';
   import { useMiniApp } from '/@/hooks/useMiniApp';
 
+
   const { closeSocket } = useSocket();
   dayjs.extend(duration);
   // hook
@@ -591,11 +592,32 @@
     search.set('name', '');
     search.set('roomId', `${rtcStore.roomId}`);
     search.set('m', browser.getURLParam('m'));
+    const isFd = browser.getURLParam('platform') === 'fd';
+    if (browser.getURLParam('platform') && browser.getURLParam('platform').length > 0) {
+      search.set('platform', browser.getURLParam('platform'));
+    }
     const lang = unref(getLocale);
     search.set('lang', lang);
     Number(import.meta.env.VITE_SHOW_CONSOLE) === 1 && search.set('vlog', '1');
+
     const url = new URL(location.href);
+    if (isFd) {
+      search.set(
+        'redirect',
+        decodeURIComponent(decodeURIComponent(browser.getURLParam('redirect'))),
+      );
+    }
     url.search = `?` + search.toString();
+    if (isFd) {
+      // debugger
+      const redirect = decodeURIComponent(decodeURIComponent(browser.getURLParam('redirect')));
+      const redirectUrl = new URL(redirect);
+      // const fullPath  =redirectUrl.host + '/swkk/'+ search.toString();
+      url.hostname = redirectUrl.hostname;
+      url.port = '';
+      url.pathname = '/swkk' + url.pathname + 'fd/';
+      console.error('火调平台--share', url.toString());
+    }
 
     if (!unref(isUsingMiniApp)) {
       shareLink.value = url.toString();
@@ -657,13 +679,13 @@
     initRtcSDK();
     appStore.setPasswordConfirm(true);
   };
-  const handleDetail = () => {
-    if (appStore.isShowIntroPanel) {
-      appStore.setShowIntroPanel(false);
-    } else {
-      appStore.setShowIntroPanel(true);
-    }
-  };
+  // const handleDetail = () => {
+  //   if (appStore.isShowIntroPanel) {
+  //     appStore.setShowIntroPanel(false);
+  //   } else {
+  //     appStore.setShowIntroPanel(true);
+  //   }
+  // };
   const handleShare = () => {
     const { socket } = useSocket();
     debugger;

+ 11 - 11
src/components/custom/panel.vue

@@ -4,9 +4,9 @@
     <span class="icon" @click="handlePlayTours" v-if="hasTours && false">
       <Icon type="play" />
     </span>
-    <span class="icon" @click="handleDetail">
+    <!-- <span class="icon" @click="handleDetail">
       <Icon type="detail" />
-    </span>
+    </span> -->
     <span class="icon" @click="showScenes = !showScenes" v-if="sceneList.length > 1">
       <Icon type="scene" />
     </span>
@@ -31,11 +31,11 @@
   import { useRoom } from '/@/hooks/useRoom';
   import { useTourPlayer } from '/@/hooks/userTourPlayer';
   import { useSceneStore } from '/@/store/modules/scene';
-  import { useAppStore } from '/@/store/modules/app';
+  // import { useAppStore } from '/@/store/modules/app';
 
   const { initialRoom, changeScene, sceneList } = useRoom();
   const sceneStore = useSceneStore();
-  const appStore = useAppStore();
+  // const appStore = useAppStore();
   // const hasMusic = computed(
   //   () => sceneStore.metadata.music?.length || sceneStore.metadata.musicFile?.length,
   // );
@@ -81,13 +81,13 @@
       isPlayMusic.value = false;
     }
   }
-  const handleDetail = () => {
-    if (appStore.isShowIntroPanel) {
-      appStore.setShowIntroPanel(false);
-    } else {
-      appStore.setShowIntroPanel(true);
-    }
-  };
+  // const handleDetail = () => {
+  //   if (appStore.isShowIntroPanel) {
+  //     appStore.setShowIntroPanel(false);
+  //   } else {
+  //     appStore.setShowIntroPanel(true);
+  //   }
+  // };
 </script>
 
 <style lang="scss" scoped>

+ 5 - 1
src/hooks/useRoom.ts

@@ -122,6 +122,7 @@ const shopAxios = axios.create({
 });
 
 export const initialRoom = async () => {
+  shopAxios.defaults.headers.platform = browser.getURLParam('platform') || '';
   const res = await shopAxios.get('/takelook/roomInfo', { params: { roomId } });
   room.value = res.data.data;
 };
@@ -131,7 +132,7 @@ export const enterRoom = async () => {
   const rtcStore = useRtcStore();
   const userID = rtcStore.userId || browser.getURLParam('vruserId');
   const role = rtcStore.role || browser.getURLParam('role');
-  console.log('111', room.value);
+  shopAxios.defaults.headers.platform = browser.getURLParam('platform') || '';
   await shopAxios.get('/takelook/inOrOutRoom', {
     params: {
       type: 0,
@@ -147,6 +148,7 @@ export const leaveRoom = async () => {
   const rtcStore = useRtcStore();
   const userID = rtcStore.userId || browser.getURLParam('vruserId');
   const role = rtcStore.role || browser.getURLParam('role');
+  shopAxios.defaults.headers.platform = browser.getURLParam('platform') || '';
   await shopAxios.get('/takelook/inOrOutRoom', {
     params: {
       type: 1,
@@ -159,6 +161,7 @@ export const leaveRoom = async () => {
 
 export const shareRoom = async (roomId: string, userId: string) => {
   // if (!isLeader) return;
+  shopAxios.defaults.headers.platform = browser.getURLParam('platform') || '';
   return shopAxios.get('/takelook/shareRoom', {
     params: {
       userId,
@@ -194,6 +197,7 @@ export const getSign = async (
 };
 
 export const validPassRoom = async (roomId: string, password: string) => {
+  shopAxios.defaults.headers.platform = browser.getURLParam('platform') || '';
   const res = await shopAxios.post('/takelook/checkRoomVisitPassword', {
     roomId: roomId,
     password: password,

+ 0 - 541
src/hooks/useTRTC copy.ts.bk

@@ -1,541 +0,0 @@
-import consola from 'consola';
-import { computed, nextTick, ref, unref } from 'vue';
-import TRTC from 'trtc-js-sdk';
-import type { LocalStream, Client, RemoteStream } from 'trtc-js-sdk';
-
-import { useRtcStore } from '/@/store/modules/rtc';
-// import Dialog from '/@/components/basic/dialog';
-import AgoraRTC, { IAgoraRTCClient } from 'agora-rtc-sdk-ng';
-import { useI18n } from './useI18n';
-import { useMiniApp } from './useMiniApp';
-import { useRoom } from './useRoom';
-
-let localClient: Client;
-let localStream: LocalStream;
-const invitedRemoteStreams = ref<RemoteStream[]>([]);
-const muteAudioLeader = ref(false);
-const muteVideoLeader = ref(false);
-const { isUsingMiniApp } = useMiniApp();
-const globalVideoEnable = computed(
-  () => Number(import.meta.env.VITE_ENABLE_VIDEO) === 1 && unref(isUsingMiniApp),
-);
-
-export const checkDevice = async () => {
-  try {
-    const rtcStore = useRtcStore();
-    const microphoneItems = await TRTC.getMicrophones();
-    console.log('microphoneItems', microphoneItems);
-    microphoneItems.forEach((item) => {
-      item['value'] = item.deviceId;
-    });
-    if (microphoneItems?.length) {
-      rtcStore.setAudioDeviceId(
-        microphoneItems[0].deviceId || microphoneItems[0].groupId || 'default',
-      );
-    } else {
-      rtcStore.setAudioDeviceId('');
-    }
-
-    const camerasItems = await TRTC.getCameras();
-    console.log('camerasItems', camerasItems);
-    camerasItems.forEach((item) => {
-      item['value'] = item.deviceId;
-    });
-    if (camerasItems?.length) {
-      rtcStore.setVideoDeviceId(camerasItems[0].deviceId || camerasItems[0].groupId || 'default');
-    } else {
-      rtcStore.setVideoDeviceId('');
-    }
-  } catch (error) {
-    console.log('error', error);
-  }
-};
-
-const checkSystemRequirements = async () => {
-  const result = await TRTC.checkSystemRequirements();
-  console.log('result', result);
-  const isSmallStreamSupported = await TRTC.isSmallStreamSupported();
-  console.log('isSmallStreamSupported', isSmallStreamSupported);
-};
-
-// interface UseRtcSdkType {
-//     createRTCSocket: () => Promise<void>
-// }
-
-async function createLocalStream() {
-  try {
-    const rtcStore = useRtcStore();
-
-    const enableVideo =
-      rtcStore.isLeader && rtcStore.videoDeviceId?.length > 0 && unref(globalVideoEnable);
-
-    console.warn('enableVideo', enableVideo, unref(globalVideoEnable));
-    localStream = TRTC.createStream({
-      userId: rtcStore.userId,
-      audio: true,
-      video: enableVideo,
-      cameraId: rtcStore.videoDeviceId,
-      microphoneId: rtcStore.audioDeviceId,
-    });
-    //开大小流
-    const isSmallStreamSupported = TRTC.isSmallStreamSupported();
-    if (isSmallStreamSupported) {
-      await localClient.enableSmallStream();
-      localClient.setSmallStreamProfile({
-        width: 160,
-        height: 90,
-        bitrate: 100,
-        frameRate: 15,
-      });
-    } else {
-      localStream.setVideoProfile('360p');
-    }
-
-    //
-    await localStream.initialize();
-    return Promise.resolve();
-
-    // if (rtcStore.audioMuted) {
-    //   localStream.muteAudio();
-    // }
-  } catch (error) {
-    console.log(error, 'createStream');
-    return Promise.reject(error);
-  }
-}
-
-async function createRTCSocket(): Promise<void> {
-  try {
-    if (!unref(isUsingMiniApp)) {
-      const rtcStore = useRtcStore();
-      const { getSign } = useRoom();
-      // const res = await getSign(rtcStore.userId);
-      const res = await getSign(rtcStore.userId, rtcStore.roomId, rtcStore.role);
-      console.warn('web rtc入口', res);
-      // await checkSystemRequirements();
-      // await checkDevice();
-      // console.log('createRTCSocket', rtcStore.videoDeviceId);
-
-      // await handleJoin();
-    } else {
-      console.log('小程序关闭rtc入口');
-    }
-  } catch (error) {
-    consola.error({
-      tag: 'createRTCSocket',
-      message: error,
-    });
-  }
-}
-async function handleTXJoin(sign: string, sdkAppId: number) {
-  const rtcStore = useRtcStore();
-  try {
-    // console.warn('sign', res);
-    localClient = TRTC.createClient({
-      mode: 'rtc',
-      sdkAppId: sdkAppId || parseInt(rtcStore.sdkAppId, 10),
-      userId: rtcStore.userId,
-      userSig: sign || rtcStore.genUserSig,
-      useStringRoomId: true,
-      enableAutoPlayDialog: false,
-    });
-    installEventHandlers();
-
-    await localClient.join({ roomId: rtcStore.roomId });
-  } catch (error) {
-    console.error(error, 'error-----------');
-  }
-
-  await createLocalStream();
-  await handlePublish();
-  await nextTick();
-  //
-  // setTimeout(() => {
-  const playLocal = () => {
-    const playId = 'camera_box_' + rtcStore.userId;
-    localStream
-      .play(playId)
-      .then(() => {
-        consola.info({
-          message: '本地采集成功!',
-          tag: 'rtc:audio',
-        });
-        rtcStore.setIsRTCJoined(true);
-      })
-      .catch((error) => {
-        consola.info({
-          message: '本地采集失败!' + error,
-          tag: 'rtc:audio',
-        });
-        setTimeout(() => {
-          console.log('再次播放');
-          playLocal();
-        }, 500);
-      });
-  };
-
-  playLocal();
-  // }, 1000);
-
-  // if (!rtcStore.isLeader) {
-  localStream.muteAudio();
-  console.log('参加者默认-muteAudio');
-  // }
-
-  localStream.on('error', (error) => {
-    if (error.getCode() === 0x4043) {
-      // 自动播放受限导致播放失败,此时引导用户点击页面。
-      // 在点击事件的回调函数中,执行 stream.resume();
-      const rtcStore = useRtcStore();
-      const { t } = useI18n();
-      rtcStore.showBaseDialog(
-        {
-          title: t('base.tips'),
-          desc: t('base.audioPermission'),
-          okTxt: t('base.confirm'),
-          closeTxt: t('base.cancel'),
-        },
-        () => {
-          localStream.resume();
-        },
-      );
-    }
-  });
-}
-
-async function handlePublish() {
-  const rtcStore = useRtcStore();
-
-  if (!rtcStore.isJoined) {
-    return;
-  }
-  if (rtcStore.isPublished) {
-    return;
-  }
-  // if (!rtcStore.isLeader) {
-  //   return;
-  // }
-  try {
-    await localClient.unpublish(localStream);
-    await localClient.publish(localStream);
-    rtcStore.setIsPublished(true);
-  } catch (error) {
-    console.error(error, '---------------handlePublish--------------------');
-  }
-}
-
-// async function handleStartShare() {
-//     shareClient = new ShareClient({
-//         sdkAppId: parseInt(store.getters["rtc/sdkAppId"], 10),
-//         userId: `share${store.getters["rtc/userId"]}`,
-//         roomId: store.getters["rtc/roomId"],
-//         secretKey: store.getters["rtc/secretKey"],
-//         useStringRoomId: true,
-//     });
-//     try {
-//         await shareClient.join();
-//         await shareClient.publish();
-//         console.log("Start share screen success");
-//         store.isShared = true;
-//     } catch (error) {
-//         console.error(`Start share error: ${error.message_}`);
-//     }
-// }
-
-async function handleUnpublish() {
-  const rtcStore = useRtcStore();
-  if (!rtcStore.isJoined) {
-    return;
-  }
-  if (!rtcStore.isPublished) {
-    return;
-  }
-  try {
-    await localClient.unpublish(localStream);
-    // store.commit("rtc/setIsPublished", false);
-    rtcStore.setIsPublished(false);
-  } catch (error) {
-    console.error(error, '-----------handleUnpublish--------------');
-  }
-}
-
-async function handleLeave() {
-  const rtcStore = useRtcStore();
-  if (rtcStore.isPublished) {
-    await handleUnpublish();
-  }
-  try {
-    uninstallEventHandlers();
-    localClient && (await localClient.leave());
-    localClient && localClient.destroy();
-    // localClient = null;
-    invitedRemoteStreams.value.forEach((item) => {
-      item.stop();
-    });
-    invitedRemoteStreams.value = [];
-    rtcStore.setVideoDeviceId('');
-    rtcStore.setAudioDeviceId('');
-    // store.commit("rtc/setVideoDeviceId", "");
-    // store.commit("rtc/setAudioDeviceId", "");
-
-    if (localStream) {
-      localStream.stop();
-      localStream.close();
-      // localStream = null;
-      console.log('有执行到这里-------------');
-    }
-  } catch (error) {
-    console.error(error, '-----------handleLeave--------------');
-  }
-}
-
-function installEventHandlers() {
-  if (!localClient) {
-    return;
-  }
-  localClient.on('error', handleError);
-  localClient.on('client-banned', handleBanned);
-  localClient.on('peer-join', handlePeerJoin);
-  localClient.on('peer-leave', handlePeerLeave);
-  localClient.on('stream-added', handleStreamAdded);
-  localClient.on('stream-subscribed', handleStreamSubscribed);
-  localClient.on('stream-removed', handleStreamRemoved);
-  localClient.on('stream-updated', handleStreamUpdated);
-  localClient.on('mute-video', handleMuteVideo);
-  localClient.on('mute-audio', handleMuteAudio);
-  localClient.on('unmute-video', handleUnmuteVideo);
-  localClient.on('unmute-audio', handleUnmuteAudio);
-}
-
-function uninstallEventHandlers() {
-  if (!localClient) {
-    return;
-  }
-  localClient.off('error', handleError);
-  localClient.off('client-banned', handleBanned);
-  localClient.off('peer-join', handlePeerJoin);
-  localClient.off('peer-leave', handlePeerLeave);
-  localClient.off('stream-added', handleStreamAdded);
-  localClient.off('stream-subscribed', handleStreamSubscribed);
-  localClient.off('stream-removed', handleStreamRemoved);
-  localClient.off('stream-updated', handleStreamUpdated);
-  localClient.off('mute-video', handleMuteVideo);
-  localClient.off('mute-audio', handleMuteAudio);
-  localClient.off('unmute-video', handleUnmuteVideo);
-  localClient.off('unmute-audio', handleUnmuteAudio);
-}
-
-function handleMuteVideo(event) {
-  console.log(`[${event.userId}] mute video`);
-  const rtcStore = useRtcStore();
-  const roomLeader = rtcStore.getRoomLeader();
-  if (event.userId === roomLeader?.UserId) {
-    muteVideoLeader.value = true;
-  }
-}
-
-function handleMuteAudio(event) {
-  if (event.userId.indexOf('leader') > -1) {
-    muteAudioLeader.value = true;
-  }
-  console.log(event, `[] mute audio`);
-}
-
-function handleUnmuteVideo(event) {
-  console.log(`[${event.userId}] unmute video`);
-  const rtcStore = useRtcStore();
-  const roomLeader = rtcStore.getRoomLeader();
-  if (event.userId === roomLeader?.UserId) {
-    muteVideoLeader.value = false;
-  }
-}
-
-function handleUnmuteAudio(event) {
-  console.log(`[${event.userId}] unmute audio`);
-  if (event.userId.indexOf('leader') > -1) {
-    muteAudioLeader.value = false;
-  }
-}
-
-function handleError(error) {
-  console.log(`LocalClient error: ${error.message_}`);
-}
-
-function handleBanned(error) {
-  console.log(`Client has been banned for ${error.message_}`);
-}
-
-function handlePeerJoin(event) {
-  const { userId } = event;
-  if (userId !== 'local-screen') {
-    console.log(`Peer Client [${userId}] joined`);
-  }
-}
-
-function handlePeerLeave(event) {
-  const { userId } = event;
-  if (userId !== 'local-screen') {
-    console.log(`[${userId}] leave`);
-  }
-}
-
-function handleStreamAdded(event) {
-  const remoteStream = event.stream;
-  const id = remoteStream.getId();
-  const userId = remoteStream.getUserId();
-  const rtcStore = useRtcStore();
-
-  console.log(remoteStream, '-------------remoteStream');
-
-  if (remoteStream.getUserId() === rtcStore.userId) {
-    // don't need to screen shared by us
-    localClient.unsubscribe(remoteStream).catch((error) => {
-      console.info(`unsubscribe failed: ${error.message_}`);
-    });
-  } else {
-    console.log(`remote stream added: [${userId}] ID: ${id} type: ${remoteStream.getType()}`);
-    localClient.subscribe(remoteStream).catch((error) => {
-      console.info(`subscribe failed: ${error.message_}`);
-    });
-  }
-}
-
-async function handleStreamSubscribed(event) {
-  const remoteStream = event.stream;
-  const rtcStore = useRtcStore();
-  // const { t } = useI18n();
-  // debugger;
-  const remoteUserId = remoteStream.getUserId();
-  const remoteId = remoteStream.getId();
-  if (remoteUserId == rtcStore.userId) {
-    return;
-  }
-
-  if (!rtcStore.isIdInRemoteStream(remoteId)) {
-    consola.info({
-      message: remoteId,
-      tag: 'rtc:audio',
-    });
-    rtcStore.pushRemoteStreams(remoteStream);
-    // debugger
-  }
-  await nextTick();
-  const playRemote = () => {
-    // const playId = 'camera_remote_box_' + rtcStore.userId;
-    const playId = 'cameraRemoteBox';
-    remoteStream
-      .play(playId)
-      .then(() => {
-        consola.info({
-          message: '远端采集成功 !playId: ' + playId + ' remoteId:' + remoteId,
-          tag: 'rtc:audio',
-        });
-      })
-      .catch((error) => {
-        consola.info({
-          message: '远端采集失败!' + error,
-          tag: 'rtc:audio',
-        });
-        setTimeout(() => {
-          console.log('远端再次播放' + remoteId);
-          playRemote();
-        }, 500);
-      });
-  };
-  playRemote();
-  remoteStream.on('error', (error) => {
-    if (error.getCode() === 0x4043) {
-      // 自动播放受限导致播放失败,此时引导用户点击页面。
-      // 在点击事件的回调函数中,执行 stream.resume();
-      const rtcStore = useRtcStore();
-      const { t } = useI18n();
-      rtcStore.showBaseDialog(
-        {
-          title: t('base.tips'),
-          desc: t('base.audioPermission'),
-          okTxt: t('base.confirm'),
-          closeTxt: t('base.cancel'),
-        },
-        () => {
-          console.log('手机端', rtcStore.remoteStreams);
-          rtcStore.remoteStreams.forEach((item) => {
-            item.resume();
-          });
-          remoteStream.resume();
-        },
-      );
-    }
-  });
-
-  // setTimeout(async () => {
-  //   try {
-  //     consola.info({
-  //       message: '客音源-->' + remoteId,
-  //       tag: 'rtc:audio',
-  //     });
-  //     consola.info({
-  //       message: rtcStore.remoteStreams,
-  //       tag: 'rtc:audio',
-  //     });
-  //     await remoteStream.play(remoteId);
-  //   } catch (error) {}
-  // }, 200);
-}
-
-function handleStreamRemoved(event) {
-  const remoteStream = event.stream;
-  const userId = remoteStream.getUserId();
-  const remoteStreamId = remoteStream.getId();
-  consola.info({
-    message: `远端流删除: [${userId},${remoteStreamId}]`,
-    tag: 'rtc:audio',
-  });
-  const rtcStore = useRtcStore();
-  rtcStore.removeRemoteStreams(remoteStreamId);
-  const node = document.getElementById(`player_` + remoteStreamId);
-  consola.info({
-    message: `远端流删除:` + node,
-    tag: 'rtc:audio',
-  });
-  if (node) {
-    console.log('node', node);
-  }
-}
-
-function handleStreamUpdated(event) {
-  const remoteStream = event.stream;
-  const userId = remoteStream.getUserId();
-  console.log(
-    `RemoteStream updated: [${userId}] audio:${remoteStream.hasAudio()} video:${remoteStream.hasVideo()}`,
-  );
-}
-
-// const switchDevice = async ({ videoId, audioId }) => {
-//   const rtcStore = useRtcStore();
-//   if (!rtcStore.isJoined) {
-//     return;
-//   }
-//   if (videoId) {
-//     try {
-//       await localStream.switchDevice('video', videoId);
-//     } catch (error) {}
-//   }
-//   if (audioId) {
-//     try {
-//       await localStream.switchDevice('audio', audioId);
-//     } catch (error) {}
-//   }
-// };
-
-export function useRtcSdk() {
-  return {
-    createRTCSocket,
-    // handleJoin,
-    handleLeave,
-    localStream,
-    muteVideoLeader,
-    invitedRemoteStreams,
-    client: localClient,
-    globalVideoEnable,
-  };
-}

+ 7 - 0
src/hooks/userSocket.ts

@@ -45,6 +45,13 @@ async function closeSocket() {
   socket && socket.emit('disconnected');
   // console.log('socket', socket.connected);
   rtcStore.clearMemberList();
+  window.parent &&
+    window.parent.postMessage(
+      {
+        type: 'exit',
+      },
+      '*',
+    );
   createNewURLEntry({
     vruserId: '',
     isTour: 1,

+ 9 - 0
src/store/modules/scene.ts

@@ -89,6 +89,15 @@ export const useSceneStore = defineStore({
     load(metadata: KankanMetaDataType): void {
       this.metadata = metadata;
       document.title = metadata.title;
+
+      window.parent &&
+        window.parent.postMessage(
+          {
+            type: 'metadata',
+            data: metadata,
+          },
+          '*',
+        );
     },
     loadFloorData(floors: FloorsType[]) {
       if (floors?.length) {