2012-06-24 2 views
5

채팅 응용 프로그램을 만들 계획이며 적용 할 수있는 최상의 기술 중 하나 인 SignalR을 읽었습니다.SignalR 여러 개의 대화방

예를 보았지만 대화방은 하나뿐입니다.

여러 대화방을 갖고 싶습니다. 사용자는 해당 대화방 중 하나를 선택합니다.

내가 초보자이야 있지만, 나는 SignalR에서 하나의 대화방을 만들 생각이입니다 :

<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 연결 = 하나의 채팅방 (잘 모르겠어요) 그래서

연결이 많은 경우 (예 : 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); 
    } 
} 

한 그룹이 한 방, 한 사용자가 한 방에 합류 그래서 모든 시간을 의미합니다, 당신은 단지에 해당 사용자를 추가 그 방의 그룹, 그리고 당신이 메시지를 방송하고 싶을 때, 그 그룹의 클라이언트들에게 메시지를 보내면됩니다.

자세한 내용 : https://github.com/SignalR/SignalR/wiki/Hubs

+0

도 도움이 될 것입니다. 그러나 작업에 대한 작업 방법을 모릅니다. –

-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는 모든 클라이언트에게 두 개의 값을 반환합니다. 하나는 메시지이고 다른 하나는 방입니다 ... 이제 우리는 반환 된 '방'을 현재 방과 비교할 것입니다. 고객. 일치하면 메시지는 해당 현재 회의실에 표시됩니다.

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

이 방법은 효과적이며, 연결된 모든 클라이언트에 메시지를 보냅니다. 그룹스를 사용하면 특정 방에 연결된 고객에게만 접근 할 수 있습니다. –