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