2013-07-15 69 views
1

我上的腳本工作,其中的邏輯是:如果誰已經通過socket.io創建一個房間的人「創造空間」的方法,沿着線的東西:如何強制多個客戶端離開socket.io?

client.on("createRoom", function (name) { 
    client.room = name; 
    client.join(client.room); 
    client.emit("update", "Welcome to room:" + name + "."); 
}); 

多的人都可以加入同一個房間通過另一種方法。我的問題是,如何實現一個解決方案 - 如果房間的所有者(由socket.io生成的唯一ID存儲在我的腳本中並記錄爲「所有者」),則與服務器斷開連接,所有其他連接的客戶端到同一個房間也斷開?我知道我必須使用client.leave()方法,但我不知道如何將它應用於多個客戶端。

回答

0

將客戶端作爲對象存儲在數組中。存儲房間號碼,如果他們擁有房屋的房間。在斷開連接事件中,檢查有問題的用戶的ownsroom屬性,如果是這樣,請遍歷數組搜索其他客戶端,其中roomid屬性與斷開連接的所有者匹配。如果clients[i].roomid == disconnected.roomid的if語句爲true,則調用leave函數以刪除連接。

var i = 0; 
while(i < clients.length){ 
    if(clients[i].room == disconnected.room) 
     clients[i].leave(); 
    ++i; 
} 
+0

謝謝。 「房間號碼」是指房間的ID嗎?另外,你是否在說做客戶[我] .leave()?我不確定我是否按照你解釋的最後部分。 – Tamas

+0

我添加了一些僞代碼 – bobbybee

+0

是的,我試圖按照我的需要重做這個。我有一個包含所有連接客戶端的人員對象,以及一個人是否擁有一個房間,或者是否在一個房間內,並且它是在client.id中鍵入的.id:people [client.id] = {「name」:name,「owns」: ownerRoomID,「inroom」:inRoomID}; – Tamas