Ejemplo n.º 1
0
        public JsonResult ResultadosAjax(string clave, TipoOlimpiada tipo, long ticks, bool retry)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(clave, tipo);

            if (o == null)
            {
                return(Json(ERROR));
            }

            OmegaUp        ou   = o.calculateCachedResults();
            ScoreboardAjax ajax = new ScoreboardAjax();

            if (ou == null || !OmegaUp.RunnerStarted)
            {
                ajax.status = ScoreboardAjax.Status.ERROR.ToString();
                return(Json(ajax));
            }

            ajax.timeToFinish = ou.getRemainingContestTime();

            if (ajax.timeToFinish == 0)
            {
                ajax.resultados = o.cachedResults;
                ajax.status     = ScoreboardAjax.Status.FINISHED.ToString();

                return(Json(ajax));
            }

            // Retry es verdadero cuando le mandamos 0 problemas al cliente
            // en ese caso, es probable que necesitemos recagar los objetos
            // olimpiada de la base de datos
            if (retry)
            {
                ajax.retry  = o.shouldReload(ou.dia);
                ajax.status = ScoreboardAjax.Status.NOT_CHANGED.ToString();

                return(Json(ajax));
            }

            if (ou.timestamp.Ticks == ticks)
            {
                ajax.status = ScoreboardAjax.Status.NOT_CHANGED.ToString();
            }
            else
            {
                ajax.ticks              = ou.timestamp.Ticks.ToString();
                ajax.status             = ScoreboardAjax.Status.UPDATED.ToString();
                ajax.resultados         = o.cachedResults;
                ajax.secondsSinceUpdate = (int)Math.Round((decimal)(DateTime.UtcNow.Ticks - ou.timestamp.Ticks) / TimeSpan.TicksPerSecond);
            }

            return(Json(ajax));
        }
Ejemplo n.º 2
0
        //
        // GET: /Olimpiada/Resultados/

        public ActionResult Resultados(string clave = null, TipoOlimpiada tipo = TipoOlimpiada.OMI, string GUID = null)
        {
            if (GUID != null)
            {
                tryLogIn(GUID);
            }
            Olimpiada o = null;

            if (clave == null)
            {
                o     = Olimpiada.obtenerMasReciente();
                clave = o.numero;
                tipo  = o.tipoOlimpiada;
            }
            else
            {
                o = Olimpiada.obtenerOlimpiadaConClave(clave, tipo);
            }

            if (o == null)
            {
                return(RedirectTo(Pagina.ERROR, 404));
            }

            limpiarErroresViewBag();

            ViewBag.liveResults      = false;
            ViewBag.secretScoreboard = false;
            ViewBag.resultados       = null;
            if (o.liveResults)
            {
                OmegaUp ou = o.calculateCachedResults();
                if (ou != null)
                {
                    Persona p = getUsuario();
                    if (o.esOnline && OmegaUp.RunnerStarted && p != null && p.esSuperUsuario())
                    {
                        ViewBag.secretScoreboard = true;
                        ViewBag.dia             = ou.dia;
                        ViewBag.problemasPorDia = 4; // HARDCODED BUT OH WELL....
                        ViewBag.resultados      = Models.Resultados.cargarResultadosSecretos(clave, tipo, ou.dia);
                    }
                    else
                    {
                        ViewBag.resultados = o.resultados;
                        if (o.resultados.Count > 0)
                        {
                            o.shouldReload(ou.dia);

                            ViewBag.liveResults      = true;
                            ViewBag.RunnerStarted    = OmegaUp.RunnerStarted;
                            ViewBag.dia              = ou.dia;
                            ViewBag.problemasPorDia  = ou.dia == 1 ? o.problemasDia1 : o.problemasDia2;
                            ViewBag.lastUpdate       = (DateTime.UtcNow.Ticks - ou.timestamp.Ticks) / TimeSpan.TicksPerSecond;
                            ViewBag.ticks            = ou.timestamp.Ticks;
                            ViewBag.scoreboardName   = ou.concurso;
                            ViewBag.scoreboardToken  = ou.token;
                            ViewBag.remainingSeconds = ou.getRemainingContestTime();
                        }
                    }
                }
            }
            if (ViewBag.resultados == null)
            {
                ViewBag.resultados = Models.Resultados.cargarResultados(clave, tipo, porLugar: !o.puntosDesconocidos && o.noMedallistasConocidos && o.datosPublicos, cargarObjetos: true);
            }

            ViewBag.problemasDia1 = Problema.obtenerProblemasDeOMI(clave, tipo, 1);
            ViewBag.problemasDia2 = Problema.obtenerProblemasDeOMI(clave, tipo, 2);
            ViewBag.claveUsuario  = getUsuario().clave;
            ViewBag.olimpiadas    = Olimpiada.obtenerOlimpiadas(TipoOlimpiada.OMI);

            if (o.alsoOmips)
            {
                ViewBag.omis = Olimpiada.obtenerOlimpiadas(TipoOlimpiada.OMIS);
                ViewBag.omip = Olimpiada.obtenerOlimpiadas(TipoOlimpiada.OMIP);
            }

            List <Problema> metadata = Problema.obetnerMetaDatadeOMI(clave, tipo);

            if (metadata.Count >= 3)
            {
                ViewBag.numerosDia1  = metadata[1];
                ViewBag.numerosDia2  = metadata[2];
                ViewBag.numerosTotal = metadata[0];
            }

            ViewBag.extranjeros = MiembroDelegacion.obtenerEstadosExtranjerosEnOlimpiada(o.numero);

            return(View(o));
        }