Есть ли способ отличить лидеров комнаты?

Когда пользователь создает комнату, получает ли этот пользователь какой-то идентификатор, который можно использовать для предоставления ему специальных / отдельных функций в комнате?

Я имею в виду сценарий типа "следуй за лидером", когда создатель комнаты - единственный, кто может повлиять на страницу.

(Я предполагаю, что это легко сделать с помощью формальной аутентификации пользователя, но мне любопытно, что происходит "из коробки".)

1 ответ

Решение

В настоящее время нет способа определить, какой пользователь первым присоединился к комнате. В настоящее время единственный способ сделать это - использовать JWT, который определяет, какие пользователи являются лидерами или последователями по своим группам.

Затем вы можете использовать наши ACL, чтобы гарантировать, что только лидер может изменять определенные данные. Для получения групп пользователей вы можете вызвать get на соответствующем пользовательском ключе для отображения соответствующих представлений внутри вашего приложения.

В нашей дорожной карте есть возможность считывать информацию о группах и пользователях из ключа в ACL, что означает, что когда пользователь присоединяется к комнате, он может выполнить набор с перезаписью false. Если бы ни один пользователь не установил ключ, он автоматически стал бы членом группы.

Если вас не беспокоит правильная аутентификация пользователя, вы можете определить пользователя, используя набор перезаписи. Ниже приведен пример:

var leaderKey = room.key('leader');
function acquireLeader (cb) {
  leaderKey.set(user.id, { overwrite: false, cascade: room.self() }, function (err) {
    if (err instanceof goinstant.errors.CollisionError) {
      return cb(null, false); // someone else is the leader
    } else if (err) {
      return cb(err); // something else went wrong
    }

    cb(null, true);
  });
}

room.join(function(err) {
  if (err) {
    throw err;
  }

  acquireLeader(function(err, isLeader) {
    if (err) {
      throw err;
    }

    console.log('are you the leader?', isLeader);


    leaderKey.on('remove', function (value, context) {
      acquireLeader(function(err, isLeader) {
        console.log('did you acquire leader?', isLeader);
      });
    });
  });
});

Приведенные выше рычаги устанавливают перезапись и каскадирование ключей, чтобы при входе пользователя в комнату они пытались стать лидером. Если ключ не имеет значения, его идентификатор пользователя сохраняется в ключе лидера. Если ключ уже имеет значение, то кто-то еще является лидером.

Когда пользователь покидает комнату, ключ лидера будет удален, и затем снова могут быть выбраны лидеры. То есть кто-то всегда будет лидером!

Другие вопросы по тегам