diff --git a/app/lib/RoomClient.js b/app/lib/RoomClient.js index 5957919..62a19fb 100644 --- a/app/lib/RoomClient.js +++ b/app/lib/RoomClient.js @@ -990,10 +990,22 @@ export default class RoomClient this._signalingSocket.on('connect', () => { logger.debug('signaling Peer "connect" event'); + }); + + this._signalingSocket.on('room-ready', () => + { + logger.debug('signaling Peer "room-ready" event'); this._joinRoom({ displayName, device }); }); + this._signalingSocket.on('room-locked', () => + { + logger.debug('signaling Peer "room-locked" event'); + + store.dispatch(stateActions.setRoomLockedOut()); + }); + this._signalingSocket.on('disconnect', () => { logger.warn('signaling Peer "disconnect" event'); @@ -1024,10 +1036,34 @@ export default class RoomClient this._room.receiveNotification(notification); }); - this._signalingSocket.on('active-speaker', (data) => + this._signalingSocket.on('lock-room', ({ peerName }) => { - const { peerName } = data; + store.dispatch( + stateActions.setRoomLocked()); + const peer = this._room.getPeerByName(peerName); + + if (peer) + { + this.notify(`${peer.appData.displayName} locked the room.`); + } + }); + + this._signalingSocket.on('unlock-room', ({ peerName }) => + { + store.dispatch( + stateActions.setRoomUnLocked()); + + const peer = this._room.getPeerByName(peerName); + + if (peer) + { + this.notify(`${peer.appData.displayName} unlocked the room.`); + } + }); + + this._signalingSocket.on('active-speaker', ({ peerName }) => + { store.dispatch( stateActions.setRoomActiveSpeaker(peerName)); @@ -1035,11 +1071,8 @@ export default class RoomClient this._spotlights.handleActiveSpeaker(peerName); }); - this._signalingSocket.on('display-name-changed', (data) => + this._signalingSocket.on('display-name-changed', ({ peerName, displayName: name }) => { - // eslint-disable-next-line no-shadow - const { peerName, displayName } = data; - // NOTE: Hack, we shouldn't do this, but this is just a demo. const peer = this._room.getPeerByName(peerName); @@ -1050,20 +1083,18 @@ export default class RoomClient return; } - const oldDisplayName = peer.appData.displayName; + const oldDisplayName = peer.appData.name; - peer.appData.displayName = displayName; + peer.appData.displayName = name; store.dispatch( - stateActions.setPeerDisplayName(displayName, peerName)); + stateActions.setPeerDisplayName(name, peerName)); - this.notify(`${oldDisplayName} changed their display name to ${displayName}.`); + this.notify(`${oldDisplayName} changed their display name to ${name}.`); }); - this._signalingSocket.on('profile-picture-changed', (data) => + this._signalingSocket.on('profile-picture-changed', ({ peerName, picture }) => { - const { peerName, picture } = data; - store.dispatch(stateActions.setPeerPicture(peerName, picture)); }); @@ -1292,6 +1323,42 @@ export default class RoomClient } } + async lockRoom() + { + logger.debug('lockRoom()'); + + try + { + await this.sendRequest('lock-room'); + + store.dispatch( + stateActions.setRoomLocked()); + this.notify('You locked the room.'); + } + catch (error) + { + logger.error('lockRoom() | failed: %o', error); + } + } + + async unlockRoom() + { + logger.debug('unlockRoom()'); + + try + { + await this.sendRequest('unlock-room'); + + store.dispatch( + stateActions.setRoomUnLocked()); + this.notify('You unlocked the room.'); + } + catch (error) + { + logger.error('unlockRoom() | failed: %o', error); + } + } + async _setMicProducer() { if (!this._room.canSend('audio')) diff --git a/app/lib/components/Controls/Sidebar.jsx b/app/lib/components/Controls/Sidebar.jsx index 473c523..32fa6e6 100644 --- a/app/lib/components/Controls/Sidebar.jsx +++ b/app/lib/components/Controls/Sidebar.jsx @@ -59,11 +59,13 @@ class Sidebar extends Component roomClient, toolbarsVisible, me, - screenProducer + screenProducer, + locked } = this.props; let screenState; let screenTip; + let lockState = 'unlocked'; if (me.needExtension) { @@ -86,6 +88,11 @@ class Sidebar extends Component screenTip = 'Start screen sharing'; } + if (locked) + { + lockState = 'locked'; + } + return (
{room.state}
-{room.state}
+