示例#1
0
        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);
        }
示例#2
0
        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);
                            }
                        }
                    }
                }
            }
        }
示例#3
0
        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();
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }