我是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);
}
}
答案 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>' + ': ' + 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);
};
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
上找到