您的位置:首页 > 其它

SignalR主动通知订阅者示例

2016-04-01 16:57 232 查看
html代码:

<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
<script>
$(function () {
var hub = $.connection.payHub;
hub.client.waitNotify = function (tran, url) {
console.log("waitNotify:" + tran + "   " + url);
if (tran) {
location.href = url;
}

};
$.connection.hub.start().done(function () {
console.log("hub done");
});
})
</script>


hub代码:

[HubName("payHub"), Authorize]
public class payHub : Hub
{
public static Dictionary<Guid, string> userPayHub = new Dictionary<Guid, string>();
public static void Notify(Guid userId, string redirectUrl)
{
if (userPayHub.ContainsKey(userId))
{
Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<Hubs.payHub>()
.Clients.Client(Hubs.payHub.userPayHub[userId])
.waitNotify(true, redirectUrl);
}
}
public override Task OnConnected()
{
var uid = this.Context.User.Identity.GetUserId();
userPayHub[uid] = this.Context.ConnectionId;
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
var uid = this.Context.User.Identity.GetUserId();
userPayHub.Remove(uid);
return base.OnDisconnected(stopCalled);
}
public override Task OnReconnected()
{
var uid = this.Context.User.Identity.GetUserId();
userPayHub.Remove(uid);
return base.OnReconnected();
}
}


通知调用Notify方法即可。

关键点:GlobalHost.ConnectionManager.GetHubContext
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: