/// <summary> /// Загружает топологию из .xml файла /// </summary> /// <param name="fileName">Путь к файлу</param> /// <param name="net">Сохраняемая топология</param> public void LoadTopology(String fileName, Topology net) { XDocument xDoc = XDocument.Load(fileName); net.Clear(); /* Загрузка узлов */ foreach (XElement r in xDoc.Root.Element("Routers").Elements()) { Router router = new Router(new Point(Int32.Parse(r.Attribute("x").Value), Int32.Parse(r.Attribute("y").Value)), Drawing.RouterImg); router.Name = r.Attribute("name").Value; net.CreateNode(router); } /* Загрузка ребер */ foreach (XElement l in xDoc.Root.Elements("Links").Elements()) { Link link = new Link(Int32.Parse(l.Attribute("snode").Value), Int32.Parse(l.Attribute("enode").Value)); link.Metric = Int32.Parse(l.Attribute("metric").Value); net.CreateEdge(link); } }
/// <summary> /// Конструктор /// </summary> /// <param name="r">Маршрутизатор</param> public RouterForm(Router r) { InitializeComponent(); _router = r; }
/// <summary> /// Конструктор. Инициализирует строку /// </summary> /// <param name="dest">Пункт назначения</param> /// <param name="metric">Метрика маршрута да пункта назначения</param> /// <param name="nextHop">Следующий маршрутизатор</param> public RoutingTableRow(Router dest, Int32 metric, Router nextHop) { _destRouter = dest; _metric = metric; _nextRouter = nextHop; }
/// <summary> /// Заполнение словаря событий /// нажатия клавиш мыши /// </summary> private void InitActions() { /* Cловарь событий нажатия левой кнопки мыши */ MLD.Add(Instrument.Drag, p => { _mouseIsPushed = true; Router sRouter = FindRouter(p); if (sRouter == null) { _selected.Clear(); _tmpPoint = GetMouseLocation(); } else { if (_selected.Contains(sRouter) == false) { _selected = new List<IDrag>() { sRouter }; } } foreach (IDrag d in _selected) { d.MouseXOffset = GetMouseLocation().X - d.Location.X; d.MouseYOffset = GetMouseLocation().Y - d.Location.Y; } }); MLD.Add(Instrument.Config, p => { }); MLD.Add(Instrument.Insert_Edge, p => { Router router = FindRouter(p); if (_mouseIsPushed == false && router != null) { _tmpRouter = router; _mouseIsPushed = true; } }); MLD.Add(Instrument.Insert_Node, p => { CreateRouter(p, Drawing.RouterImg); }); /* Cловарь событий отпускания левой кнопки мыши */ MLU.Add(Instrument.Drag, p => { _mouseIsPushed = false; if (_selected.Count == 0) { foreach (Router r in _topology.Routers) if (Geometry.InArea(r.Location, _tmpPoint, p) == true) _selected.Add(r); } }); MLU.Add(Instrument.Config, p => { Router router = FindRouter(p); if (router != null) { RouterForm rf = new RouterForm(router); rf.ShowDialog(); return; } Link link = FindLink(p); if (link != null) { LinkForm lf = new LinkForm(link, String.Format("{0}/{1}", _topology.Routers[link.NumS].Docket, _topology.Routers[link.NumE].Docket)); lf.ShowDialog(); return; } }); MLU.Add(Instrument.Insert_Edge, p => { Router router = FindRouter(p); if (_tmpRouter != null && _mouseIsPushed == true && router != null && router != _tmpRouter) CreateLink(_topology.Routers.IndexOf(_tmpRouter), _topology.Routers.IndexOf(router)); _tmpRouter = null; _mouseIsPushed = false; }); MLU.Add(Instrument.Insert_Node, p => { }); /* Cловарь событий движения мыши */ MM.Add(Instrument.Drag, p => { if (_mouseIsPushed == true) foreach (IDrag d in _selected) d.Location = new Point(GetMouseLocation().X - d.MouseXOffset, GetMouseLocation().Y - d.MouseYOffset); UpdateGraphic(); }); MM.Add(Instrument.Config, p => { }); MM.Add(Instrument.Insert_Edge, p => { UpdateGraphic(); }); MM.Add(Instrument.Insert_Node, p => { }); }
/// <summary> /// Создание маршрутизатора /// </summary> /// <param name="location">Местоположение маршрутизатора</param> /// <param name="image">Изображение маршрутизатора</param> private void CreateRouter(Point location, Bitmap image) { Router router = new Router(location, image); router.Name = "R" + router.Id.ToString(); _topology.CreateNode(router); }
/// <summary> /// Создает новый узел в графе /// </summary> /// <param name="location">Местоположение нового узла</param> /// <param name="image">Изображение нового узла</param> public void CreateNode(Router r) { Routers.Add(r); }