コード例 #1
0
 public void PararServidor()
 {
     if (EstadoDelServidor != EstadoDelServidor.Detenido)
     {
         if (HostDelServidor != null)
         {
             HostDelServidor.Abort();
         }
         ServiciosDeJuego.SesionesConectadas.Clear();
         ControladorDeActualizacionDePantalla.ListaDeSesionesActualizado(ServiciosDeJuego.SesionesConectadas);
         EstadoDelServidor = EstadoDelServidor.Detenido;
         ControladorDeActualizacionDePantalla.EstadoDelServidorActualizado(GetType().Name, EstadoDelServidor);
     }
 }
コード例 #2
0
 public void LimpiarSesiones()
 {
     SesionesConectadas.Clear();
     ControladorDeListas.ListaDeSesionesActualizado(SesionesConectadas);
 }
コード例 #3
0
        /// <summary>
        /// Valida si el usuario esta registrado en la base de datos y realiza un callback con la <see cref="Sesion"/>,
        /// regresa <see cref="EstadoUsuario.Inexistente"/> en <see cref="Sesion.Usuario"/> para cuando no se encuentra en la base de datos o sus
        /// credenciales son inválidas para asegurar que el cliente no recibe información de la existencia del usuario
        /// en la base de datos.
        /// </summary>
        /// <param name="usuario"><see cref="Usuario.Contraseña"/> debe ser un SHA256</param>
        public void AutenticarUsuario(Usuario usuario)
        {
            Sesion sesion = new Sesion()
            {
                Usuario = new Usuario()
            };

            if (usuario.ValidarCredenciales())
            {
                Usuario usuarioCargado = new Usuario();
                try
                {
                    usuarioCargado = usuario.CargarUsuarioPorCorreo();
                }
                catch (InvalidOperationException)
                {
                    sesion.Usuario.Estado = EstadoUsuario.Inexistente;
                }

                if (usuarioCargado.Estado == EstadoUsuario.Registrado)
                {
                    bool correoConectadoAlServidor = SesionesConectadas.Exists(s => s.Usuario.CorreoElectronico == usuarioCargado.CorreoElectronico);
                    if (correoConectadoAlServidor)
                    {
                        sesion.Usuario.Estado = EstadoUsuario.ActualmenteConectado;
                    }
                    else
                    {
                        sesion = GenerarNuevaSesion(usuarioCargado);
                    }
                }
                else if (sesion.Usuario.Estado != EstadoUsuario.Inexistente)
                {
                    sesion.Usuario.Estado = usuarioCargado.Estado;
                }
            }
            else
            {
                sesion.Usuario.Estado = EstadoUsuario.Inexistente;
            }

            bool sesionEnviadaCorrectamente = false;

            sesion.CanalDeCallback = OperationContext.Current.GetCallbackChannel <IServiciosDeCallBack>();
            try
            {
                sesion.CanalDeCallback.RecibirSesion(sesion);
                sesionEnviadaCorrectamente = true;
            }
            catch (CommunicationException e)
            {
                NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
                logger.Warn(e);
            }

            if (sesionEnviadaCorrectamente && sesion.Usuario.Estado == EstadoUsuario.Registrado)
            {
                SesionesConectadas.Add(sesion);
                if (ControladorServiciosDeFlipllo != null)
                {
                    ControladorServiciosDeFlipllo.ListaDeSesionesActualizado(SesionesConectadas);
                }
            }
        }