我正在使用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创建的组中的内容,因为没有。
我该怎么做?
答案 0 :(得分:1)
如果我理解你的问题,那么你的代码就无法运作。
那是因为你有两个不同的集线器,因此有两种不同的连接。
第一次调用JoinGroup
方法时 - 您会创建一组新的连接,但仅适用于GameHub
。
当您致电SendTrisUpdates
方法时,它会尝试找到未为TrisHub
创建的群组。然后你在不存在的群体上调用方法(等于null
),这就是你得到错误的原因。
要解决此问题,请尝试将您的集线器合并为一个,以使它们具有相同的连接/组。