Как предотвратить более 2-х клиентов tokbox? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть следующий код:

openTokInit() {
    this.session = OT.initSession(this.tokboxApiKey, this.sessionId);
    const self = this;
    this.session.on('connectionCreated', function(event) {
        self.connectionCount++;
    });

    if (this.connectionCount < 2) {
        this.session.connect(this.token, err => {
            if (err) {
                reject(err);
            } else {
                resolve(this.session);
            }
        });
    }

Проблема в том, что при выполнении оператора if значение connectionCount всегда равно 0, потому что событие 'connectionCreated' вызывается через несколько секунд.Я не понимаю, как правильно дождаться запуска всех событий connectionCreated перед подключением нового сеанса.

1 Ответ

1 голос
/ 11 марта 2019

Адам здесь из команды 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 в своем браузере и присоединиться к чужим комнатам.

Не зная всего вашего приложения, хотя трудно понять, какой вариант лучше для вас.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...