2013-06-26 4 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); 
} 

、これが唯一の答えでびっくりの種類その

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

ようJSからそれを呼び出します。 Signal Rの新機能である私は、グループに参加するための代替パターンが何であるか不思議です。例えばJSクライアントがメソッドを呼び出すところの、このような直接的な明示的なやりとりの一部ではない、例えばサーバー側のクライアントに参加する方法はありますか?あなたはクライアントIDを持っていて、それが魔法のようにその一部になったら、サーバー側のグループにクライアントを参加させることができますか? PS。これは本当に別の質問ではありません。あなた(または他の誰か)が他の考えを持っていれば同じだけです。 –

+1

グループ管理はサーバー上でのみ行われるので、ユーザーの接続IDがあれば任意のグループ。実際には、それは動作する方法です。 –