在线聊天完成

main
鲁誉程 11 months ago
parent 3a7e4e8a2f
commit abe6511138

@ -6,6 +6,7 @@
<meta charset='UTF-8'> <meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'> <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'>
<meta name='description' content='mediasoup demo - Cutting Edge WebRTC Video Conferencing'> <meta name='description' content='mediasoup demo - Cutting Edge WebRTC Video Conferencing'>
<meta http-equiv="Permissions-Policy" content="microphone=(self), camera=(self)">
<link rel='stylesheet' href='/mediasoup-demo-app.css?v=foo2'> <link rel='stylesheet' href='/mediasoup-demo-app.css?v=foo2'>

@ -544,7 +544,7 @@ export default class RoomClient
store.dispatch(requestActions.notify( store.dispatch(requestActions.notify(
{ {
type : 'userMessage', type : 'userMessage',
title : `${sendingPeer.displayName} says:`, title : `${sendingPeer.displayName}`,
text : message, text : message,
timeout : 5000 timeout : 5000
})); }));

@ -38,7 +38,7 @@ const Notifications = ({ notifications, onClick }) => {
</div> </div>
</div> : </div> :
<> <>
<div style={{ color: '#232B40', marginBottom: 10 }}>用户-{notification.id}</div> <div style={{ color: '#232B40', marginBottom: 10 }}>{notification.title}</div>
<div style={{ width: 'max-content', padding: '10px 20px', color: '#434D6C', lineHeight: '26px', background: '#fff', borderRadius: '0px 8px 8px 8px' }}> <div style={{ width: 'max-content', padding: '10px 20px', color: '#434D6C', lineHeight: '26px', background: '#fff', borderRadius: '0px 8px 8px 8px' }}>
{notification.text} {notification.text}
</div> </div>

@ -14,11 +14,11 @@ import Peers from './Peers';
import Stats from './Stats'; import Stats from './Stats';
import Notifications from './Notifications'; import Notifications from './Notifications';
import NetworkThrottle from './NetworkThrottle'; import NetworkThrottle from './NetworkThrottle';
import { log } from 'gulp-util';
import UrlParse from 'url-parse';
class Room extends React.Component class Room extends React.Component {
{ render() {
render()
{
const { const {
roomClient, roomClient,
room, room,
@ -31,12 +31,26 @@ class Room extends React.Component
? 'dev' ? 'dev'
: room.mediasoupClientVersion; : room.mediasoupClientVersion;
const urlParser = new UrlParse(window.location.href, true);
// &
const parts = urlParser.href.split('&');
//
const params = parts.slice(1).reduce((acc, part) => {
const [key, value] = part.split('=');
if (key && value) acc[key] = value;
return acc;
}, {});
let roomId = params['roomId'];
return ( return (
<Appear duration={300}> <Appear duration={300}>
<div data-component='Room'> <div data-component='Room'>
<div className='crumbs'> <div className='crumbs'>
<span className='goback' onClick={() => { <span className='goback' onClick={() => {
//
window.parent.postMessage('goBack', '*');
}}> }}>
值班专家<span style={{ margin: '0 4px' }}>{`>`}</span> 值班专家<span style={{ margin: '0 4px' }}>{`>`}</span>
</span> </span>
@ -110,8 +124,7 @@ class Room extends React.Component
disabled: me.audioOnlyInProgress disabled: me.audioOnlyInProgress
})} })}
data-tip={'将参与者的视频 显示/隐藏'} data-tip={'将参与者的视频 显示/隐藏'}
onClick={() => onClick={() => {
{
me.audioOnly me.audioOnly
? roomClient.disableAudioOnly() ? roomClient.disableAudioOnly()
: roomClient.enableAudioOnly(); : roomClient.enableAudioOnly();
@ -123,8 +136,7 @@ class Room extends React.Component
on: me.audioMuted on: me.audioMuted
})} })}
data-tip={'将参与者的音频 静音/取消静音'} data-tip={'将参与者的音频 静音/取消静音'}
onClick={() => onClick={() => {
{
me.audioMuted me.audioMuted
? roomClient.unmuteAudio() ? roomClient.unmuteAudio()
: roomClient.muteAudio(); : roomClient.muteAudio();
@ -161,8 +173,7 @@ class Room extends React.Component
); );
} }
componentDidMount() componentDidMount() {
{
const { roomClient } = this.props; const { roomClient } = this.props;
roomClient.join(); roomClient.join();
@ -178,8 +189,7 @@ Room.propTypes =
onRoomLinkCopy: PropTypes.func.isRequired onRoomLinkCopy: PropTypes.func.isRequired
}; };
const mapStateToProps = (state) => const mapStateToProps = (state) => {
{
return { return {
room: state.room, room: state.room,
me: state.me, me: state.me,
@ -187,11 +197,9 @@ const mapStateToProps = (state) =>
}; };
}; };
const mapDispatchToProps = (dispatch) => const mapDispatchToProps = (dispatch) => {
{
return { return {
onRoomLinkCopy : () => onRoomLinkCopy: () => {
{
dispatch(requestActions.notify( dispatch(requestActions.notify(
{ {
text: '房间链接已复制到剪贴板' text: '房间链接已复制到剪贴板'

@ -21,6 +21,7 @@ import * as cookiesManager from './cookiesManager';
import * as stateActions from './redux/stateActions'; import * as stateActions from './redux/stateActions';
import reducers from './redux/reducers'; import reducers from './redux/reducers';
import Room from './components/Room'; import Room from './components/Room';
import { log } from 'gulp-util';
const logger = new Logger(); const logger = new Logger();
const reduxMiddlewares = [ thunk ]; const reduxMiddlewares = [ thunk ];
@ -64,9 +65,21 @@ async function run()
const urlParser = new UrlParse(window.location.href, true); const urlParser = new UrlParse(window.location.href, true);
const peerId = randomString({ length: 8 }).toLowerCase(); const peerId = randomString({ length: 8 }).toLowerCase();
let roomId = urlParser.query.roomId;
let displayName = // &
urlParser.query.displayName || (cookiesManager.getUser() || {}).displayName; const parts = urlParser.href.split('&');
//
const params = parts.slice(1).reduce((acc, part) => {
const [key, value] = part.split('=');
if (key && value) acc[key] = value;
return acc;
}, {});
let roomId = params['roomId'];
let userName = decodeURIComponent(params['userName']);
let displayName = userName || (cookiesManager.getUser() || {}).displayName;
const handlerName = urlParser.query.handlerName || urlParser.query.handler; const handlerName = urlParser.query.handlerName || urlParser.query.handler;
const forceTcp = urlParser.query.forceTcp === 'true'; const forceTcp = urlParser.query.forceTcp === 'true';
const produce = urlParser.query.produce !== 'false'; const produce = urlParser.query.produce !== 'false';

@ -13,11 +13,11 @@ const os = require('os');
module.exports = module.exports =
{ {
// Listening hostname (just for `gulp live` task). // Listening hostname (just for `gulp live` task).
domain : process.env.DOMAIN || '0.0.0.0', domain : process.env.DOMAIN || '192.168.0.210',
// Signaling settings (protoo WebSocket server and HTTP API server). // Signaling settings (protoo WebSocket server and HTTP API server).
https : https :
{ {
listenIp : '0.0.0.0', // 换成你的IP地址 listenIp : '192.168.0.210', // 换成你的IP地址
// NOTE: Don't change listenPort (client app assumes 4443). // NOTE: Don't change listenPort (client app assumes 4443).
listenPort : process.env.PROTOO_LISTEN_PORT || 4443, listenPort : process.env.PROTOO_LISTEN_PORT || 4443,
// NOTE: Set your own valid certificate files. // NOTE: Set your own valid certificate files.
@ -124,13 +124,13 @@ module.exports =
[ [
{ {
protocol : 'udp', protocol : 'udp',
ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0', // 换成你的IP地址 ip : process.env.MEDIASOUP_LISTEN_IP || '192.168.0.210', // 换成你的IP地址
announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP, announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP,
port : 44444 port : 44444
}, },
{ {
protocol : 'tcp', protocol : 'tcp',
ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0', // 换成你的IP地址 ip : process.env.MEDIASOUP_LISTEN_IP || '192.168.0.210', // 换成你的IP地址
announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP, announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP,
port : 44444 port : 44444
} }
@ -147,7 +147,7 @@ module.exports =
[ [
{ {
protocol : 'udp', protocol : 'udp',
ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0', // 换成你的IP地址 ip : process.env.MEDIASOUP_LISTEN_IP || '192.168.0.210', // 换成你的IP地址
announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP, announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP,
portRange : portRange :
{ {
@ -157,7 +157,7 @@ module.exports =
}, },
{ {
protocol : 'tcp', protocol : 'tcp',
ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0', // 换成你的IP地址 ip : process.env.MEDIASOUP_LISTEN_IP || '192.168.0.210', // 换成你的IP地址
announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP, announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP,
portRange : portRange :
{ {
@ -180,7 +180,7 @@ module.exports =
listenInfo : listenInfo :
{ {
protocol : 'udp', protocol : 'udp',
ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0', // 换成你的IP地址 ip : process.env.MEDIASOUP_LISTEN_IP || '192.168.0.210', // 换成你的IP地址
announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP, announcedAddress : process.env.MEDIASOUP_ANNOUNCED_IP,
portRange : portRange :
{ {

Loading…
Cancel
Save