关于signalR中的消息发送

时间:2013-04-30 03:36:26

标签: asp.net signalr signalr-hub

朋友您好我已经使用信号R开发了多对多的聊天应用程序它工作得非常好。但是我在开发一件事时遇到了一个问题......那就是给收件人键入消息例如: - 有两个用户在线用户x和用户y.now当用户x正在输入消息时..在用户y窗口它应该来......“用户x正在输入消息..”但是当我将此消息发送到组时,它将显示在两个屏幕上。我只想在收听者屏幕上显示它

这是代码

public void Send(string message, string groupName, string Istypingmessage)
{
    if (Clients != null)
    {

        string[] words = message.Split(':');
        string trim = words[0].Trim();
        string imagetag = "<img width=\"32px\" height=\"32px\" src=\"userimages/" + trim + ".jpg" + "\"" + "></img> ";
        Clients.Group(groupName).addMessage(message, groupName, words[0], imagetag, Istypingmessage);


    }
}

这里输入message = 0表示正常消息,1表示“用户x正在键入该消息” 这是关键的新闻事件

 //keypress event of textbbox here..
        $(".ChatText").live('keyup', function () {
            if($(".ChatText").val().length > 0)
            {
               var messsage_typing=$("#hdnUserName").val() + " is typing...";
               var strGroupName = $(this).parent().attr('groupname');
                if (typeof strGroupName !== 'undefined' && strGroupName !== false)
                    chat.server.send($("#hdnUserName").val() + ' : ' + messsage_typing, $(this).parent().attr('groupname'),"1");

            }
        });
        //end of keypress

这是添加消息代码

  chat.client.addMessage = function (message, groupName,recievername,imagetag,Istypingmessage) {

            if ($('div[groupname=' + groupName + ']').length == 0) {
                var chatWindow = $("#divChatWindow").clone(true);
                $(chatWindow).css('display', 'block');
                $(chatWindow).attr('groupname', groupName);

                $("#chatContainer").append(chatWindow);
                //buggy code do not delete..
                //remove all previous li
                $('div[groupname=' + groupName + ']').find('ul li').remove();
                //replace header tag with new name
                $('div[groupname=' + groupName + ']').find('a').html(recievername);
                $("#chatContainer").draggable();
                $("#chatContainer").css('cursor','move');
            }
            if(Istypingmessage=="0")
            {
                 var stringParts = message.split(":");
                 var username = stringParts[0];
                 var message = stringParts[1];
                 //this code is for continous message sent
                 var lastliusername=$('div[groupname=' + groupName + '] ul li').eq(-2).find('div.designnone').html();               
                 if(lastliusername!=null && $.trim(username)==$.trim(lastliusername))
                 {
                    $('div[groupname=' + groupName + '] ul li').eq(-2).find('div.designmessage').append("<span class='spansameuser'>" + message + "</span>");
                    //end of this code is for continous message sent
                 }
                 else 
                 {
                    $('div[groupname=' + groupName + ']').find('ul').append("<li><div class='design'>" + imagetag + "</div><div class='designnone'> " + username + "</div><div class='designmessage'> " + message + " </div></li><li class='cleardivbetweenmsg'></li>");
                 }

             }
             else 
             {
                    $('div[groupname=' + groupName + ']').find('ul').append("<li><span>Hellos</span></li>");
             }
             $("#messages").scrollTop($("#messages")[0].scrollHeight);
        };

如何向我的接收者显示输入消息而不是在两个屏幕上显示...请帮助我...简而言之,我只想将消息发送给组的接收者而不是组的发送者 感谢

1 个答案:

答案 0 :(得分:3)

如果您要向除发件人之外的群组中的所有客户发送邮件,您可以使用Clients.OthersInGroup

 Clients.OthersInGroup(groupName).addMessage(/*...*/);

这相当于将发件人的连接ID作为第二个参数传递给Clients.Group,使其成为排除的连接ID。

 Clients.Group(groupName, Context.ConnectionId).addMessage(/*...*/);

Clients.Group的方法签名是:public dynamic Group(string groupName, params string[] excludeConnectionIds)