I am developing a chat application like facebook in MVC 4.
I am connecting to hub like following
var chat = $.connection.chatHub;
$.connection.transports.longPolling.supportsKeepAlive = function () {
return false;
}
$.connection.hub.qs = "UserID=" + $('#hdfLoggedInUserID').val();
$.connection.hub.start().done(function () {
});
$.connection.hub.disconnected(function () {
setTimeout(function () {
$.connection.hub.start();
}, 5000);
});
And my hub class is like following
public override Task OnConnected()
{
var userID = Context.QueryString["UserID"];
if (userID != null)
{
RefreshOnlineUsers(uId);
}
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
var userID = Context.QueryString["UserID"];
if (userID != null)
{
RefreshOnlineUsers(uId);
}
return base.OnDisconnected(stopCalled);
}
It's working fine when I am working with only one browser tab.
OnConnected calls when browser tab open and OnDisconnected calls when browser tab closed. So according to this when I open one tab then OnConnected calls and user's status(online) and connection_id update in database.
After that I open my application in new tab of same browser then OnConnected method calls again and user's new connection_id and status(online) update in database.
After that when I close new browser tab then OnDiconnected calls and user's status changes to offline in database. But user is still online in previous browser tab.
Due to this issue this user is offline according to database but it's online.
Q : How can I resolve this multiple browser tab issue?
Thanks.
What I have tried:
I am already done lot of R&D about it but can't find any proper solution.