/// <summary>
        /// Implementación de Contrato para obtener datos de un jugador
        /// </summary>
        /// <param name="actualPlayer"></param>
        public void GetActualPlayer(Jugador actualPlayer)
        {
            DataObtainedResult dataObtainedResult = DataObtainedResult.ErrorObtainingData;

            DataAccess.Jugador searchedPlayer = jugadorDataManager.GetPlayerByNickname(actualPlayer.Apodo);

            if (searchedPlayer != null)
            {
                Dominio.Jugador domainSearchedPlayer = new Dominio.Jugador
                {
                    IdJugador            = searchedPlayer.idJugador,
                    Apodo                = searchedPlayer.apodo,
                    CorreoElectronico    = searchedPlayer.correoElectronico,
                    Status               = searchedPlayer.status,
                    PreguntaRecuperacion = searchedPlayer.preguntaRecuperacion,
                    IdLenguaje           = searchedPlayer.idioma
                };
                dataObtainedResult = DataObtainedResult.DataObtained;
                PlayerCallback.SendActualPlayer(dataObtainedResult, domainSearchedPlayer);
            }
            else
            {
                Dominio.Jugador emptyPlayer = new Jugador();
                PlayerCallback.SendActualPlayer(dataObtainedResult, emptyPlayer);
            }
        }
        private void SaveNewPlayer(Jugador player)
        {
            SaveResult saveResult;

            DataAccess.Jugador newPlayer = new DataAccess.Jugador
            {
                apodo                 = player.Apodo,
                contrasenia           = hashText.TextToHash(player.Contrasenia),
                correoElectronico     = player.CorreoElectronico,
                status                = ACTIVATION_STATE,
                respuestaConfirmacion = player.RespuestaConfirmacion,
                preguntaRecuperacion  = player.PreguntaRecuperacion,
                pinConfirmacion       = player.PinConfirmacion,
                idCreador             = 1,
                idioma                = player.IdLenguaje
            };

            JugadorDataManager jugadorManager = new JugadorDataManager();
            int columnasAfectadas             = jugadorManager.SaveNewPlayer(newPlayer);
            RankingDataManager rankingData    = new RankingDataManager();

            rankingData.NewPlayerRank(newPlayer);
            if (columnasAfectadas > 0)
            {
                saveResult = SaveResult.JugadorGuardado;
                PlayerCallback.GetSaveResult(saveResult, player);
            }
            else
            {
                saveResult = SaveResult.ErrorGuardado;
                PlayerCallback.GetSaveResult(saveResult, player);
            }
        }
        /// <summary>
        /// Implementación de Contrato para iniciar sesion como Jugador
        /// </summary>
        /// <param name="player"></param>
        public void LoginPlayer(Jugador player)
        {
            LoginResult        result         = LoginResult.NoExisteJugador;
            JugadorDataManager jugadorManager = new JugadorDataManager();

            if (jugadorManager.CheckNickname(player.Apodo))
            {
                if (jugadorManager.CheckState(player.Apodo))
                {
                    if (jugadorManager.EsPasswordCorrecto(player.Contrasenia, player.Apodo))
                    {
                        DataAccess.Jugador searchedPlayer = jugadorManager.GetPlayerByNickname(player.Apodo);
                        if (!playersLoggedIn.ContainsKey(searchedPlayer.apodo))
                        {
                            result = LoginResult.ExisteJugadorVerificado;

                            playersLoggedIn.Add(searchedPlayer.apodo, PlayerCallback);
                            player.Apodo                = searchedPlayer.apodo;
                            player.IdLenguaje           = searchedPlayer.idioma;
                            player.IdJugador            = searchedPlayer.idJugador;
                            player.Contrasenia          = searchedPlayer.contrasenia;
                            player.CorreoElectronico    = searchedPlayer.correoElectronico;
                            player.PreguntaRecuperacion = searchedPlayer.preguntaRecuperacion;

                            PlayerCallback.GetPlayerLoginResult(result, player);
                        }
                        else
                        {
                            result = LoginResult.LOGGED_PLAYER;

                            PlayerCallback.GetPlayerLoginResult(result, player);
                        }
                    }
                    else
                    {
                        result = LoginResult.PasswordIncorrecto;

                        PlayerCallback.GetPlayerLoginResult(result, player);
                    }
                }
                else
                {
                    CheckBan(player);
                }
            }
            else
            {
                PlayerCallback.GetPlayerLoginResult(result, player);
            }
        }
        /// <summary>
        /// Implementación de Contrato para enviar email de solicitud de cambio de contraseña a un jugador
        /// </summary>
        /// <param name="actualNickname"></param>
        /// <exception>
        /// Este metodo puede retornar una excepcion tipo SmtpException
        /// </exception>
        public void PasswordForgotMail(string actualNickname)
        {
            JugadorDataManager jugadorManager = new JugadorDataManager();
            MailResult         mailSuccesResult;
            string             securityQuestion = " ";

            if (jugadorManager.CheckNickname(actualNickname))
            {
                DataAccess.Jugador player = jugadorManager.ChangePinByNickname(actualNickname);
                securityQuestion = player.preguntaRecuperacion;

                System.Net.Mail.MailMessage mailMesagge = new System.Net.Mail.MailMessage();

                mailMesagge.To.Add(player.correoElectronico);
                mailMesagge.Subject = "Recuperacion de cuenta del jugador " + player.apodo;
                mailMesagge.Body    = "Hola " + player.apodo + " has solicitado una recuperacion de cuenta, " +
                                      "el código de verificación para cambiar tu contraseña es el siguiente: " + player.pinConfirmacion;
                mailMesagge.From = new System.Net.Mail.MailAddress("*****@*****.**", "Checkers Game Proyect");

                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
                {
                    Credentials = new System.Net.NetworkCredential(mailUser, mailPassword),
                    Port        = 587,
                    EnableSsl   = true,
                    Host        = "smtp.gmail.com",
                };
                try
                {
                    client.Send(mailMesagge);
                    mailSuccesResult = MailResult.MailSend;
                    PlayerCallback.GetMailResult(mailSuccesResult, actualNickname, securityQuestion);
                }
                catch (System.Net.Mail.SmtpException)
                {
                    mailSuccesResult = MailResult.SendError;
                    PlayerCallback.GetMailResult(mailSuccesResult, actualNickname, securityQuestion);
                }
            }
            else
            {
                mailSuccesResult = MailResult.UnknownPlayer;
                PlayerCallback.GetMailResult(mailSuccesResult, actualNickname, securityQuestion);
            }
        }