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);
        }