2012-01-10 11 views
3

SignalR(Knockoutjsで使用される)を評価して、クライアントに並行性の問題を通知できるかどうかを確認しています。基本的にユーザー "a"はレコードを保存し、ユーザー "b、c、d、e、f、g"に通知します。私は基本的にすべてのクライアントに通知する作業例を持っています。だから、私はほとんどそこにいると思う。SignalRのClients.methodコールからクライアントを除外する方法はありますか?

私はこのlinkに出くわしました。私は現在の私の道に導いてくれます。私はGithubのドキュメントも見てきました。

基本的には、単一のクライアントをClients.method()呼び出しから除外したいと考えています。クライアントをループしてClientIdをチェックする方法はありません。私がこれを達成するために見ることができる唯一の他のものは、おそらくそれを追跡するためにグループを使用することを見ることですが、それはちょっと面倒なようでしたが、私もそれに問題がありました。

JavaScriptコード
public class TicketHub : Hub 
{ 
    static int TotalTickets = 10; 

    public void GetTicketCount() 
    { 
     AddToGroup("ticketClients"); 
     Clients.setTicketCount(TotalTickets); 
    } 

    public void BuyTicket() 
    { 
     if (TotalTickets > 0) 
      TotalTickets -= 1; 

     RemoveFromGroup("ticketClients"); 

     // This will call the method ONLY on the calling client 
     // Caller.updateTicketCountWithNotification(TotalTickets); 

     // This will call the method on ALL clients in the group 
     Clients["ticketClients"].updateTicketCountNotify(TotalTickets); 

     AddToGroup("ticketClients"); 

     Caller.updateTicketCountDontNotify(TotalTickets); 
    } 
} 
+0

あなたは明確にしたいことを述べることができますか?ユーザーが行った変更を特定のユーザーに表示しますか? – sinanakyazici

+0

@ sinanakyaziciもう一度言いたいのですが、発信者以外のすべてのクライアントに通知する必要があります。特定のものを除外するためにクライアントをループする方法はないようです。特定のものを呼び出すことも、すべてを呼び出すこともできます。 – Etch

答えて

8

:あなたはあなたが使用できるクライアント側のメソッドの呼び出しから発信者を除外したい場合は

public class Test : Hub 
{ 
    public void Start() 
    { 
     Caller.guid = Guid.NewGuid(); 
    } 

    public void TestMethod() 
    { 
     Clients.show("test", Caller.guid); 
    } 
} 
+0

優れています。私はjavascriptでそれを管理することについて考えなかった。私はまた、自分の識別子を管理するのではなく、クライアントIDを使うことを望んでいました。しかし、それは動作します。ありがとう! – Etch

+0

私の問題を解決しました。sinan – bhargav

+3

レコードのためだけに、あなたはこのような何かのために自分のGUIDの代わりに '$ .connection.hub.id'を使うこともできます。 – samandmoore

3

<script type="text/javascript"> 
    $(document).ready(function() { 
     var test = $.connection.test; 
     $("#btnTest").click(function() { 
      test.testMethod(); 
     }); 
     test.show = function (text, guid) { 
      if (guid != test.guid) //notify all clients except the caller 
       alert(text); 
     }; 
     $.connection.hub.start(function() { test.start(); }); 
    }); 
</script> 

クラス

Clients.Others.clientSideMethod(); 
+0

これは、ユーザーaがハブへの電話を行ったと仮定します – JBeagle

3

また、Clients.AllExcept(...)tha特定の人を除外することができます。

+0

今、これを使用します。しかし、この質問の時点でのバージョンは、その呼び出しを持っていませんでした。 – Etch

関連する問題