2013-10-24 32 views
0

当用户创建一个房间时,该用户是否提供了某种标识符,可用于在房间内为他们提供特殊/独立的功能?有没有办法区分房间领导?

我特别想到一个跟随领导者类型的场景,其中房间创建者是唯一可以影响页面的人。

(我想这是很容易地通过正规的用户认证完成,但我很好奇,会发生什么开箱。)

回答

2

目前还没有办法确定哪些用户第一次加入一个房间。目前,唯一的方法是使用JWT来标识哪些用户是其组的领导者或追随者。

然后,您可以利用我们的ACL's确保只有领导者可以修改某些数据。为了检索用户组,你可以调用相关的用户密钥来在应用程序中显示适当的视图。

在我们的路线图上,可以从ACL中的某个密钥读取组和用户信息,这意味着当用户加入房间时,他们可以执行覆盖假的设置。如果没有其他用户设置了密钥,他们将自动成为该组的成员。

如果您不担心正确的用户身份验证,则可以通过利用设置覆盖来确定用户。下面是一个例子:

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); 
     }); 
    }); 
    }); 
}); 

上述杠杆设置覆盖和关键级联,以确保用户加入他们试图成为领导者的房间。如果他们的密钥没有值,他们的用户ID将存储在领导者密钥中。如果密钥已经有一个值,那么其他人就是领导者。

当用户离开房间时,领导者密钥将被删除,然后再次进行领导选举。意味着有人永远是领导者!

+0

刚刚更新了一个代码示例 –

+0

太棒了,非常感谢。这略高于我的头,但我会桶掉:) – Tim

相关问题