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) { _ = RefreshBuckets(); } 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); }); }
public async Task StartAsync(ReadOnlyMemory <byte> initialNodes) { CheckDisposed(); await MainLoop; MessageLoop.Start(); if (RoutingTable.NeedsBootstrap) { RaiseStateChanged(DhtState.Initialising); // HACK: We want to disambiguate between 'decode one' and 'decode many' when using a Span<byte> InitializeAsync(Node.FromCompactNode(BEncodedString.FromMemory(initialNodes))); } else { RaiseStateChanged(DhtState.Ready); } MainLoop.QueueTimeout(TimeSpan.FromSeconds(30), delegate { if (!Disposed) { _ = RefreshBuckets(); } return(!Disposed); }); }
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); }); }