我是 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>' + ': ' + message + '</br>');
}
else {
//To show only typed message, not the username
showMessage.append(' ' + 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);
}
}