示例#1
0
        /// <summary>
        /// Valida la <paramref name="sesion"/> y la <paramref name="sala"/> para registrar la sesión en esta
        /// </summary>
        /// <param name="sala"></param>
        /// <param name="sesion"></param>
        public void IngresarASala(Sesion sesion, Sala sala)
        {
            if (ValidarAutenticidadDeSesion(sesion) &&
                ValidarExistenciaDeSala(sala) &&
                !ValidarExistenciaDeSesionEnSalasCreadas(sesion))
            {
                Sala   salaLocal   = SalasCreadas.FirstOrDefault(s => s.ID == sala.ID);
                Sesion sesionLocal = SesionesConectadas.FirstOrDefault(s => s.ID == sesion.ID);
                if (salaLocal.Jugadores.Count < NUMERO_MAXIMO_DE_JUGADORES_EN_SALA)
                {
                    if (sesionLocal.Usuario.Puntuacion.Nivel >= salaLocal.NivelMinimo &&
                        sesionLocal.Usuario.Puntuacion.Nivel <= salaLocal.NivelMaximo)
                    {
                        ColorDeFicha colorDeCreador = ColorDeFicha.Ninguno;
                        foreach (Jugador jugadorEnSala in salaLocal.Jugadores)
                        {
                            if (jugadorEnSala.Sesion.Usuario.NombreDeUsuario == salaLocal.NombreDeUsuarioCreador)
                            {
                                colorDeCreador = jugadorEnSala.Color;
                            }
                        }

                        Jugador jugador = new Jugador
                        {
                            Color          = ColorContrario(colorDeCreador),
                            Sesion         = sesionLocal,
                            ListoParaJugar = false
                        };

                        int indiceSalaLocal = SalasCreadas.IndexOf(salaLocal);
                        SalasCreadas[indiceSalaLocal].Jugadores.Add(jugador);


                        NotificarCambioEnSalaAJugadores(SalasCreadas[indiceSalaLocal]);

                        if (ControladorServiciosDeFlipllo != null)
                        {
                            ControladorServiciosDeFlipllo.ListaDeSalasActualizado(SalasCreadas);
                        }
                    }
                    else
                    {
                        int indiceSala = SalasCreadas.IndexOf(salaLocal);
                        SalasCreadas[indiceSala].Estado = EstadoSala.CupoLleno;
                        if (ControladorServiciosDeFlipllo != null)
                        {
                            ControladorServiciosDeFlipllo.ListaDeSalasActualizado(SalasCreadas);
                        }
                    }
                }
            }
        }
示例#2
0
        public void DesconectarDeSala(Sesion sesion)
        {
            Sala sala = BuscarSalaDeSesion(sesion);

            if (sala != null)
            {
                int indiceJugador = sala.Jugadores.FindIndex(j => j.Sesion.ID == sesion.ID);
                sala.Jugadores.RemoveAt(indiceJugador);
                if (sala.NombreDeUsuarioCreador == sesion.ID)
                {
                    foreach (Jugador jugador in sala.Jugadores)
                    {
                        jugador.Sesion.CanalDeCallback.SalaBorrada();
                    }
                    SalasCreadas.Remove(sala);
                }
                else
                {
                    foreach (Jugador jugador in sala.Jugadores)
                    {
                        Sala salaClonada = ClonarSala(sala);
                        try
                        {
                            jugador.Sesion.CanalDeCallback.ActualizarSala(salaClonada);
                        }
                        catch (CommunicationObjectAbortedException e)
                        {
                            NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
                            CerrarSesion(sesion);
                            logger.Warn(e);
                        }
                        catch (ObjectDisposedException e)
                        {
                            NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
                            CerrarSesion(sesion);
                            logger.Warn(e);
                        }
                    }
                }
                Sesion sesionCargada = SesionesConectadas.FirstOrDefault(s => s.ID == sesion.ID);

                if (sala.Jugadores.Count <= 0)
                {
                    SalasCreadas.Remove(sala);
                }

                if (ControladorServiciosDeFlipllo != null)
                {
                    ControladorServiciosDeFlipllo.ListaDeSalasActualizado(SalasCreadas);
                }
            }
        }
示例#3
0
        public Sala CrearSala(Sala sala, Sesion sesion, ColorDeFicha colorDeFicha)
        {
            Sala salaAEnviar = new Sala();

            if (ValidarAutenticidadDeSesion(sesion) &&
                !ValidarExistenciaDeSesionEnSalasCreadas(sesion) &&
                ValidarDatosDeSala(sala) &&
                !ValidarExistenciaDeSala(sala))
            {
                Sesion sesionCargada = SesionesConectadas.FirstOrDefault(s => s.ID == sesion.ID);
                Sala   salaAGuardar  = new Sala
                {
                    ID                     = Guid.NewGuid().ToString(),
                    Nombre                 = sala.Nombre,
                    NivelMaximo            = sala.NivelMaximo,
                    NivelMinimo            = sala.NivelMinimo,
                    NombreDeUsuarioCreador = sesionCargada.Usuario.NombreDeUsuario,
                    Estado                 = EstadoSala.Registrada,
                };

                Jugador jugador = new Jugador
                {
                    Color          = colorDeFicha,
                    Sesion         = sesionCargada,
                    ListoParaJugar = false
                };

                salaAGuardar.Jugadores = new List <Jugador>();
                salaAGuardar.Jugadores.Add(jugador);

                SalasCreadas.Add(salaAGuardar);
                salaAEnviar = salaAGuardar;
                if (ControladorServiciosDeFlipllo != null)
                {
                    ControladorServiciosDeFlipllo.ListaDeSalasActualizado(SalasCreadas);
                }
            }
            return(salaAEnviar);
        }