2012-06-24 21 views
5

私はチャットアプリケーションを作成する予定であり、適用するには最高の技術の1つであるSignalRを読んだことがあります。SignalR複数のチャットルーム

私はそれの例を見ましたが、1つのチャットルームしか持っていません。

複数のチャットルームが必要です。ユーザーはこれらのチャットルームの1つを選択するだけです。

<script type="text/javascript"> 
    $(function() { 
     var connection = $.connection.communicator; 
     connection.receive = function (from, msg) { 
      $("#chatWindow").append("<li>" + from + ": " + msg + "</li>"); 
     }; 
     $.connection.hub.start(); 

     $("#btnSend").click(function() { 
      connection.broadcast($("#txtName").val(), $("#txtMsg").val()); 
     }); 
    }); 
</script> 

VAR接続=だから、シングルチャットルーム(私はよく分からない)

私は初心者だが、私はSignalRで、単一のチャットルームを作成すると思いますが、このことです私は多くの接続がある場合(例えば、connection1、connection2、connection3 ....)私は複数のチャットルームを持つことができますか?

もう一度、私は複数のチャットルームを実装する方法で私を助けてください...

(PS ...これが正しいかどうかを確認していない:私はJABBRを見てきましたが、そのコードは私の鼻を作っていますあなたは簡単な例を提供できますか?)

答えて

14

あなたは、複数の接続を開く必要がただ一つが、Groupを使用しないでください:

public class MyHub : Hub, IDisconnect 
{ 
    public Task Join() 
    { 
     return Groups.Add(Context.ConnectionId, "foo"); 
    } 

    public Task Send(string message) 
    { 
     return Clients["foo"].addMessage(message); 
    } 

    public Task Disconnect() 
    { 
     return Clients["foo"].leave(Context.ConnectionId); 
    } 
} 

一つのグループは、そう、1人のユーザーが1つの部屋に参加するたびに、一つの部屋を意味し、あなただけに、そのユーザーを追加しますその部屋のグループ、およびメッセージをブロードキャストするときは、グループ内のクライアントにメッセージを送信します。

詳細: https://github.com/SignalR/SignalR/wiki/Hubs

+0

もお手伝いしますが、私は仕事での作業方法はわかりません。 –

-1

複数の接続は必要ありません。 1つだけを使用して、返されたJSONメッセージに、そのメッセージがどの部屋のためのものであるかを示すメタデータを入れてください。 JavaScriptコードはメッセージを正しい部屋に送る必要があります。

+0

複数の部屋を設定する方法はわかりません。コードのどの部分を変更する必要がありますか? –

+0

無料のチャットルームの実例やデモをオンラインで見るには、http://talkwithstranger.com/free-chat-rooms – Faizan

1

わかりました...ここでは複数の部屋を作るための最も簡単な方法です:

$(function() { 
    var chat = jQuery.connection.chat; 

    chat.addMessage = function (message, room) { 

     if ($('#currentRoom').val() == room) { 
      $('#messagesList').append('<li>' + message + '</li>'); 
     } 
    }; 

    chat.send($('#textboxMessage').val(), $('#currentRoom').val()); 
    $('#textboxMessage').val(""); 

    $.connection.hub.start(); 
}); 


public class Chat : Hub 
{ 
    public void Send(string msg, string room) 
    { 
     Clients.addMessage(msg, room); 
    } 
} 

私が利用可能なお部屋のドロップダウンリストがあり、選択された部屋は値になります要素の、のテキストボックスを言わせて:

<input type="text" readonly="readonly" id="currentRoom" /> 

さて、毎回の.sendが呼び出され、私たちは、メッセージが、アルないだけを渡します現在の部屋...

.addMessageはすべてのクライアントに2つの値を返します.1つはメッセージ、もう1つは部屋です...返された「部屋」を現在の部屋と比較します。クライアント。一致すると、その現在の部屋にメッセージが表示されます。

if ($('#currentRoom').val() == room) { 
    $('#messagesList').append('<li>' + message + '</li>'); 
} 
+0

このアプローチは、接続されているすべてのクライアントにメッセージを送信します。グループを使用すると、特定の部屋に接続しているクライアントにのみアクセスできます。 –

関連する問題