//genera una liga completa
        public void generarLigaCompleta(int numeroEquipos)
        {
            var listaCodigosEquipos = new List <int>();
            var clasificacion       = new ArrayList();

            for (int i = 1; i <= numeroEquipos; i++)
            {
                listaCodigosEquipos.Add(i);
            }

            var calendario     = generador.generaLiga(listaCodigosEquipos);
            var calendarioLiga = generaListaCalendarioVOsLiga(calendario);

            CompeticionTotalCO comp1 = new CompeticionTotalCO(new CompeticionVO("LFP 1ªDivision 14-15", "2014-2015", generador.generarFechaAleatoriaPartido(),
                                                                                generador.generarFechaAleatoriaPartido(), "ninguno", "~/images/titulos/eurocopa.jpg", "Liga"),
                                                              calendarioLiga, listaCodigosEquipos);

            comp1 = fachada.crearCompeticionTotal(comp1);

            int numeroJornada = 1;

            PartidoTotalCO partido;

            foreach (var jornada in calendario)
            {
                foreach (var part in jornada)
                {
                    partido = generarPartidoCompleto(comp1.Competicion.Cd_Competicion, Convert.ToString(numeroJornada), (int)part.Local, (int)part.Visitante);
                }

                //ojo con esta linea ...
                fachada.actualizarClasificacionCompeticion(comp1.Competicion.Cd_Competicion);
                numeroJornada++;
            }
        }
        //genera una copa completa con todos los partidos y rondas
        public void generarCopaCompleta(int numeroEquipos)
        {
            var listaEquipos = new List <int>();

            for (int i = 1; i <= numeroEquipos; i++)
            {
                listaEquipos.Add(i);
            }

            CompeticionTotalCO comp3 = new CompeticionTotalCO(new CompeticionVO("Copa del Rey", "2020-2021", generador.generarFechaAleatoriaPartido(),
                                                                                generador.generarFechaAleatoriaPartido(), "ninguno", "~/images/titulos/copaeuropa.jpg", "Playoff"),
                                                              null, listaEquipos);

            comp3 = fachada.crearCompeticionTotal(comp3);

            var            listaCodigosEquipos = new List <int>();
            var            rondaActual         = new List <Jornada>();
            var            auxiliar            = new List <object>();
            PartidoTotalCO partido;
            String         nombreRonda = "Fase Previa";

            for (int i = 1; i <= numeroEquipos; i++)
            {
                listaCodigosEquipos.Add(i);
            }


            /*simula el sistema de eliminatorias de copa hasta que haya un campeon
             * generando los partidos de todas las rondas */

            while (listaCodigosEquipos.Count > 1)
            {
                rondaActual = generador.generarRondaCopa(listaCodigosEquipos);

                //obtenemos el nombre de la ronda actual, en funcion del numero de equipos
                nombreRonda = generador.obtenerNombreRondaCopa(listaCodigosEquipos.Count);



                //genera los partidos de la ronda de copa actual

                foreach (var item in rondaActual)
                {
                    auxiliar.Add(item.Local);
                    auxiliar.Add(item.Visitante);
                    partido = generarPartidoCompleto(comp3.Competicion.Cd_Competicion, nombreRonda, (int)item.Local, (int)item.Visitante);
                    int ganador = (int)auxiliar[rand.Next(0, 2)];
                    auxiliar.Clear();
                    listaCodigosEquipos.Remove(ganador);
                }
            }
        }
Example #3
0
        public override async Task <bool> Run()
        {
            try
            {
                if (MemoryCacher.getDateTime() == null)
                {
                    MemoryCacher.setDateTime(this.NextRun);
                }

                MemoryCacher.setLive(true);

                await _footballHub.Clients.All.SendAsync("StartSimulation",
                                                         new
                {
                    eventType = "startSimulation"
                });

                const int numberOfTeams = 20;
                var       teamCodeList  = Enumerable.Range(1, numberOfTeams).ToList();

                var calendario     = _generadorCosas.generaLiga(teamCodeList);
                var calendarioLiga = _generadorPartidos.generaListaCalendarioVOsLiga(calendario);

                var comp1 = new CompeticionTotalCO(new CompeticionVO("LFP 1ªDivision 14-15", "2014-2015", _generadorCosas.generarFechaAleatoriaPartido(),
                                                                     _generadorCosas.generarFechaAleatoriaPartido(), "ninguno", "~/images/titulos/eurocopa.jpg", "Liga"),
                                                   calendarioLiga, teamCodeList);

                int numeroJornada = 1;

                var matchSet = calendario[0];

                var taskList = new List <Task>();

                for (int i = 1; i < numberOfTeams / 2; i++)
                {
                    var cont = i;
                    var part = matchSet[cont];

                    var task = createMatchTask(comp1, part, numeroJornada, cont);
                    taskList.Add(task);
                }

                Task.WaitAll(taskList.ToArray());
            }
            catch (Exception ex)
            {
                // We need to log this somewhere.
            }

            return(true);
        }
Example #4
0
        private async Task createMatchTask(CompeticionTotalCO competition, Jornada part, int numeroJornada, int cont)
        {
            var match = _generadorPartidos.generarPartidoCompleto(competition.Competicion.Cd_Competicion, Convert.ToString(numeroJornada), (int)part.Local, (int)part.Visitante, false);

            var events = await GenerateEventListForGame(match, cont);

            // We can't use DI on this class for the player and team services because, they will both be accessed concurrently
            // from different threads. If we use the same service injected on this for all threads, we would be using the same
            // repository, and hence the same DbContext for EF. EF is NOT thread safe so we can't do this as we would get an
            // error in EF Core 3. Instead, we ask the Service Provider for a new instance of the service for each thread, and
            // this way it's all good
            var teamService = ServiceConfiguration.ConsoleProvider.GetService <ITeamService>();

            var teamLocal = await teamService.GetTeamByIdAndYear(match.Partido.Cod_Local, 2009);

            var teamVisitor = await teamService.GetTeamByIdAndYear(match.Partido.Cod_Visitante, 2009);

            await _footballHub.Clients.All.SendAsync("SendCreateMatch",
                                                     new
            {
                matchToCreate = match,
                matchId       = cont,
                events        = events.Count,
                localTeam     = teamLocal,
                visitorTeam   = teamVisitor
            });

            var currentMinute = 0;

            foreach (var item in events)
            {
                int timeToWait = (item.Minute - currentMinute) * 500;
                Thread.Sleep(timeToWait);
                await _footballHub.Clients.All.SendAsync("Send", item);

                currentMinute = item.Minute;
            }
        }
Example #5
0
 public CrearCompeticionTotalAction(CompeticionTotalCO competicionTotal)
 {
     this.competicionTotal = competicionTotal;
 }