public void Start(byte[] initialNodes) { CheckDisposed(); messageLoop.Start(); if (Bootstrap) { new InitialiseTask(this, initialNodes).Execute(); RaiseStateChanged(DhtState.Initialising); bootStrap = false; } else { RaiseStateChanged(DhtState.Ready); } DhtEngine.MainLoop.QueueTimeout(TimeSpan.FromSeconds(1), delegate { if (Disposed) { return(false); } foreach (Bucket b in RoutingTable.Buckets) { if ((DateTime.UtcNow - b.LastChanged) > BucketRefreshTimeout) { b.LastChanged = DateTime.UtcNow; RefreshBucketTask task = new RefreshBucketTask(this, b); task.Execute(); } } return(!Disposed); }); }
internal async Task RefreshBuckets() { var refreshTasks = new List <Task> (); foreach (Bucket b in RoutingTable.Buckets) { if (b.LastChanged > BucketRefreshTimeout) { b.Changed(); var task = new RefreshBucketTask(this, b); refreshTasks.Add(task.Execute()); } } if (refreshTasks.Count > 0) { await Task.WhenAll(refreshTasks).ConfigureAwait(false); } }
public async Task StartAsync(byte[] initialNodes) { CheckDisposed(); await MainLoop; MessageLoop.Start(); if (RoutingTable.NeedsBootstrap) { RaiseStateChanged(DhtState.Initialising); InitializeAsync(initialNodes); } else { RaiseStateChanged(DhtState.Ready); } MainLoop.QueueTimeout(TimeSpan.FromSeconds(30), delegate { if (Disposed) { return(false); } foreach (Bucket b in RoutingTable.Buckets) { if (b.LastChanged > BucketRefreshTimeout) { b.Changed(); RefreshBucketTask task = new RefreshBucketTask(this, b); task.Execute(); } } return(!Disposed); }); }
public void Start(byte[] initialNodes) { CheckDisposed(); messageLoop.Start(); if (Bootstrap) { new InitialiseTask(this, initialNodes).Execute(); RaiseStateChanged(DhtState.Initialising); bootStrap = false; } else { RaiseStateChanged(DhtState.Ready); } DhtEngine.MainLoop.QueueTimeout(TimeSpan.FromSeconds(1), delegate { if (Disposed) return false; foreach (Bucket b in RoutingTable.Buckets) { if ((DateTime.UtcNow - b.LastChanged) > BucketRefreshTimeout) { b.LastChanged = DateTime.UtcNow; RefreshBucketTask task = new RefreshBucketTask(this, b); task.Execute(); } } return !Disposed; }); }