void handleUpdate(DijkstraUpdate update) { foreach (DijkstraLinkStateUpdate linkUpdate in update) { LinkEntry entry = links[linkUpdate.Link]; if (entry.WhenUpdated < linkUpdate.When) { entry.IsBroken = linkUpdate.IsBroken; entry.WhenUpdated = linkUpdate.When; } } }
//CALLBACKS void onLinkBreakChange(LinkSide linkSide) { if (!node.IsAvailable) { return; } LinkEntry entry = links[linkSide.Link]; entry.IsBroken = linkSide.IsBroken; entry.WhenUpdated = Timer.CurrentTime; List <DijkstraLinkStateUpdate> list = new List <DijkstraLinkStateUpdate>(); foreach (LinkEntry linkEntry in links.Values) { DijkstraLinkStateUpdate linkUpdate = new DijkstraLinkStateUpdate(linkEntry.Link, linkEntry.WhenUpdated, linkEntry.IsBroken); list.Add(linkUpdate); } DijkstraUpdate update = new DijkstraUpdate(list.ToArray()); RoutingInfoBundle bundle = new RoutingInfoBundle(node, null, update); NetworkInterface ignore = linkSide.IsBroken? node.NetworkInterfaces.Find(linkSide.Link):null; broadcast(bundle, ignore); }