信号器 - 用于发送消息的覆盖方法

时间:2013-01-21 16:13:12

标签: c# asp.net signalr

我在Signalr中实现了PersistentConnection类。对于我们的网站,我需要能够广播一条消息,然后让每个连接确定该特定消息是否与该特定用户相关,然后再将其发送到浏览器。

这样的事情:

public class MyConnection : PersistentConnection {

    private int _UserID;

    public override void OnSending(object message) {
        var msg = message as MyNotification;
        if(msg != null && !msg.CanRead(_UserID))
            return;
        base.OnSending(message);
    }

}

这可能吗?

现在,我们有一个自定义会话状态对象。连接后,id将添加到用户会话对象。当我们有一个要发送的消息时,我们引发一个事件,每个会话确定是否将消息传递给其关联的客户端ID。我真的想把它与会话对象分开。

1 个答案:

答案 0 :(得分:7)

您可以创建一个集线器管道模块来实现这种效果。

例如,你可以这样做:

public class MyModule : HubPipelineModule
{
    protected override bool OnBeforeOutgoing(IHubOutgoingInvokerContext context)
    {
        return context.Connection.ShouldSend();
    }
}

然后在你的Application_Start中:

GlobalHost.HubPipeline.AddModule(new MyModule());

当然,您需要将ShouldSend方法添加到IConnection接口和相应的连接对象,但这会为您提供所需的结果。

有关集线器管道模块的更多信息,请参阅http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

处的集线器管道部分