public TwoWayResult PlayMatch(Guid matchId) { var m = factory.GetGame(matchId, true); m.RestartMatch(); //send the match info string player1ClientId = factory.GetPlayerPresence().GetClientId(m.Player1); string player2ClientId = factory.GetPlayerPresence().GetClientId(m.Player2); //verify the client id if (Context.ConnectionId != player1ClientId && Context.ConnectionId != player2ClientId) { //cannot determine the ID of the caller dynamic call = new ClientCall { CallerId = Context.ConnectionId, ClientId = Context.ConnectionId }; call.game.identityError(); //Caller.identityError(); return new TwoWayResult(call); } //create a group for this match //base.GroupManager.AddToGroup(player1ClientId, string.Format("match_", id)); //base.GroupManager.AddToGroup(player2ClientId, string.Format("match_", id)); string player1Name = factory.GetPlayerPresence().GetPlayerNameByClientId(player1ClientId); string player2Name = factory.GetPlayerPresence().GetPlayerNameByClientId(player2ClientId); var mi = new MatchInfo { MatchId = m.MatchId, Player1 = m.Player1, Player2 = m.Player2, Turn = m.Turn, Player1ClientId = player1ClientId, Player2ClientId = player2ClientId, OponentClientId = player1ClientId == Context.ConnectionId ? player2ClientId : player1ClientId, PlayerId = player1ClientId == Context.ConnectionId ? m.Player1 : m.Player2, MyPlayerName = player1ClientId == Context.ConnectionId ? player1Name : player2Name, OtherPlayerName = player1ClientId == Context.ConnectionId ? player2Name : player1Name }; Guid iam = player1ClientId == Context.ConnectionId ? m.Player1 : m.Player2; mi.Units = m.Units.Where(u => u.PlayerId == iam).Select(u => new UnitInfo { UnitId = u.UnitId, PlayerId = u.PlayerId, Name = u.Name, MaxHealth = u.MaxHealth, Health = u.Health, Col = u.Column, Row = u.Row } ).ToArray(); //send the match info to the player //Caller.matchReady(mi); dynamic call2 = new ClientCall { CallerId = Context.ConnectionId, ClientId = Context.ConnectionId }; call2.game.matchReady(mi); return new TwoWayResult(call2); }