private void UpdateRoute(TopologyEntry newEntry) { lock (tablesLock) { var oldEntry = RoutingTable.FirstOrDefault(r => r.Destination.Equals(newEntry.Destination)); if (oldEntry == null && newEntry.Feasible != -1) { RoutingTable.Add(new RouteEntry(newEntry.Destination, newEntry.Neighbor, DateTime.Now)); } else { var fastest = TopologyTable.Where(t => t.Destination.Equals(newEntry.Destination)).OrderBy(t => t.Feasible).FirstOrDefault(); if (fastest == null) { RoutingTable.Remove(oldEntry); } else if (!oldEntry.Neighbor.Equals(fastest.Neighbor)) { RoutingTable.Remove(oldEntry); RoutingTable.Add(new RouteEntry(fastest.Destination, fastest.Neighbor, DateTime.Now)); } } } }