public static OmegaUp obtenerParaOMI(string olimpiada, TipoOlimpiada tipoOlimpiada) { Acceso db = new Acceso(); StringBuilder query = new StringBuilder(); query.Append(" select * from OmegaUp where tipo = "); query.Append(Cadenas.comillas(Instruccion.POLL.ToString().ToLower())); query.Append(" and olimpiada = "); query.Append(Cadenas.comillas(olimpiada)); query.Append(" and clase = "); query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower())); db.EjecutarQuery(query.ToString()); DataTable table = db.getTable(); if (table.Rows.Count == 0) { return(null); } OmegaUp o = new OmegaUp(); o.llenarDatos(table.Rows[0]); return(o); }
public static List <OmegaUp> obtenerInstrucciones(Instruccion i = Instruccion.NULL) { Acceso db = new Acceso(); StringBuilder query = new StringBuilder(); List <OmegaUp> lista = new List <OmegaUp>(); query.Append(" select * from omegaup "); if (i != Instruccion.NULL) { query.Append(" where tipo = "); query.Append(Cadenas.comillas(i.ToString().ToLower())); } query.Append(" order by tipo asc "); db.EjecutarQuery(query.ToString()); DataTable table = db.getTable(); foreach (DataRow r in table.Rows) { OmegaUp o = new OmegaUp(); o.llenarDatos(r); lista.Add(o); } return(lista); }
public static void StartScoreboard() { // Primero matamos todos los status que estén en un estado de error List <OmegaUp> status = OmegaUp.obtenerInstrucciones(Instruccion.STATUS); foreach (OmegaUp s in status) { if (s.status != Status.OK) { s.borrar(); } else { // Si encontramos un OK, no iniciamos nada pues ya hay un proceso corriendo return; } } // Obtenemos la dirección del exe string directorio = ConfigurationManager.AppSettings.Get(SCOREBOARD_DIRECTORY_STRING); string exe = ConfigurationManager.AppSettings.Get(SCOREBOARD_EXE_STRING); ProcessStartInfo psi = new ProcessStartInfo(); psi.WorkingDirectory = directorio; psi.FileName = exe; Process.Start(psi); // Esperamos un par de segundos a que el proceso empiece y darle tiempo a la página // a que lo registre System.Threading.Thread.Sleep(SLEEP_TIME); }
/// <summary> /// Dado que las olimpiadas son pocas y a que se hacen muchas llamadas a la base para obtener estos objetos /// los cargamos una vez por aplicacion y los dejamos ahi /// </summary> /// <returns></returns> private static Dictionary <string, Olimpiada> getOlimpiadas(TipoOlimpiada tipoOlimpiada) { Dictionary <string, Olimpiada> olimpiadas; string application = obtenerApplicationString(tipoOlimpiada); olimpiadas = (Dictionary <string, Olimpiada>)HttpContext.Current.Application[application]; if (olimpiadas == null) { olimpiadas = cargarOlimpiadas(tipoOlimpiada); HttpContext.Current.Application[application] = olimpiadas; // Cargamos las instrucciones en caso de que haya un scoreboard activo List <OmegaUp> polls = OmegaUp.obtenerInstrucciones(OmegaUp.Instruccion.POLL); foreach (OmegaUp p in polls) { if (p.tipoOlimpiada == tipoOlimpiada) { Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(p.olimpiada, p.tipoOlimpiada); o.liveResults = true; } } } return(olimpiadas); }
public static void nuevaInstruccion(Instruccion instruccion, bool unica) { if (!unica || OmegaUp.obtenerInstrucciones(instruccion).Count == 0) { OmegaUp o = new OmegaUp(); o.instruccion = instruccion; o.guardarNuevo(); } }
public static List <Medallero> obtenerTablaEstadosSecreta(string clave, TipoOlimpiada tipoOlimpiada) { OmegaUp poll = OmegaUp.obtenerParaOMI(clave, tipoOlimpiada); List <Resultados> resultados = Resultados.cargarResultadosSecretos(clave, tipoOlimpiada, poll.dia); Dictionary <string, Medallero> diccionario = new Dictionary <string, Medallero>(); foreach (Resultados resultado in resultados) { Medallero m = null; if (diccionario.ContainsKey(resultado.estado)) { m = diccionario[resultado.estado]; } else { m = new Medallero(); m.clave = resultado.estado; diccionario.Add(resultado.estado, m); } switch (resultado.medalla) { case Resultados.TipoMedalla.ORO: case Resultados.TipoMedalla.ORO_1: case Resultados.TipoMedalla.ORO_2: case Resultados.TipoMedalla.ORO_3: m.oros++; break; case Resultados.TipoMedalla.PLATA: m.platas++; break; case Resultados.TipoMedalla.BRONCE: m.bronces++; break; } m.puntos += resultado.total; m.lugar++; } List <Medallero> medallero = new List <Medallero>(); foreach (Medallero m in diccionario.Values) { m.promedio = m.puntos / m.lugar; m.lugar = 0; medallero.Add(m); } medallero.Sort(); for (int i = 0; i < medallero.Count; i++) { medallero[i].lugar = i + 1; } return(medallero); }
public static OmegaUp obtenerConClave(int clave) { Acceso db = new Acceso(); StringBuilder query = new StringBuilder(); query.Append("select * from OmegaUp where clave = "); query.Append(clave); db.EjecutarQuery(query.ToString()); DataTable table = db.getTable(); if (table.Rows.Count == 0) { return(null); } OmegaUp o = new OmegaUp(); o.llenarDatos(table.Rows[0]); return(o); }
public OmegaUp calculateCachedResults() { try { OmegaUp poll = OmegaUp.obtenerParaOMI(this.numero, this.tipoOlimpiada); if (poll == null) { this.liveResults = false; return(poll); } if (this.cachedResults == null || resultados == null) { cacheResults(poll.dia); this.lastUpdate = poll.timestamp; return(poll); } if (poll.timestamp.CompareTo(lastUpdate) <= 0) { return(poll); } this.lastUpdate = poll.timestamp; cacheResults(poll.dia); return(poll); } catch (Exception e) { Log.add(Log.TipoLog.SCOREBOARD, "Excepción tratando de cachear resultados para " + this.tipoOlimpiada + " " + this.numero); Log.add(Log.TipoLog.SCOREBOARD, e.ToString()); return(null); } }