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 verificar un jugador antes de ser otorgado acceso al sistema
        /// </summary>
        /// <param name="player"></param>
        public void VerifyPlayer(Dominio.Jugador player)
        {
            VerificationResult resultado = VerificationResult.NoExisteJugador;

            JugadorDataManager jugadorManager = new JugadorDataManager();

            if (jugadorManager.CheckNickname(player.Apodo))
            {
                if (jugadorManager.PinCorrecto(player.Apodo, player.PinConfirmacion))
                {
                    int result = jugadorManager.VerifyNewPlayer(new DataAccess.Jugador
                    {
                        apodo           = player.Apodo,
                        pinConfirmacion = player.PinConfirmacion,
                    });

                    if (result > 0)
                    {
                        resultado = VerificationResult.VerificacionExistosa;
                    }
                }
                else
                {
                    resultado = VerificationResult.PinIncorrecto;
                }
            }
            else
            {
                resultado = VerificationResult.NoExisteJugador;
            }

            PlayerCallback.GetVerifyResult(resultado);
        }
        /// <summary>
        /// Implementación de Contrato para guardar un jugador registrado a la base de datos
        /// </summary>
        /// <param name="player"></param>
        /// <exception>
        /// Este metodo puede retornar una excepcion tipo SmtpException
        /// </exception>
        public void SavePlayer(Dominio.Jugador player)
        {
            JugadorDataManager playerDataManager = new JugadorDataManager();

            SaveResult saveResult;
            MailResult mailResult;

            bool nicknameExists = playerDataManager.CheckNickname(player.Apodo);

            if (!nicknameExists)
            {
                bool emailExists = playerDataManager.CheckEmail(player.CorreoElectronico);

                if (!emailExists)
                {
                    System.Net.Mail.MailMessage mensaje = new System.Net.Mail.MailMessage();

                    mensaje.To.Add(player.CorreoElectronico);
                    mensaje.Subject = "Account creation confirmation" + player.Apodo;
                    mensaje.Body    = "Hello " + player.Apodo + " you are one step away from verifying your account!, " +
                                      "the account verification code is as follows: " + player.PinConfirmacion;
                    mensaje.From = new System.Net.Mail.MailAddress("*****@*****.**", "Checkers Game Proyect");

                    System.Net.Mail.SmtpClient cliente = new System.Net.Mail.SmtpClient
                    {
                        Credentials = new System.Net.NetworkCredential(mailUser, mailPassword),
                        Port        = 587,
                        EnableSsl   = true,
                        Host        = "smtp.gmail.com",
                    };
                    try
                    {
                        mailResult = MailResult.MailSend;
                        cliente.Send(mensaje);
                    }
                    catch (System.Net.Mail.SmtpException)
                    {
                        mailResult = MailResult.SendError;
                        PlayerCallback.GetResendMailResult(mailResult, player.Apodo);
                    }
                    if (mailResult == MailResult.MailSend)
                    {
                        SaveNewPlayer(player);
                    }
                }
                else
                {
                    saveResult = SaveResult.CorreoExistente;
                    PlayerCallback.GetSaveResult(saveResult, player);
                }
            }
            else
            {
                saveResult = SaveResult.NicknameExistente;
                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);
            }
        }