diff --git a/main.js b/main.js index d921379..a81f6e2 100644 --- a/main.js +++ b/main.js @@ -367,6 +367,7 @@ app.on('ready', () => { ipcMain.handle('mainWindowCenter', () => { mainWindowCenter() }); + // 窗口通信 ipcMain.handle('windowHandleMessage', (event, data) => { if (childWindow[data.key]) { childWindow[data.key].webContents.send('windowHandleMessageCallBack', data) diff --git a/src/page/Meeting/ChatBigWindow/index.tsx b/src/page/Meeting/ChatBigWindow/index.tsx index 37ebcd3..c350841 100644 --- a/src/page/Meeting/ChatBigWindow/index.tsx +++ b/src/page/Meeting/ChatBigWindow/index.tsx @@ -29,22 +29,22 @@ const ChatBigWindow: React.FC = () => { useEffect(() => { setUser(userInfo) channel.onmessage = function (event) { - const { type, chatList, showDriverList } = event.data; + const { type, showDriverList } = event.data; switch (type) { - case 'chatList': - setChatLists(chatList) - setTimeout(() => { - const chatBigWindowView = document.getElementById('chatBigWindowView') as HTMLElement; - if (chatBigWindowView) { - chatBigWindowView.scrollTop = chatBigWindowView.scrollHeight; - } - }, 100) - break; case 'showDriverList': equipmentManagementRef.current.setData(showDriverList) break; } } + window.electron.windowHandleMessageCallBack((_e: any, data: any) => { + setChatLists(data.parmes.chatList) + setTimeout(() => { + const chatBigWindowView = document.getElementById('chatBigWindowView') as HTMLElement; + if (chatBigWindowView) { + chatBigWindowView.scrollTop = chatBigWindowView.scrollHeight; + } + }, 100) + }) channel.postMessage({ type: 'chatBigWindowSendChannelMsg', chatBigWindowSendChannelMsg: { diff --git a/src/page/Meeting/ChatSmallWindow/index.tsx b/src/page/Meeting/ChatSmallWindow/index.tsx index c228217..bcc2c50 100644 --- a/src/page/Meeting/ChatSmallWindow/index.tsx +++ b/src/page/Meeting/ChatSmallWindow/index.tsx @@ -8,25 +8,20 @@ const ChatSmallWindow: React.FC = () => { const [isExpand, setIsExpand] = useState(false) const channel = new BroadcastChannel('meeting_channel'); useEffect(() => { - channel.onmessage = function (event) { - const { type, chatListIten } = event.data; - switch (type) { - case 'chatListIten': - setChatLists((newChatList: any) => { - chatListIten.timer = setTimeout(() => { - removeItemByIndex(); - }, 3000); - return [chatListIten, ...newChatList] - }) - setTimeout(() => { - const chatSmallWindowView = document.getElementById('chatSmallWindowView') as HTMLElement; - if (chatSmallWindowView) { - chatSmallWindowView.scrollTop = chatSmallWindowView.scrollHeight; - } - }, 100) - break; - } - } + window.electron.windowHandleMessageCallBack((_e: any, data: any) => { + setChatLists((newChatList: any) => { + data.parmes.chatListIten.timer = setTimeout(() => { + removeItemByIndex(); + }, 3000); + return [data.parmes.chatListIten, ...newChatList] + }) + setTimeout(() => { + const chatSmallWindowView = document.getElementById('chatSmallWindowView') as HTMLElement; + if (chatSmallWindowView) { + chatSmallWindowView.scrollTop = chatSmallWindowView.scrollHeight; + } + }, 100) + }) return () => { channel.close(); } diff --git a/src/page/Meeting/CurrentSpeakUserWindow/index.tsx b/src/page/Meeting/CurrentSpeakUserWindow/index.tsx index f0647ba..e86c258 100644 --- a/src/page/Meeting/CurrentSpeakUserWindow/index.tsx +++ b/src/page/Meeting/CurrentSpeakUserWindow/index.tsx @@ -2,26 +2,16 @@ import styles from '@/page/Meeting/CurrentSpeakUserWindow/index.module.scss' import { useEffect, useState } from "react"; const CurrentSpeakUserWindow: React.FC = () => { const [inputValue, setInputValue] = useState('') - const channel = new BroadcastChannel('meeting_channel'); useEffect(() => { - channel.onmessage = function (event) { - const { type, currentSpeakUser } = event.data; - switch (type) { - case 'currentSpeakUser': - if (currentSpeakUser.length) { - setInputValue(currentSpeakUser.join(';')) - } else { - setInputValue('') - } - break; + window.electron.windowHandleMessageCallBack((_e: any, data: any) => { + if (data.parmes.currentSpeakUser.length) { + setInputValue(data.parmes.currentSpeakUser.join(';')) + } else { + setInputValue('') } - } - return () => { - channel.close(); - } + }) }, []); - return ( <>
diff --git a/src/page/Meeting/ShareScreenWindow/index.tsx b/src/page/Meeting/ShareScreenWindow/index.tsx index c9b0c01..1863674 100644 --- a/src/page/Meeting/ShareScreenWindow/index.tsx +++ b/src/page/Meeting/ShareScreenWindow/index.tsx @@ -56,8 +56,7 @@ const ShareScreenWindow: React.FC = () => { useEffect(() => { getRoomUser() channel.onmessage = function (event) { - let { type, time, roomUserList, footerList, currentSpeakUserMe } = event.data; - const footerListTemplate = [...footerLists]; + let { type, time } = event.data; switch (type) { case 'time': setTimeStr(time) @@ -65,33 +64,32 @@ const ShareScreenWindow: React.FC = () => { setTimeStr(time++) }, 1000) break; - case 'roomUserList': - setRoomUserLists(roomUserList) - break; - case 'footerList': - footerListTemplate[0].title = footerList[0][0].active ? '解除静音' : '静音'; - footerListTemplate[0].active = footerList[0][0].active; - footerListTemplate[1].title = footerList[0][1].active ? '开启视频' : '关闭视频'; - footerListTemplate[1].active = footerList[0][1].active; - footerListTemplate[4].title = footerList[1][3].active ? '录制中' : '录制'; - footerListTemplate[4].active = footerList[1][3].active; - setFooterLists(footerListTemplate) - break; - case 'currentSpeakUserMe': - let domMe = document.getElementById(`micr-item-${userInfo.uid}`) as HTMLDivElement; - if (domMe) { - domMe.style.height = `${currentSpeakUserMe}%` - } - break; } } channel.postMessage({ type: 'shareScreenWindowGetTime' }); window.electron.windowHandleMessageCallBack((_e: any, data: any) => { - let domMe = document.getElementById(`micr-item-${userInfo.uid}`) as HTMLDivElement; - if (domMe) { - domMe.style.height = `${data.parmes.currentSpeakUserMe}%` + switch (data.parmes.type) { + case 'currentSpeakUserMe': + let domMe = document.getElementById(`micr-item-${userInfo.uid}`) as HTMLDivElement; + if (domMe) { + domMe.style.height = `${data.parmes.currentSpeakUserMe}%` + } + break; + case 'footerList': + const footerListTemplate = [...footerLists]; + footerListTemplate[0].title = data.parmes.footerList[0][0].active ? '解除静音' : '静音'; + footerListTemplate[0].active = data.parmes.footerList[0][0].active; + footerListTemplate[1].title = data.parmes.footerList[0][1].active ? '开启视频' : '关闭视频'; + footerListTemplate[1].active = data.parmes.footerList[0][1].active; + footerListTemplate[4].title = data.parmes.footerList[1][3].active ? '录制中' : '录制'; + footerListTemplate[4].active = data.parmes.footerList[1][3].active; + setFooterLists(footerListTemplate) + break; + case 'roomUserList': + setRoomUserLists(data.parmes.roomUserList) + break; } }) return () => { diff --git a/src/page/Meeting/UserListWindow/index.tsx b/src/page/Meeting/UserListWindow/index.tsx index 7facfa6..1c75e2f 100644 --- a/src/page/Meeting/UserListWindow/index.tsx +++ b/src/page/Meeting/UserListWindow/index.tsx @@ -20,11 +20,8 @@ const UserListWindow: React.FC = () => { useEffect(() => { setUser(userInfo) channel.onmessage = function (event) { - const { type, roomUserList, showDriverList } = event.data; + const { type, showDriverList } = event.data; switch (type) { - case 'roomUserList': - setRoomUserList(roomUserList) - break; case 'showDriverList': equipmentManagementRef.current.setData(showDriverList) break; @@ -33,6 +30,13 @@ const UserListWindow: React.FC = () => { channel.postMessage({ type: 'userListWindowGetRoomUserList' }); + window.electron.windowHandleMessageCallBack((_e: any, data: any) => { + switch (data.parmes.type) { + case 'roomUserList': + setRoomUserList(data.parmes.roomUserList) + break; + } + }) return () => { channel.close(); } diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 4dbe7c0..c743f61 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -263,10 +263,13 @@ const Meeting: React.FC = () => { break; case 'shareScreenWindowGetFooterLists': setFooterList((res: any) => { - channel.postMessage({ - type: 'footerList', - footerList: res, - }); + window.electron.windowHandleMessage({ + key: 'shareScreenWindow', + parmes: { + footerList: res, + type: 'footerList' + } + }) return res }) break; @@ -303,10 +306,13 @@ const Meeting: React.FC = () => { break; case 'userListWindowGetRoomUserList': setRoomUserList(((res: any) => { - channel.postMessage({ - type: 'roomUserList', - roomUserList: res, - }); + window.electron.windowHandleMessage({ + key: 'userListWindow', + parmes: { + roomUserList: res, + type: 'roomUserList' + } + }) return res })) break; @@ -351,9 +357,11 @@ const Meeting: React.FC = () => { sendMsg(chatBigWindowSendChannelMsg.msg) } else[ setChatList((res: any) => { - channel.postMessage({ - type: 'chatList', - chatList: res, + window.electron.windowHandleMessage({ + key: 'chatBigWindow', + parmes: { + chatList: res, + } }) return res }) @@ -379,7 +387,12 @@ const Meeting: React.FC = () => { usernames.push(user.userName); } }) - storage.setItem('currentSpeakUser', JSON.stringify(usernames)) + window.electron.windowHandleMessage({ + key: 'currentSpeakUserWindow', + parmes: { + currentSpeakUser: usernames, + } + }) return res }); @@ -469,10 +482,12 @@ const Meeting: React.FC = () => { useEffect(() => { if (chatList.length) { - channel.postMessage({ - type: 'chatList', - chatList, - }); + window.electron.windowHandleMessage({ + key: 'chatBigWindow', + parmes: { + chatList, + } + }) } }, [chatList]); @@ -526,10 +541,12 @@ const Meeting: React.FC = () => { setNoViewChatList(storageNoViewChatList) } setChatList((newChatList: any) => [...newChatList, item]) - channel.postMessage({ - type: 'chatListIten', - chatListIten: item, - }); + window.electron.windowHandleMessage({ + key: 'chatSmallWindow', + parmes: { + chatListIten: item, + } + }) setStatusList((res: any) => { if (!res.userChatList) { api.open({ @@ -876,14 +893,27 @@ const Meeting: React.FC = () => { observerObject.observe(element); }); } - channel.postMessage({ - type: 'roomUserList', - roomUserList, - }); - channel.postMessage({ - type: 'footerList', - footerList, - }); + window.electron.windowHandleMessage({ + key: 'shareScreenWindow', + parmes: { + footerList, + type: 'footerList' + } + }) + window.electron.windowHandleMessage({ + key: 'shareScreenWindow', + parmes: { + roomUserList, + type: 'roomUserList' + } + }) + window.electron.windowHandleMessage({ + key: 'userListWindow', + parmes: { + roomUserList, + type: 'roomUserList' + } + }) return () => { elements.forEach(element => { observer?.unobserve(element); @@ -964,6 +994,7 @@ const Meeting: React.FC = () => { key: 'shareScreenWindow', parmes: { currentSpeakUserMe: percentage, + type: 'currentSpeakUserMe' } }) } @@ -1644,12 +1675,6 @@ const Meeting: React.FC = () => { case 'meetingMode': setMeetingMode(e.value) break; - case 'currentSpeakUser': - channel.postMessage({ - type: 'currentSpeakUser', - currentSpeakUser: JSON.parse(e.value), - }); - break; case 'quitMeeting': if (e.value) { setQuitMeetingModal(true) @@ -1694,10 +1719,12 @@ const Meeting: React.FC = () => { timestamp: +new Date() } setChatList((newChatList: any) => [...newChatList, item]) - channel.postMessage({ - type: 'chatListIten', - chatListIten: item, - }); + window.electron.windowHandleMessage({ + key: 'chatSmallWindow', + parmes: { + chatListIten: item, + } + }) setTextMsg(''); chatScrollBotton() } else {