2016-04-30 5 views
0

私は、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

私があなたの質問を正しく理解していれば、コードは機能しません。

これは、2つの異なるハブがあり、2つの異なる接続があるからです。

最初にJoinGroupメソッドを呼び出すと、新しい接続グループが作成されますが、GameHubのみです。

メソッドを呼び出すと、TrisHubに対して作成されなかったグループが見つかります。そして、あなたは存在しないグループ(等価null)上でメソッドを呼び出すので、エラーが発生します。

この問題を解決するには、ハブを1つのに結合して、同じ接続/グループにするようにしてください。

+0

母クラスはありませんか? –

+0

できます。しかし、彼らはお互いに独立している(独自の接続、自分のグループなど)。 – MaKCbIMKo

関連する問題