如何在Hub子类中获取组?

时间:2016-04-30 07:59:40

标签: c# asp.net inheritance webforms signalr

我正在使用SignalR构建一个ASP Web表单多玩家游戏平台来更新游戏领域。

我有GameHub来处理新玩家连接:

[HubName("GameHub")]
public class GameHub : Hub
{
    static protected IHubContext context = GlobalHost.ConnectionManager.GetHubContext<GameHub>();
    static public Dictionary<string, string> connectionIds_sessions = new Dictionary<string, string>();//connectionId and sessionId

    public void JoinGroup(string sessionId)
    {
        //this is called when the page is opened
        string connectionId = Context.ConnectionId;
        connectionIds_sessions.Add(connectionId, sessionId);

        Groups.Add(connectionId, sessionId);
    }
}

我每场比赛都有一个儿童班。例如ThisHub

[HubName("TrisHub")]
public class TrisHub : GameHub
{
    public void SendTrisUpdates(string sessionId, TrisSession tris)
    {
        Clients.Group(sessionId).getUpdates(tris);//here I receive System.NullReferenceException.
    }
}

我无法发送从母类GameHub创建的组中的内容,因为没有。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么你的代码就无法运作。

那是因为你有两个不同的集线器,因此有两种不同的连接。

第一次调用JoinGroup方法时 - 您会创建一组新的连接,但仅适用于GameHub

当您致电SendTrisUpdates方法时,它会尝试找到未为TrisHub创建的群组。然后你在不存在的群体上调用方法(等于null),这就是你得到错误的原因。

要解决此问题,请尝试将您的集线器合并为一个,以使它们具有相同的连接/组。