<script>
var token = document.getElementById("token").value;
var connection = new signalR.HubConnectionBuilder()
.withUrl(`https://localhost:7235/chat?access_token=${token}`)
.configureLogging(signalR.LogLevel.Information)
.build();
connection.on("ReceiveMessage", function (res) {
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
li.textContent = `${res.senderId} says ${res.message}`;
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString() + "error because connection not established");
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var receiver = document.getElementById("receiverId").value;
var mesg = document.getElementById("message").value;
var sender = document.getElementById("senderId").value;
var obj = {
message: mesg,
receiverId: receiver,
senderId: sender,
};
connection.invoke("SendMessage", obj).catch(function (err) {
return console.error(err.toString() + "-error cannot able to send message");
});
event.preventDefault();
});
</script> I able to find the above error but got new error. We cannot say that it is error but. Actually I want to implement one-to one chat with signalr but when i send the message to one then it will go to all . Above is my js and given is my chathub code.
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using SignalRCommon.Model;
using System.Security.Claims;
namespace SignalRApi.Hubs
{
[Authorize(AuthenticationSchemes = "Bearer")]
public class ChatHub:Hub
{
static IList<UserConnection> Users = new List<UserConnection>();
public override async Task OnConnectedAsync()
{
string userId = Context.User.FindFirstValue("id");
var existingUser = Users.FirstOrDefault(x => x.UserId == userId);
var indexOfExistingUser = Users.IndexOf(existingUser);
UserConnection user = new UserConnection
{
UserId = userId,
ConnectionId = Context.ConnectionId
};
if (!Users.Contains(existingUser))
{
Users.Add(user);
}
else
{
Users[indexOfExistingUser] = user;
}
await base.OnConnectedAsync();
}
public async Task SendMessage(MessageViewModel model)
{
var reciever = Users.FirstOrDefault(x => x.UserId == model.ReceiverId);
var connectionId1 = reciever==null?"offline": reciever.ConnectionId;
var sender = Users.FirstOrDefault(x => x.UserId == model.SenderId);
var connectionId2 = sender == null ? "offline" : sender.ConnectionId;
await Clients.Client(connectionId1).SendAsync("ReceiveMessage",model);
await Clients.Client(connectionId2).SendAsync("ReceiveMessage", model);
}
}
}