2016-04-30 49 views
0

我正在使用SignalR构建一个ASP Web表单多人游戏平台来更新游戏领域。如何在Hub子类中获取组?

我有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

如果我理解你的问题是正确的,那么你的代码将无法工作。

这是因为您有两个不同的集线器,因此有两个不同的连接。

当您第一次拨打JoinGroup方法时 - 您将创建一组新的连接,但仅适用于GameHub

而当您调用SendTrisUpdates方法时,它会尝试找到未为TrisHub创建的组。然后你调用不存在的组的方法(等于null),这就是为什么你会得到一个错误。

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

+0

所以我不能有一个母亲班Hub? –

+0

你可以。但他们将彼此独立(自己的连接,自己的团体等)。 – MaKCbIMKo