public bool quitarFlor(Nodo n, Usuario u) { bool ret = false; Flor f = u.getFlor(n.id); if (f == null) { throw new Exception("El usuario no tiene esa flor para quitar"); } //libero la flor al usuario n.flores -= 1; f.id = 0; f.born = DateTime.Now; //borro la parte de la rama que no tenga flores ret = verifyNodoSinFlores(n.id); //actualizo negados actualizarNegados(); //veo si algun nodo alcanza el consenso //comprobarConsenso(); se comprueba al crear el arbolpersonal return(ret); }
void verifyCantidadFlores() { //verifico cantidad de flores lock (app.grupos) { foreach (Grupo g in app.grupos) { lock (g) { Arbol a = g.arbol; foreach (Usuario u in g.usuarios) { //agrego si faltan for (int q = u.flores.Count; q < a.cantidadFlores; q++) { u.flores.Add(new Flor()); } //quito si sobran while (u.flores.Count > a.cantidadFlores) { Flor f = u.flores[u.flores.Count - 1]; //quito desde la ultima que quizas no esta en uso if (f.id != 0) { a.quitarFlor(a.getNodo(f.id), u); } u.flores.RemoveAt(u.flores.Count - 1); } } } } } }
public void asignarflor(Usuario u, Nodo n) { //si tiene una flor en nivel anterior la subo, si no uso una de las disponibles //si hay flor en pathn entonces la subo bool subida = false; if (n.consensoAlcanzado) { throw new appException("Este debate ya ha alcanzado el consenso"); } foreach (Nodo padre in getPath(n.id)) { Flor usada = u.getFlor(padre.id); if (usada != null && padre != n) { //hay flor en un nodo anterior la subo padre.flores -= 1; usada.id = n.id; usada.born = DateTime.Now; n.flores += 1; subida = true; break; } } if (!subida) { //uso una flor disponible List <Flor> disponibles = u.floresDisponibles(); if (disponibles.Count > 0) { disponibles[0].id = n.id; disponibles[0].born = DateTime.Now; n.flores += 1; } else { throw new appException("No tienes flores disponibles"); } } //compruebo consenso alcanzado //comprobarConsenso(); se comprueba al crear el arbolpersonal //actualizo negados actualizarNegados(); }
string doToggleFlor(string email, int id, float x, string grupo) { string ret = ""; Grupo g = app.getGrupo(grupo); lock (g) { //verifico que el usuario tiene una flor en ese nodo Arbol a = g.arbol; g.ts = DateTime.Now; Usuario u = g.getUsuarioHabilitado(email); Flor f = u.getFlor(id); List <Nodo> pathn = a.getPath(id); if (pathn == null) { throw new appException(Tools.tr("Seleccione un nodo", g.idioma)); } else { Nodo n = pathn[0]; if (f == null) { n.x = x; //no tiene flor en el nodo, la agrego a.asignarflor(u, n); //devuelvo el arbolPersonal ret = Tools.toJson(a.getArbolPersonal(email)); } else { //tiene flor, la quito a.quitarFlor(n, u); //devuelvo el arbolPersonal ret = Tools.toJson(a.getArbolPersonal(email)); } } } return(ret); }
public Usuario quitarFlor(Nodo n) { Usuario u = null; Flor f = null; if (n.flores > 0) { //busco un usuario que haya votado ese nodo foreach (Usuario u2 in grupo.usuarios) { foreach (Flor f2 in u2.flores) { if (f2.id == n.id) { f = f2; u = u2; } } } //libero la flor al usuario n.flores -= 1; f.id = 0; //borro la parte de la rama que no tenga flores verifyNodoSinFlores(n.id); //actualizo negados actualizarNegados(); //veo si algun nodo alcanza el consenso //comprobarConsenso(); se comprueba al crear el arbolpersonal } else { throw new Exception("El nodo no tiene flores para quitar"); } return(u); }