Пример #1
0
        public ActionResult _CrearCSPF(CSPFViewModel newModel)
        {
            //if (!string.IsNullOrWhiteSpace(runDijkstra))
            if (newModel.saveDijkstra != "true")
            {
                //Ejecuta codigo del algoritmo
                if (ModelState.IsValid)
                {
                    //Inicio preparacion de la topologia
                    List<NodoDijkstra> listaNodos = Proyecto.SelectListaRoutersDijkstra(newModel.idProyecto);
                    List<EnlaceDijkstra> listaEnlaces = Proyecto.SelectListaEnlacesDijkstra(newModel.idProyecto);

                    foreach(var item in listaEnlaces)
                    {
                        //Pasando las referencias a los enlaces de la lista de nodos
                        item.target = new NodoDijkstra();
                        item.targetA = listaNodos.Find(x => x.idRouter == item.idRouterA);
                        item.targetB = listaNodos.Find(x => x.idRouter == item.idRouterB);
                    }

                    foreach(var node in listaNodos)
                    {
                        node.listaEnlacesDijkstra = new List<EnlaceDijkstra>();

                        foreach (var link in listaEnlaces)
                        {
                            if (link.idRouterA == node.idRouter)
                            {
                                EnlaceDijkstra temp = link.Clone();
                                temp.target = link.targetB;
                                node.listaEnlacesDijkstra.Add(temp);
                            }
                            else if (link.idRouterB == node.idRouter)
                            {
                                EnlaceDijkstra temp = link.Clone();
                                temp.target = link.targetA;
                                node.listaEnlacesDijkstra.Add(temp);
                            }

                        }
                    }
                    //Fin preparacion de la topologia

                    //Jala el nodo que servira como punto de partida para el algoritmo
                    NodoDijkstra RouterOrigen = listaNodos.Find(x => x.idRouter == newModel.nRouterOrigen);

                    List<NodoDijkstra> routerQueue = new List<NodoDijkstra>();
                    routerQueue = Dijkstra.GenerarRutas(RouterOrigen, newModel.idProyecto, newModel.nBandwidth, newModel.nTipoMetrica, newModel.idAfinidad);

                    NodoDijkstra RouterDestino = routerQueue.FirstOrDefault(x => x.idRouter == newModel.nRouterDestino);

                    List<NodoDijkstra> result = new List<NodoDijkstra>();
                    result = Dijkstra.GetRutaMasCortaHasta(RouterDestino);
                    List<EnlaceDijkstra> listaEnlacesLSP = result.ToEnlaces(listaEnlaces);
                    string literal = result.To_String();

                    //Remueve las referencias a los objetos_routers de los enlaces
                    //var query = someList.Select(x => { x.SomeProp = "foo"; return x; })
                    List<EnlaceDijkstra> query = listaEnlacesLSP.Select(
                        x => {
                                x.target = null;
                                x.targetA = null;
                                x.targetB = null;
                                return x;
                             }).ToList();

                    return Json(new { path = query, node_string = literal, success = true, operation = "run_algorithm" });
                }
                else
                {
                    return Json(new { path = new List<EnlaceDijkstra>(), node_string = "", success = false });
                }
            }
            else
            {
                if (ModelState.IsValid)
                {
                    //TODO: Completar esta funcion
                    //List<Enlace> listaEnlacesLSP = newModel.calculatedPath.ToEnlaces(newModel.idProyecto);

                    try
                    {
                        LSP newlink = new LSP();
                        newlink.idProyecto = newModel.idProyecto;
                        newlink.idLSP = newModel.idLSP;
                        newlink.cNombre = newModel.cNombre;
                        newlink.idRouterOrigen = newModel.nRouterOrigen;
                        newlink.idRouterDestino = newModel.nRouterDestino;
                        newlink.nBandwidth = newModel.nBandwidth;

                        int newEnlace = newlink.InsertUpdateLSPHeader();

                        LSP newThingModel = new LSP();

                        foreach(var item in newModel.listaEnlacesPath)
                        {
                            newThingModel.idProyecto = newModel.idProyecto;
                            newThingModel.idLSP = newEnlace;
                            int reservado = (int)(item.nBandwidth - item.nBandwidthDisponible);
                            newThingModel.InsertDetalleLSP(item.idEnlace, reservado);
                        }

                        return Json(new { success = true, operation = "save" });
                    }
                    catch (Exception ex)
                    {
                        return Json(new { success = false });
                    }
                }
                return Json(new { success = false });
            }
        }
Пример #2
0
 public ActionResult _CrearCSPF(int idProyecto)
 {
     CSPFViewModel newModel = new CSPFViewModel(idProyecto);
     return PartialView(newModel);
 }
Пример #3
0
        public ActionResult _CrearCSPF(CSPFViewModel newModel)
        {
            //Proyecto proyectoActual = new Proyecto(newModel.idProyecto);
            NodoDijkstra RouterOrigen = new NodoDijkstra(newModel.nRouterOrigen, newModel.idProyecto);

            SimplePriorityQueue<NodoDijkstra> routerQueue = new SimplePriorityQueue<NodoDijkstra>();
            routerQueue = Dijkstra.GenerarRutas(RouterOrigen, newModel.idProyecto);

            NodoDijkstra RouterDestino = routerQueue.FirstOrDefault(x => x.idRouter == newModel.nRouterDestino);

            List<NodoDijkstra> result = new List<NodoDijkstra>();
            result = Dijkstra.GetRutaMasCortaHasta(RouterDestino);

            return Json(1);
        }