コード例 #1
0
        /// <summary>
        /// Busca la sala incompleta con mas cuentas
        /// </summary>
        /// <returns>La sala que aun no esta completa</returns>
        private Sala BuscarSalaIncompleta()
        {
            Sala SalaConMayorNumeroDeJugadores = null;

            foreach (Sala sala in SalasCreadas)
            {
                if (sala.EsSalaPublica && !sala.EstaLaSalaLlena())
                {
                    if (SalaConMayorNumeroDeJugadores == null)
                    {
                        SalaConMayorNumeroDeJugadores = sala;
                    }
                    else
                    {
                        if (SalaConMayorNumeroDeJugadores.NumeroJugadoresEnSala < sala.NumeroJugadoresEnSala)
                        {
                            SalaConMayorNumeroDeJugadores = sala;
                        }
                    }
                }
            }
            return(SalaConMayorNumeroDeJugadores);
        }
コード例 #2
0
        /// <summary>
        /// Crea una Sala personalizada
        /// </summary>
        /// <param name="Id">String</param>
        /// <param name="EsSalaPublica">Boolean</param>
        /// <param name="Cuenta">CuentaModel</param>
        /// <param name="ActualCallback">IGameServiceCallback</param>
        /// <returns>EnumEstadoCrearSalaConId</returns>
        public EnumEstadoCrearSalaConId CrearSala(string Id, Boolean EsSalaPublica, CuentaModel Cuenta,
                                                  IGameServiceCallback ActualCallback, String DireccionIpDelCliente)
        {
            EnumEstadoCrearSalaConId EstadoDeCreacionDeSala = EnumEstadoCrearSalaConId.NoSeEncuentraEnSesion;

            if (ManejadorDeSesiones.VerificarCuentaLogeada(Cuenta))
            {
                Cuenta = ManejadorDeSesiones.ObtenerCuentaCompleta(Cuenta);
                if (!EstaElIdDeSalaEnUso(Id))
                {
                    Sala SalaAAgregar = new Sala(Id, EsSalaPublica, Cuenta, ActualCallback, DireccionIpDelCliente);
                    SalasCreadas.Add(SalaAAgregar);
                    SuscribirseAEventosDeSala(SalaAAgregar);
                    SalaCreada?.Invoke(SalaAAgregar);
                    EstadoDeCreacionDeSala = EnumEstadoCrearSalaConId.CreadaCorrectamente;
                }
                else
                {
                    EstadoDeCreacionDeSala = EnumEstadoCrearSalaConId.IdYaExistente;
                }
            }

            return(EstadoDeCreacionDeSala);
        }
コード例 #3
0
        /// <summary>
        /// Agrega una Cuenta a una sala completa, si no hay salas disponibles la crea
        /// </summary>
        /// <param name="Cuenta">CuentaModel</param>
        /// <param name="ActualCallback">IGameServiceCallback</param>
        /// <returns>Verdadero si la sala cuenta se unico correctamenete a la sala o falso si no</returns>
        public Boolean UnisrseASalaDisponible(CuentaModel Cuenta, IGameServiceCallback ActualCallback, String DireccionIpDelCliente)
        {
            Boolean seUnioASala = false;

            if (ManejadorDeSesiones.VerificarCuentaLogeada(Cuenta))
            {
                Cuenta = ManejadorDeSesiones.ObtenerCuentaCompleta(Cuenta);
                Sala SalaAUnirse = BuscarSalaIncompleta();
                if (SalaAUnirse != null)
                {
                    seUnioASala = SalaAUnirse.UnirseASala(Cuenta, ActualCallback, DireccionIpDelCliente);
                    SeUnioASala?.Invoke(SalaAUnirse.Id);
                }
                else
                {
                    Sala NuevaSala = CrearSalaConIdAleatorio(Cuenta, ActualCallback, DireccionIpDelCliente);
                    SalasCreadas.Add(NuevaSala);
                    SuscribirseAEventosDeSala(NuevaSala);
                    SalaCreada?.Invoke(NuevaSala);
                    seUnioASala = true;
                }
            }
            return(seUnioASala);
        }
コード例 #4
0
 /// <summary>
 /// Destruye una sala y envia una notificacion
 /// </summary>
 /// <param name="salaADestruir">Sala</param>
 private void DestruirSala(Sala salaADestruir)
 {
     SalasCreadas.Remove(salaADestruir);
     SalaDestriuda?.Invoke(salaADestruir);
 }
コード例 #5
0
 /// <summary>
 /// Se suscribe a los eventos que ofrece la sala
 /// </summary>
 /// <param name="salaASuscribirse">Sala</param>
 private void SuscribirseAEventosDeSala(Sala salaASuscribirse)
 {
     salaASuscribirse.SalaVacia += DestruirSala;
 }