2013-06-26 28 views
12

我是使用SignalR(今天開始)的新手,非常簡單地向所有連接的客戶端發送消息,但現在我只想發送給一個組。我無法找到有關如何在客戶端加入的簡單文檔。如果有人可以幫助,我怎麼才能在JavaScript方面加入一個組。謝謝你的幫助。如何使用SignalR加入組

public class EventHub : Hub 
{ 
    public void SendNewMedia(MediaInfoViewModel model,Guid eventId) 
    { 
     Clients.Group(eventId.ToString()).setupmedia(model); 
    } 
} 
//Controller that is sending client new data 
var eventHub = GlobalHost.ConnectionManager.GetHubContext<EventHub>(); 
       var result = eventHub.Clients.Group(eventId.ToString()).setupmedia(eventViewer); 

//Finally the javascript. Not sure how to setup just for a group 
$(function() { 
    var event = $.connection.eventHub; 
    event.client.setupmedia = function (newMedia) { 

     $('#photolist').prepend('<li><img src="' + newMedia.MediaUrl + '" class="img-polaroid span2"/></li>'); 
    }; 
    $.connection.hub.start(function() { 
     event.server.create(eventID);//I know this is wrong but not sure how to connect 
    }).done(function() { 
     alert('conntected. Ready to retrieve data!'); 
    }); 
}); 

回答

25

你不能。如果你可以從JavaScript加入一個組,那麼任何人都可以使用你的代碼加入任何破壞安全性的組。如果您真的需要這麼做 - 在服務器端創建一個方法,將組名稱作爲參數並將客戶端添加到組中。

public void JoinGroup(string groupName) 
{ 
    this.Groups.Add(this.Context.ConnectionId, groupName); 
} 

之後,從JS調用它的驚訝,這是唯一的答案是

eventHub.server.joinGroup("my-awsm-group"); 
+0

類。作爲Signal R的新手,我很好奇自己加入團隊的替代模式是什麼?有沒有方法可以加入服務器端的客戶端,例如它們不是像這樣的直接顯式交互(JS客戶端調用方法的地方)的一部分。如果你有他們的客戶ID,然後他們神奇地成爲它的一部分,你可以加入一個客戶端到服務器端的一個組? PS。這真的不是一個不同的問題 - 如果你(或任何其他人)有任何其他想法,更是如此。 –

+1

組管理只在服務器上完成,所以是的 - 如果你有用戶的連接ID,你可以將他添加到任何組。事實上,這就是它應該工作的方式。 –