Add "close meeting" function for moderator

auto_join_3.3
Håvar Aambø Fosstveit 2020-03-24 01:43:40 +01:00
parent d756dd4721
commit 04b2d6d443
5 changed files with 95 additions and 19 deletions

View File

@ -1178,6 +1178,26 @@ export default class RoomClient
roomActions.setStopAllVideoInProgress(false)); roomActions.setStopAllVideoInProgress(false));
} }
async closeMeeting()
{
logger.debug('closeMeeting()');
store.dispatch(
roomActions.setCloseMeetingInProgress(true));
try
{
await this.sendRequest('moderator:closeMeeting');
}
catch (error)
{
logger.error('closeMeeting() failed: %o', error);
}
store.dispatch(
roomActions.setCloseMeetingInProgress(false));
}
// type: mic/webcam/screen // type: mic/webcam/screen
// mute: true/false // mute: true/false
async modifyPeerConsumer(peerId, type, mute) async modifyPeerConsumer(peerId, type, mute)

View File

@ -121,4 +121,10 @@ export const setStopAllVideoInProgress = (flag) =>
({ ({
type : 'STOP_ALL_VIDEO_IN_PROGRESS', type : 'STOP_ALL_VIDEO_IN_PROGRESS',
payload : { flag } payload : { flag }
});
export const setCloseMeetingInProgress = (flag) =>
({
type : 'CLOSE_MEETING_IN_PROGRESS',
payload : { flag }
}); });

View File

@ -71,6 +71,23 @@ const ListModerator = (props) =>
defaultMessage='Stop all video' defaultMessage='Stop all video'
/> />
</Button> </Button>
<div className={classes.divider} />
<Button
aria-label={intl.formatMessage({
id : 'room.closeMeeting',
defaultMessage : 'Close meeting'
})}
className={classes.actionButton}
variant='contained'
color='secondary'
disabled={room.closeMeetingInProgress}
onClick={() => roomClient.closeMeeting()}
>
<FormattedMessage
id='room.closeMeeting'
defaultMessage='Close meeting'
/>
</Button>
</div> </div>
); );
}; };

View File

@ -1,24 +1,27 @@
const initialState = const initialState =
{ {
name : '', name : '',
state : 'new', // new/connecting/connected/disconnected/closed, state : 'new', // new/connecting/connected/disconnected/closed,
locked : false, locked : false,
inLobby : false, inLobby : false,
signInRequired : false, signInRequired : false,
accessCode : '', // access code to the room if locked and joinByAccessCode == true accessCode : '', // access code to the room if locked and joinByAccessCode == true
joinByAccessCode : true, // if true: accessCode is a possibility to open the room joinByAccessCode : true, // if true: accessCode is a possibility to open the room
activeSpeakerId : null, activeSpeakerId : null,
torrentSupport : false, torrentSupport : false,
showSettings : false, showSettings : false,
fullScreenConsumer : null, // ConsumerID fullScreenConsumer : null, // ConsumerID
windowConsumer : null, // ConsumerID windowConsumer : null, // ConsumerID
toolbarsVisible : true, toolbarsVisible : true,
mode : 'democratic', mode : 'democratic',
selectedPeerId : null, selectedPeerId : null,
spotlights : [], spotlights : [],
settingsOpen : false, settingsOpen : false,
lockDialogOpen : false, lockDialogOpen : false,
joined : false joined : false,
muteAllInProgress : false,
stopAllVideoInProgress : false,
closeMeetingInProgress : false
}; };
const room = (state = initialState, action) => const room = (state = initialState, action) =>
@ -169,6 +172,9 @@ const room = (state = initialState, action) =>
case 'STOP_ALL_VIDEO_IN_PROGRESS': case 'STOP_ALL_VIDEO_IN_PROGRESS':
return { ...state, stopAllVideoInProgress: action.payload.flag }; return { ...state, stopAllVideoInProgress: action.payload.flag };
case 'CLOSE_MEETING_IN_PROGRESS':
return { ...state, closeMeetingInProgress: action.payload.flag };
default: default:
return state; return state;
} }

View File

@ -1105,6 +1105,33 @@ class Room extends EventEmitter
break; break;
} }
case 'moderator:closeMeeting':
{
if (
!peer.hasRole(userRoles.MODERATOR) &&
!peer.hasRole(userRoles.ADMIN)
)
throw new Error('peer does not have moderator priveleges');
this._notification(
peer.socket,
'moderator:kick',
null,
true
);
// Close the peers.
for (const kickedPeer in this._peers)
{
if (peer !== kickedPeer)
kickedPeer.close();
}
cb();
break;
}
case 'moderator:kickPeer': case 'moderator:kickPeer':
{ {
if ( if (