Пример #1
0
 public bool GetMatch(byte word, out BaseNode ele)
 {
     //if(!Loaded)
     return((ele = Links.FirstOrDefault(u => u.IsMatch(word))) != null);
     // ele = Links.FirstOrDefault(u => u.Data == word);
     // return ele != null;
 }
Пример #2
0
        public void Merge(ICollection <RoutingMapLink> links, IAddress source)
        {
            var oldLinks = Links.ToList();

            var linksToAdd = links.Where(link => !link.Contains(OwnAddress) &&
                                         ((link.Contains(source) && link.Connected != Links.FirstOrDefault(l => Equals(l, link)).Connected) ||
                                          link.Version > Links.FirstOrDefault(l => Equals(l, link)).Version)).ToList();

            if (linksToAdd.Count > 0)
            {
                Version++;
            }

            foreach (var link in linksToAdd)
            {
                Links.Remove(link);
            }
            Links.AddRange(linksToAdd);

            foreach (var link in links.Where(l => !l.Connected))
            {
                if (!Links.Contains(link))
                {
                    Links.Add(link);
                }
            }

            //Console.WriteLine("[{0}] MERGE {1} with {2} from {3} => {4}", OwnAddress,
            //    oldLinks.ToDOT(longNames: config.LongNames), links.ToDOT(longNames: config.LongNames), source, Links.ToDOT(longNames: config.LongNames));
        }
Пример #3
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        public DataCenter()
        {
            computeLimitsLink = new Lazy <Link>(() =>
            {
                return(Links.FirstOrDefault(l => String.Equals(l.Rel, "computeLimits", StringComparison.CurrentCultureIgnoreCase)));
            });

            billingLink = new Lazy <Link>(() =>
            {
                return(Links.FirstOrDefault(l => String.Equals(l.Rel, "billing", StringComparison.CurrentCultureIgnoreCase)));
            });

            rootGroupLink = new Lazy <Link>(() =>
            {
                return(Links.FirstOrDefault(l => String.Equals(l.Rel, "group", StringComparison.CurrentCultureIgnoreCase)));
            });

            defaultsLink = new Lazy <Link>(() =>
            {
                return(Links.FirstOrDefault(l => String.Equals(l.Rel, "defaults", StringComparison.CurrentCultureIgnoreCase)));
            });

            networkLimitsLink = new Lazy <Link>(() =>
            {
                return(Links.FirstOrDefault(l => String.Equals(l.Rel, "networkLimits", StringComparison.CurrentCultureIgnoreCase)));
            });

            createServerLink = new Lazy <Link>(() =>
            {
                return(Links.FirstOrDefault(l => String.Equals(l.Rel, "createServer", StringComparison.CurrentCultureIgnoreCase)));
            });
        }
Пример #4
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public ServerOperation()
 {
     queueStatusLink = new Lazy <Link>(() =>
     {
         return(Links.FirstOrDefault(l => String.Equals(l.Rel, "status", StringComparison.CurrentCultureIgnoreCase)));
     });
 }
Пример #5
0
        private void UpdateSelection()
        {
            if (linkList == null || Links == null)
            {
                return;
            }

            linkList.SelectedItem = Links.FirstOrDefault(l => l.Source == SelectedSource);
        }
Пример #6
0
        /// <summary>
        /// 判断是否包含指定的站点。
        /// </summary>
        /// <param name="node">目标站点。</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">如果node为空引用,则跑出该异常。</exception>
        public bool ContainsNode(MetroNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            return(Links.FirstOrDefault(c => c.From == node || c.To == node) != null);
        }
Пример #7
0
        private void LoadSelected()
        {
            var source = ValuesStorage.GetString(KeySelected);

            SetSelected((_selectLater == null ?
                         Links.FirstOrDefault(x => x.DisplayName == source) :
                         Links.FirstOrDefault(x => x.Source == _selectLater)) ?? Links.FirstOrDefault(), false);
            _selectLater = null;
        }
Пример #8
0
        private void UpdateSelection()
        {
            if (linkList == null || Links == null)
            {
                return;
            }

            // sync list selection with current source
            linkList.SelectedItem = Links.FirstOrDefault(l => l.Source == SelectedSource);
        }
Пример #9
0
 public void SetSelected(Uri uri)
 {
     if (_initialized)
     {
         SetSelected(Links.FirstOrDefault(x => x.Source == uri) ?? Links.FirstOrDefault(), false);
     }
     else
     {
         _selectLater = uri;
     }
 }
Пример #10
0
        public void RemoveDirectConnection(IAddress other)
        {
            var existingLink = Links.FirstOrDefault(link => link.Contains(OwnAddress) && link.Contains(other));

            if (existingLink.Connected)
            {
                Links.Remove(existingLink);
                Links.Add(new RoutingMapLink(existingLink.A, existingLink.B, existingLink.Version + 1, false));
                Version++;
            }
        }
Пример #11
0
        public void AddDirectConnection(IAddress other)
        {
            var newLink      = new RoutingMapLink(OwnAddress, other);
            var existingLink = Links.FirstOrDefault(link => Equals(link, newLink));

            if (!existingLink.Connected)
            {
                Links.Remove(existingLink);
                Links.Add(new RoutingMapLink(OwnAddress, other, existingLink.Version + 1, true));
                Version++;
            }
        }
Пример #12
0
        /// <summary>
        /// Returns the associated Uri for the first Link matching the Relationship.
        /// </summary>
        /// <param name="relationship">A <see cref="string"/> value identifying the Relationship.</param>
        /// <returns>A <see cref="Uri"/> representing the related Link.</returns>
        public Uri GetLinkUri(string relationship)
        {
            var link = Links.FirstOrDefault(x => x.Rel.Any(y => y.ToLower().EndsWith(relationship)));

            if (link == null)
            {
                throw new ApplicationException(string.Format("Invalid Siren relationship: {0}", relationship));
            }

            var url = link.Href.ToString();
            var uri = new Uri(url);

            return(uri);
        }
Пример #13
0
 /// <exception cref="TerminalException">Cannot link off of terminals</exception>
 public override bool Add(byte word, int id, out BaseNode ele)
 {
     if (Data == 0 && Id != -1)
     {
         throw new TerminalException("Cannot link off of terminals");
     }
     ele = Links.FirstOrDefault(u => u.IsMatch(word)); //Check to see if an element matching this word already exists in our links
     if (ele == null)
     {
         Links.Add(ele = new Node(word, id)); //If it doesnt, add the new element to our link list
         return(true);
     }
     return(ele.Combine(id)); //If it does, add the id to the linked element
 }
Пример #14
0
        public void Activate()
        {
            for (int i = 0; i < Neurons.Count; i++)
            {
                Neurons[i].Input = 0;
                for (int j = 0; j < PreviousLayer.Neurons.Count; j++)
                {
                    var weigth = Links.FirstOrDefault(x => x.Source.Index == j && x.Target.Index == i);
                    Neurons[i].Input += Inputs[j] * weigth.Weigth;
                }
            }

            foreach (var neuron in Neurons)
            {
                neuron.Activate();
            }
        }
Пример #15
0
        public virtual void Initialize()
        {
            if (_initialized)
            {
                return;
            }
            _initialized = true;

            foreach (var p in ValuesStorage.GetStringList(KeyTemporary).Select(x => x.Split(new[] { '\n' }, 2))
                     .Where(x => x.Length == 2))
            {
                var c = CustomLink.Deserialize(p[1]);
                if (c == null)
                {
                    continue;
                }

                if (string.IsNullOrEmpty(p[0]))
                {
                    Links.Insert(0, c);
                }
                else
                {
                    var after = Links.FirstOrDefault(x => x.Source.ToString() == p[0]);
                    if (after == null)
                    {
                        continue;
                    }

                    var index = Links.IndexOf(after);
                    if (index < Links.Count - 1)
                    {
                        Links.Insert(Links.IndexOf(after) + 1, c);
                    }
                    else
                    {
                        Links.Add(c);
                    }
                }
            }

            var source = ValuesStorage.GetUri(KeySelected);

            _selectedLink            = Links.FirstOrDefault(x => x.Source == source) ?? Links.FirstOrDefault();
            Links.CollectionChanged += Links_CollectionChanged;
        }
Пример #16
0
        /// <summary>
        /// Get redirect URL to navigate the client to after succesfully registering transaction
        /// </summary>
        /// <returns></returns>
        /// <exception cref="IpayOrderException">Thrown when Links is null or redirect link not found</exception>
        public string GetRedirectUrl()
        {
            if (Links == null)
            {
                throw new IpayOrderException("Links value is null");
            }

            var redirectLink = Links
                               .FirstOrDefault(l => l.Method == "REDIRECT")
                               ?.Href;

            if (redirectLink == null)
            {
                throw new IpayOrderException("Links value is null");
            }

            return(redirectLink);
        }
Пример #17
0
        private void UpdateSelection(bool skipLoading)
        {
            if (_linkList == null || Links == null)
            {
                return;
            }

            if (!skipLoading && SavePolicy == SavePolicy.Flexible && SaveKey != null)
            {
                Frame.Source = ValuesStorage.GetUri(SaveKey) ?? Links.FirstOrDefault()?.Source;
            }
            else
            {
                var saved = skipLoading || SaveKey == null ? null : ValuesStorage.GetString(SaveKey);
                _linkList.SelectedItem = (saved == null ? null : Links.FirstOrDefault(l => l.Source.OriginalString == saved))
                                         ?? Links.FirstOrDefault(l => l.Source == SelectedSource) ?? (skipLoading ? null : Links.FirstOrDefault());
            }
        }
Пример #18
0
        public BaseNode GetMatch(byte word)
        {
            //       if (!Loaded)
            return(Links.FirstOrDefault(u => u.IsMatch(word)));

            /*         BaseNode ele = null;
             *       int low = 2;
             *       foreach (BaseNode u in Links)
             *       {
             *           int tmp = u.MatchLevel(word);
             *           if (tmp == 0)
             *               return u;
             *           if (low > tmp)
             *           {
             *               low = tmp;
             *               ele = u;
             *           }
             *       }
             *       return ele;*/
        }
Пример #19
0
        private void Remove(LinkInput link)
        {
            PreviousSelectedQueue.Remove(link);

            link.PropertyChanged -= Link_PropertyChanged;
            link.Close           -= OnLinkClose;

            if (SelectedLink == link)
            {
                SelectedLink = PreviousSelectedQueue.DequeueOrDefault() ?? Links[Links.IndexOf(link) - 1];
            }

            if (SelectedLink == link)
            {
                SelectedLink = Links.FirstOrDefault();
            }

            Links.Remove(link);
            SaveLinks();
        }
Пример #20
0
        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                var window = Window.GetWindow(this);

                this.NavigationService.RemoveBackEntry();
                _NavigationService             = this.NavigationService;
                _NavigationService.Navigating += NavigationService_Navigating;

                ApplyLayout();

                UpdateEnablingWebBrowserNavButtons();
                HideScriptErrors(webBrowser, true);

                window.SizeChanged += new SizeChangedEventHandler(Window_SizeChanged);
                window.Closing     += new CancelEventHandler(Window_Closing);

                webBrowser.LoadCompleted += webBrowser_LoadCompleted;
                TilesControl.DataChanged += (_1, _2) => { Save(); };

                foreach (var linkId in Project.History)
                {
                    var linkView = Links.FirstOrDefault(n => n.Id == linkId);
                    if (linkView != null)
                    {
                        TilesControl.Model.HistoryLinks.Add(linkView);
                    }
                }

                TilesControl.Focus();

                timer          = new Timer(500);
                timer.Elapsed += Timer_Elapsed;
                timer.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Пример #21
0
        /// <summary>
        /// Loads the content.
        /// </summary>
        public override void LoadContent()
        {
            base.LoadContent();

            // TODO: Identify and retrieve the items properly
            worldSelector   = ListSelectors.FirstOrDefault(x => x.Text == "World");
            factionSelector = ListSelectors.FirstOrDefault(x => x.Text == "Faction");
            startLink       = Links.FirstOrDefault(x => x.Text == "Start");

            worldSelector.SelectedIndexChanged   += OnWorldSelectorSelectedIndexChanged;
            factionSelector.SelectedIndexChanged += OnFactionSelectorSelectedIndexChanged;

            // TODO: Do not access the repository directly from here
            WorldRepository worldRepository = new WorldRepository(ApplicationPaths.WorldsDirectory);

            // TODO: Don't load everything unnecessarily
            worlds = worldRepository.GetAll().ToDomainModels().ToList();

            worldSelector.Values.AddRange(worlds.Select(f => f.Name));
            worldSelector.SelectedIndex = 0;
        }
Пример #22
0
        private void RemoveMissingNeighbors(object o)
        {
            IEnumerable <NeighborEntry> list;

            lock (tablesLock)
            {
                list = NeighborhoodTable.Where(n => n.Hold.CompareTo(TimeSpan.Zero) < 0).ToList();
            }
            foreach (NeighborEntry e in list)
            {
                Guid guid = Guid.NewGuid();
                lock (tablesLock)
                {
                    NeighborhoodTable.Remove(e);
                    var top = TopologyTable.FirstOrDefault(t => t.Destination.Equals(e.Address) && t.Neighbor.Equals(e.Address));
                    if (top != null)
                    {
                        AddTopology(new TopologyEntry(e.Address, e.Address, -1, -1));
                    }
                }
                var neighbors = NeighborhoodTable.Where(n => list.FirstOrDefault(l => l.Address.Equals(n.Address)) == null).ToList();
                foreach (var neighbor in neighbors)
                {
                    var node = Nodes.FirstOrDefault(n => (n as RouterNode).Text.Equals(neighbor.Address)) as RouterNode;
                    var link = Links.FirstOrDefault(l => l.ToNode.Equals(node) || l.FromNode.Equals(node)) as GoLabeledLink;
                    if (node == null || link == null)
                    {
                        continue;
                    }

                    TopologyEntry fastest;
                    lock (tablesLock)
                    {
                        fastest = TopologyTable.Where(t => t.Destination.Equals(e.Address)).OrderBy(t => t.Feasible).FirstOrDefault();
                    }

                    node.AddTopology(new TopologyEntry(e.Address, Text, fastest == null ? -1 : fastest.Feasible + link.UserFlags, fastest == null ? -1 : fastest.Feasible));
                }
            }
        }
Пример #23
0
            ///<summary>Sets the portion of a pledge to link to this payment.</summary>
            public void SetAmount(Pledge pledge, decimal value)
            {
                var link = Links.FirstOrDefault(o => o.Pledge == pledge);

                if (value == 0)
                {
                    Links.Remove(link);
                }
                else
                {
                    if (link != null)
                    {
                        link.Amount = value;
                    }
                    else
                    {
                        Links.Add(new PledgeLink {
                            Pledge = pledge, Payment = CurrentPayment, Amount = value
                        });
                    }
                }
            }
Пример #24
0
        private async Task SendHelloTo(RouterNode destination)
        {
            try
            {
                GoLabeledLink link = Links.FirstOrDefault(l => l.ToNode.Equals(destination) || l.FromNode.Equals(destination)) as GoLabeledLink;
                if (link.UserFlags < 1)
                {
                    return;
                }
                await destination.ReceiveHello(this, link);

                while (link.PenColor != Color.Black)
                {
                    await Task.Delay(50);
                }
                link.PenColor = Color.Red;
                await Task.Delay(100);

                link.PenColor = Color.Black;
            }
            catch (InvalidAsynchronousStateException) { }
        }
Пример #25
0
        public bool ShouldConnectTo(IAddress other)
        {
            var peers = GraphHelper.GetPeers(OwnAddress, Links).ToList();

            if (peers.Count >= config.MaxConnections || peers.Contains(other))
            {
                return(false);
            }

            var newLink = new RoutingMapLink(OwnAddress, other);

            if (GraphHelper.IsReachable(other, OwnAddress, Links))
            {
                if (peers.Count >= config.DesiredConnections)
                {
                    return(false);
                }

                var existingLink = Links.FirstOrDefault(link => Equals(link, newLink));
                var stateBefore  = GraphHelper.CalculateConnectivity(Links);
                Links.Remove(existingLink);
                Links.Add(newLink);
                var stateAfter = GraphHelper.CalculateConnectivity(Links);
                Links.Remove(newLink);
                if (existingLink.A != null)
                {
                    Links.Add(existingLink);
                }

                if (Equals(stateAfter, stateBefore))
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #26
0
        public List <string> GetWarnings()
        {
            var warnings           = new List <string>();
            var planetIDs          = Planets.Select(p => p.ID).ToHashSet();
            var playerNames        = Players.Select(p => p.Name).ToHashSet();
            var factionNames       = Factions.Select(f => f.Name).ToHashSet();
            var playerFactionNames = Factions.Select(p => p.Name).ToHashSet();
            var ownerNames         = Planets.Select(p => p.OwnerName).Where(n => n != null).ToHashSet();

            if (!ownerNames.IsSubsetOf(playerNames))
            {
                warnings.Add("Planet owner does not exist.");
            }
            if (!playerFactionNames.IsSubsetOf(factionNames))
            {
                warnings.Add("Player faction does not exist.");
            }
            if (planetIDs.Count != Planets.Count)
            {
                warnings.Add("Duplicate planet ID.");
            }
            if (playerNames.Count != Players.Count)
            {
                warnings.Add("Duplicate player name.");
            }
            if (factionNames.Count != Factions.Count)
            {
                warnings.Add("Duplicate faction.");
            }
            {
                var link = Links.FirstOrDefault(l => l[0] == l[1]);
                if (link != null)
                {
                    warnings.Add(String.Format("Link has same source and destination: {0} {1}", link[0], link[1]));
                }
            }
            foreach (var link in Links)
            {
                if (!planetIDs.IsSupersetOf(link.PlanetIDs))
                {
                    warnings.Add("Link points to inexistent planet");
                }
                Array.Sort(link.PlanetIDs);
            }
            foreach (var link1 in Links)
            {
                foreach (var link2 in Links)
                {
                    if (link1 != link2 && link1.PlanetIDs.SequenceEqual(link2.PlanetIDs))
                    {
                        warnings.Add("Duplicate Link");
                    }
                }
            }
            Func <string, Planet, string> format = (s, p) => String.Format("Planet {0} {1} missing.", p.Name ?? String.Empty, s);

            foreach (var p in Planets)
            {
                if (p.OwnerName != null || p.FactionName != null || p.MapName != null)
                {
                    if (p.OwnerName == null)
                    {
                        warnings.Add(p.Name + format("owner", p));
                    }
                    if (p.FactionName == null)
                    {
                        warnings.Add(format("faction", p));
                    }
                    if (p.MapName == null)
                    {
                        warnings.Add(format("map", p));
                    }
                    if (p.Name == null)
                    {
                        warnings.Add(format("name", p));
                    }
                }
            }

            if (Planets.Count(p => p.IsStartingPlanet) != Factions.Count)
            {
                warnings.Add("Wrong number of starting planets.");
            }

            if (Round == 0 && Planets.Any(p => p.OwnerName == null) && !playerNames.All(ownerNames.Contains))
            {
                warnings.Add("Galaxy has free space and a player has no planet.");
            }
            if (Planets.Count > MapNames.Count)
            {
                warnings.Add("Not enough maps.");
            }

            if (Factions.Count < 2)
            {
                warnings.Add("Not enough factions.");
            }
            return(warnings);
        }
Пример #27
0
 /// <summary>
 /// Gets the webpage link by the specified link ID.
 /// </summary>
 /// <param name="linkId">The link ID to search for.</param>
 /// <returns>
 /// A webpage link which matches the specified ID.
 /// </returns>
 public Link FindLinkById(string linkId)
 {
     return(Links.FirstOrDefault(l => l.Id == Guid.Parse(linkId)));
 }
Пример #28
0
 /// <summary>
 /// Gets the webpage link by the specified link name.
 /// </summary>
 /// <param name="name">The link name to search for.</param>
 /// <returns>
 /// A webpage link which matches the specified name.
 /// </returns>
 public Link FindLinkByName(string name)
 {
     return(Links.FirstOrDefault(l => l.Name.CompleteTrimAndUpper().Equals(name.CompleteTrimAndUpper())));
 }
Пример #29
0
 public RelatedWebsites(IEnumerable <RelatedWebsiteLink> links)
 {
     Links   = links.OrderBy(link => link.Title).ToArray();
     Current = Links.FirstOrDefault(e => e.IsCurrent);
     Any     = Links.Count() > 1 && Current != null;
 }
Пример #30
0
        public void AddTopology(TopologyEntry entry)
        {
            /*
             * if(entry.Feasible == -1)
             * {
             *  //remove topology
             *  lock(tablesLock)
             *  {
             *      var existing = TopologyTable.FirstOrDefault(t => t.Destination.Equals(entry.Destination) && t.Neighbor.Equals(entry.Neighbor));
             *      if(existing != null)
             *      {
             *          TopologyTable.Remove(existing);
             *          UpdateRoute(entry);
             *      }
             *      return;
             *  }
             * }
             */
            if (entry.Destination.Equals(Text))
            {
                return;
            }
            if (entry.Feasible != -1)
            {
                lock (tablesLock)
                {
                    var fastest = TopologyTable.Where(t => t.Destination.Equals(entry.Destination))?.OrderBy(t => t.Feasible).FirstOrDefault();

                    if (fastest != null && entry.Advertised >= fastest.Feasible)
                    {
                        return;
                    }

                    var existing = TopologyTable.Where(t => t.Destination.Equals(entry.Destination) && t.Neighbor.Equals(entry.Neighbor) && t.Feasible == entry.Feasible).FirstOrDefault();
                    if (existing != null)
                    {
                        return;
                    }

                    TopologyTable.Add(entry);
                }
            }
            else
            {
                lock (tablesLock)
                {
                    var existing = TopologyTable.FirstOrDefault(t => t.Destination.Equals(entry.Destination) && t.Neighbor.Equals(entry.Neighbor));
                    if (existing != null)
                    {
                        TopologyTable.Remove(existing);
                    }
                }
            }
            UpdateRoute(entry);

            var neighbors = NeighborhoodTable.Where(n => !n.Address.Equals(entry.Neighbor)).ToList();

            foreach (var neighbor in neighbors)
            {
                var node = Nodes.FirstOrDefault(n => (n as RouterNode).Text.Equals(neighbor.Address)) as RouterNode;
                var link = Links.FirstOrDefault(l => l.ToNode.Equals(node) || l.FromNode.Equals(node)) as GoLabeledLink;
                if (node == null || link == null)
                {
                    continue;
                }

                TopologyEntry fastest;
                lock (tablesLock)
                {
                    fastest = TopologyTable.Where(t => t.Destination.Equals(entry.Destination)).OrderBy(t => t.Feasible).FirstOrDefault();
                }

                node.AddTopology(new TopologyEntry(entry.Destination, Text, fastest == null ? -1 : fastest.Feasible + link.UserFlags, fastest.Feasible));
            }
        }