示例#1
0
        public static List<LSP> SelectListaLSP(int idProyecto)
        {
            List<LSP> listaLSP = new List<LSP>();
            Data.dsTopologiaTableAdapters.LSPsTableAdapter Adapter = new Data.dsTopologiaTableAdapters.LSPsTableAdapter();
            Data.dsTopologia.LSPsDataTable dt = Adapter.SeleccionarListaLSPs(idProyecto, null);

            foreach(var dr in dt)
            {
                LSP temp = new LSP();
                temp.idProyecto = dr.idProyecto;
                temp.idLSP = dr.idLSP;
                if (!dr.IscNombreNull())
                    temp.cNombre = dr.cNombre.Trim();
                if (!dr.IsnBandwidthNull())
                    temp.nBandwidth = dr.nBandwidth;
                temp.idRouterOrigen = dr.idRouterOrigen;
                temp.idRouterDestino = dr.idRouterDestino;
                if (!dr.IsnSetupPriorityNull())
                    temp.nSetupPriority = dr.nSetupPriority;
                if (!dr.IsnHoldPriorityNull())
                    temp.nHoldPriority = dr.nHoldPriority;

                listaLSP.Add(temp);
            }

            return listaLSP;
        }
        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 });
            }
        }
 public ActionResult _EditarLSP(int idProyecto, int idLSP)
 {
     LSP newModel = new LSP(idProyecto, idLSP);
     return PartialView(newModel);
 }
 public ActionResult _CrearLSP(int idProyecto)
 {
     LSP newModel = new LSP(idProyecto);
     return PartialView(newModel);
 }
 public ActionResult _EditarLSP(LSP newModel)
 {
     return PartialView();
 }
 public ActionResult _CrearLSP(int idProyecto)
 {
     LSP newModel = new LSP();
     newModel.listaNodosOrigen = LSP.ConvertDropdownNodosDisponibles(LSP.SelectListaNodosDisponibles(idProyecto, null, 0));
     newModel.listaNextHop = new List<SelectListItem>();
     return PartialView(newModel);
 }