I am beginner in SignalR. I created a basic chat application based on SignalR. The problem I am facing is that I want to send message to the specific client as well as the user who sent the message. How to do this?
I know that to send a message to a specific client we can do this:
Clients.Client(Context.ConnectionId).addMessage(data);
which only sends message to the specified client not the one who sent the message.
I can even append the message at the user itself using jQuery giving a false belief that the message has been sent to the specified user. which I dont want to do.
PS: Can I use done()
here? If yes, please explain?
EDIT:
.js file
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 file (Changed by seeing Samir hafez answer)
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);
}
}