2013-10-24 31 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

相關問題