向特定客户端发送消息以及发送消息的用户

时间:2013-01-04 10:24:36

标签: jquery asp.net signalr

我是SignalR的初学者。我创建了一个基于SignalR的基本聊天应用程序。我面临的问题是我想向特定客户端以及发送消息的用户发送消息。怎么做?

我知道要向特定客户发送消息,我们可以这样做:

Clients.Client(Context.ConnectionId).addMessage(data);

仅向指定的客户端发送消息,而不是发送消息的客户端。

我甚至可以使用jQuery将消息附加到用户自己,错误地认为该消息已发送给指定用户。我不想这样做。

PS:我可以在这里使用done()吗?如果是,请解释一下?

编辑

.js文件

txtMsg.keypress(function (e) {
   chat.server.send(chatUsername, selectedUsername, txtMsg.val(), showChatName, _invokeChat);
});

chat.client.addMessage = function (chatUsername, message, showChatName, invokeChat) {
    if (invokeChat) {
        selectedUsername = chatUsername;
        _invokeChat = false;
        chatTitleName.text("Chat with: " + selectedUsername);
    }
    if (showChatName) {
        //To show Username with the typed message
        showMessage.append('<b>' + chatUsername + '</b>' + ':&nbsp;' + message + '</br>');
    }
    else {
        //To show only typed message, not the username
        showMessage.append('&nbsp;&nbsp;' + message + '</br>');
    }
    previousUsername = chatUsername;
    //To keep scroll always bottom
    showMessage.scrollTop(showMessage[0].scrollHeight);
};

.cs文件通过查看Samir hafez回答更改

public void Send(string from, string to, string message, bool blnShowChatName, bool blnInvokeChat)
    {
        string ConnectionID = selectUsername(to);
        // Call the addMessage method on all clients    
        Clients.Client(ConnectionID).addMessage(from, message, blnShowChatName, blnInvokeChat);
        if (!from.Equals(to))
        {
            blnInvokeChat = false;
            Clients.Caller.addMessage(from, message, blnShowChatName, blnInvokeChat);
        }
    }

2 个答案:

答案 0 :(得分:3)

我不打算将文本发送回服务器。您可以使用javascript附加消息

客户端

txtMsg.keypress(function (e) {
   chat.server.send(chatUsername, selectedUsername, txtMsg.val(), showChatName, _invokeChat);

   //add this message locally so we don't have to round trip to the server
   addMessage(chatUsername, txtMsg.val(), showChatName, _invokeChat);
});

chat.client.addMessage = addMessage;

function addMessage(chatUsername, message, showChatName, invokeChat) {
    if (invokeChat) {
        selectedUsername = chatUsername;
        _invokeChat = false;
        chatTitleName.text("Chat with: " + selectedUsername);
    }
    if (showChatName) {
        //To show Username with the typed message
        showMessage.append('<b>' + chatUsername + '</b>' + ':&nbsp;' + message + '</br>');
    }
    else {
        //To show only typed message, not the username
        showMessage.append('&nbsp;&nbsp;' + message + '</br>');
    }
        previousUsername = chatUsername;
    //To keep scroll always bottom
    showMessage.scrollTop(showMessage[0].scrollHeight);
};

服务器

public void Send(string from, string to, string message, bool blnShowChatName, bool blnInvokeChat)
    {
        string ConnectionID = selectUsername(to);
        // Call the addMessage method on all clients    
        Clients.Client(ConnectionID).addMessage(from, message, blnShowChatName, blnInvokeChat);
}

这也简化了您的服务器代码......

答案 1 :(得分:1)

Clients.Caller会给你主叫客户。

或者更详细的方式:Clients.Client(Context.ConnectionId)

所有这些都可以在SignalR Wiki for Hubs Here

上找到