This commit is contained in:
parent
e531e71f4f
commit
b4e92c0004
|
|
@ -34,6 +34,7 @@ const Meeting: React.FC = () => {
|
||||||
const [isSharedFilesModel, setIsSharedFilesModel] = useState(false);
|
const [isSharedFilesModel, setIsSharedFilesModel] = useState(false);
|
||||||
const [sharedScreenList, setSharedScreenList] = useState<any>([]);
|
const [sharedScreenList, setSharedScreenList] = useState<any>([]);
|
||||||
const [sharedScreenItem, setSharedScreenItem] = useState<any>('');
|
const [sharedScreenItem, setSharedScreenItem] = useState<any>('');
|
||||||
|
const [textMsg, setTextMsg] = useState('');
|
||||||
const [footerList, setFooterList] = useState([
|
const [footerList, setFooterList] = useState([
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
|
@ -130,6 +131,18 @@ const Meeting: React.FC = () => {
|
||||||
};
|
};
|
||||||
}, [fileList.pageIndex]);
|
}, [fileList.pageIndex]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
roomUserList.forEach((item: any) => {
|
||||||
|
let dom = document.getElementById(`video-${item.account}`) as HTMLElement
|
||||||
|
if (!dom.hasChildNodes()) {
|
||||||
|
agora.setVideo({
|
||||||
|
account: Number(item.account),
|
||||||
|
view: dom,
|
||||||
|
channelId: state.channelId,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [roomUserList]);
|
||||||
// 操作按钮
|
// 操作按钮
|
||||||
const changeStatusList = async (row: any, itemIndex: number, rowIndex: number): Promise<void> => {
|
const changeStatusList = async (row: any, itemIndex: number, rowIndex: number): Promise<void> => {
|
||||||
const footerListTemplate = [...footerList]
|
const footerListTemplate = [...footerList]
|
||||||
|
|
@ -257,11 +270,10 @@ const Meeting: React.FC = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取房间用户
|
// 获取房间用户
|
||||||
const getRoomUser = async (callBack: Function): Promise<void> => {
|
const getRoomUser = async (): Promise<void> => {
|
||||||
await GetRoomUser(state.channelId).then(res => {
|
await GetRoomUser(state.channelId).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
setRoomUserList(res.data)
|
setRoomUserList(res.data)
|
||||||
callBack(res.data)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -271,35 +283,14 @@ const Meeting: React.FC = () => {
|
||||||
onInvoke('joinChannel', {
|
onInvoke('joinChannel', {
|
||||||
roomNum: state.channelId
|
roomNum: state.channelId
|
||||||
})
|
})
|
||||||
getRoomUser((data: any) => {
|
getRoomUser()
|
||||||
setTimeout(() => {
|
|
||||||
data.forEach((item: any) => {
|
|
||||||
agora.setVideo({
|
|
||||||
account: Number(item.account),
|
|
||||||
view: document.getElementById(`video-${item.account}`),
|
|
||||||
channelId: state.channelId
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}, 1000)
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
onInvoke('levelChannel', {
|
onInvoke('levelChannel', {
|
||||||
roomNum: state.channelId
|
roomNum: state.channelId
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else if (e.key === 'isRemotJoin') {
|
} else if (e.key === 'isRemotJoin') {
|
||||||
getRoomUser((data: any) => {
|
getRoomUser()
|
||||||
setTimeout(() => {
|
|
||||||
data.forEach((item: any) => {
|
|
||||||
agora.setVideo({
|
|
||||||
account: Number(item.account),
|
|
||||||
view: document.getElementById(`video-${item.account}`),
|
|
||||||
channelId: state.channelId,
|
|
||||||
isRemotJoin: e.value
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}, 1000)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
|
|
@ -413,8 +404,15 @@ const Meeting: React.FC = () => {
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className={`${styles.meetingUserChatInput} drag`}>
|
<div className={`${styles.meetingUserChatInput} drag`}>
|
||||||
<Input.TextArea placeholder="请输入消息" style={{ flexGrow: 1 }}></Input.TextArea>
|
<Input.TextArea placeholder="请输入消息" style={{ flexGrow: 1 }} onChange={(e) => {
|
||||||
<Button type="primary" className='m-ant-btn' style={{ flexShrink: 0, marginTop: '4px' }}>发送</Button>
|
setTextMsg(e.target.value)
|
||||||
|
}}></Input.TextArea>
|
||||||
|
<Button type="primary" className='m-ant-btn' style={{ flexShrink: 0, marginTop: '4px' }} onClick={() => {
|
||||||
|
onInvoke('senChannelMsg', {
|
||||||
|
roomNum: state.channelId,
|
||||||
|
msg: textMsg,
|
||||||
|
})
|
||||||
|
}}>发送</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ const agora = {
|
||||||
});
|
});
|
||||||
rtcEngine.registerEventHandler({
|
rtcEngine.registerEventHandler({
|
||||||
// 监听本地用户加入频道事件
|
// 监听本地用户加入频道事件
|
||||||
onJoinChannelSuccess: (info: any, elapsed: any) => {
|
onJoinChannelSuccess: async (info: any, elapsed: any) => {
|
||||||
storage.setItem('isJoin', true)
|
storage.setItem('isJoin', true)
|
||||||
},
|
},
|
||||||
// 监听远端用户加入频道事件
|
// 监听远端用户加入频道事件
|
||||||
|
|
@ -41,6 +41,15 @@ const agora = {
|
||||||
onUserOffline: (info: any, remoteUid: any, reason: any) => {
|
onUserOffline: (info: any, remoteUid: any, reason: any) => {
|
||||||
// 远端用户离开频道后,关闭远端视频窗口
|
// 远端用户离开频道后,关闭远端视频窗口
|
||||||
storage.setItem('isRemotJoin', false)
|
storage.setItem('isRemotJoin', false)
|
||||||
|
rtcEngine.setupRemoteVideo(
|
||||||
|
{
|
||||||
|
renderMode: RenderModeType.RenderModeFit,
|
||||||
|
sourceType: VideoSourceType.VideoSourceRemote,
|
||||||
|
uid: Number(info.localUid),
|
||||||
|
view: document.getElementById(`video-${info.localUid}`),
|
||||||
|
setupMode: VideoViewSetupMode.VideoViewSetupRemove,
|
||||||
|
},
|
||||||
|
);
|
||||||
},
|
},
|
||||||
// 视频发布状态改变回调
|
// 视频发布状态改变回调
|
||||||
onVideoPublishStateChanged: (source: any, channel: any, oldState: any, newState: any, elapseSinceLastState: any) => {
|
onVideoPublishStateChanged: (source: any, channel: any, oldState: any, newState: any, elapseSinceLastState: any) => {
|
||||||
|
|
@ -64,11 +73,8 @@ const agora = {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
// 渲染视频
|
|
||||||
setVideo: (item: any) => {
|
|
||||||
console.log(item);
|
|
||||||
// 本地加入
|
// 本地加入
|
||||||
function setupLocalVideo() {
|
setupLocalVideo: (item: any) => {
|
||||||
rtcEngine.setupLocalVideo({
|
rtcEngine.setupLocalVideo({
|
||||||
renderMode: RenderModeType.RenderModeFit,
|
renderMode: RenderModeType.RenderModeFit,
|
||||||
// sourceType: VideoSourceType.VideoSourceScreen,
|
// sourceType: VideoSourceType.VideoSourceScreen,
|
||||||
|
|
@ -77,9 +83,9 @@ const agora = {
|
||||||
view: item.view,
|
view: item.view,
|
||||||
setupMode: VideoViewSetupMode.VideoViewSetupAdd,
|
setupMode: VideoViewSetupMode.VideoViewSetupAdd,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
// 远端加入
|
// 远端加入
|
||||||
function setupRemoteVideoJoin() {
|
setupRemoteVideoJoin: (item: any) => {
|
||||||
rtcEngine.setupRemoteVideo(
|
rtcEngine.setupRemoteVideo(
|
||||||
{
|
{
|
||||||
renderMode: RenderModeType.RenderModeFit,
|
renderMode: RenderModeType.RenderModeFit,
|
||||||
|
|
@ -90,34 +96,13 @@ const agora = {
|
||||||
},
|
},
|
||||||
{ channelId: item.channelId },
|
{ channelId: item.channelId },
|
||||||
);
|
);
|
||||||
}
|
|
||||||
// 远端退出
|
|
||||||
function setupRemoteVideoLeave() {
|
|
||||||
rtcEngine.setupRemoteVideo(
|
|
||||||
{
|
|
||||||
renderMode: RenderModeType.RenderModeFit,
|
|
||||||
sourceType: VideoSourceType.VideoSourceRemote,
|
|
||||||
uid: item.account,
|
|
||||||
view: item.view,
|
|
||||||
setupMode: VideoViewSetupMode.VideoViewSetupRemove,
|
|
||||||
},
|
},
|
||||||
);
|
// 渲染视频
|
||||||
}
|
setVideo: (item: any) => {
|
||||||
|
|
||||||
if (typeof item.isRemotJoin === 'boolean') {
|
|
||||||
if (option.userid != item.account) {
|
|
||||||
if (item.isRemotJoin) {
|
|
||||||
setupRemoteVideoJoin()
|
|
||||||
} else {
|
|
||||||
setupRemoteVideoLeave()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (option.userid === item.account) {
|
if (option.userid === item.account) {
|
||||||
setupLocalVideo()
|
agora.setupLocalVideo(item)
|
||||||
} else {
|
} else {
|
||||||
setupRemoteVideoJoin()
|
agora.setupRemoteVideoJoin(item)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 离开频道
|
// 离开频道
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,9 @@ export const onInvoke = (str: string, data: any) => {
|
||||||
case 'levelChannel':
|
case 'levelChannel':
|
||||||
connection.invoke(str, data.roomNum)
|
connection.invoke(str, data.roomNum)
|
||||||
break;
|
break;
|
||||||
|
case 'senChannelMsg':
|
||||||
|
connection.invoke(str, data.roomNum, data.msg)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue