Адам здесь из команды OpenTok.
Вы не получите событие «connectionCreated», пока не подключитесь. Таким образом, вам нужно будет вместо этого отключиться, если вы подключились и являетесь третьим (или более) участником. Я хотел бы использовать connection.creationTime, чтобы увидеть, кто пришел первым, чтобы избежать одновременного подключения двух человек и отключения обоих. Нечто подобное должно сработать:
session = OT.initSession(apiKey, sessionId);
let connectionsBeforeUs = 0;
session.on('connectionCreated', (event) => {
if (event.connection.connectionId !== session.connection.connectionId &&
event.connection.creationTime < session.connection.creationTime) {
// There is a new connection and they got here before us
connectionsBeforeUs += 1;
if (connectionsBeforeUs >= 2) {
// We should leave there are 2 or more people already here before us
alert('disconnecting this room is already full');
session.disconnect();
}
}
});
session.connect(token);
Вот jsbin, который демонстрирует его работу .
Я не уверен, как работает все ваше приложение, но другой вариант может заключаться в том, чтобы сделать это на стороне сервера и раздать только 2 токена для подключения людей. Поэтому, когда они пытаются получить третий токен, вы блокируете их в этот момент. Вместо того, чтобы позволить им подключиться к сеансу, а затем отключить себя. Преимущество такого подхода заключается в том, что вы можете быстрее заметить и дать обратную связь пользователю. Также злоумышленник не может просто взломать JavaScript и подключиться в любом случае. Вы также можете использовать API мониторинга сеансов для отслеживания пользователей, подключающихся с вашего сервера.
Еще один вариант - использовать функцию forceDisconnect () , чтобы выгнать людей из комнаты, если там уже 2 человека. Поэтому люди, которые уже находятся в комнате, должны выгнать третьего участника, а не третьего, заметив, что там уже есть люди и покидающие себя. Это будет означать, что злоумышленник не сможет взломать код JavaScript в своем браузере и присоединиться к чужим комнатам.
Не зная всего вашего приложения, хотя трудно понять, какой вариант лучше для вас.
Надеюсь, это поможет!