朋友您好我已经使用信号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);
};
如何向我的接收者显示输入消息而不是在两个屏幕上显示...请帮助我...简而言之,我只想将消息发送给组的接收者而不是组的发送者 感谢
答案 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)
。