public void Start(byte[] initialNodes = null) { CheckDisposed(); MessageLoop.Start(); if (Bootstrap) { new InitializeTask(this, initialNodes).Execute(); RaiseStateChanged(DhtState.Initialising); Bootstrap = false; } else { RaiseStateChanged(DhtState.Ready); } MainLoop.QueueTimeout(TimeSpan.FromSeconds(1), () => { 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 DhtEngine(Listener listener) { if (listener == null) { throw new ArgumentNullException(nameof(listener)); } MessageLoop = new MessageLoop(this, listener); TimeOut = TimeSpan.FromSeconds(15); // 15 second message timeout by default TokenManager = new TokenManager(); }
public void Stop() { MessageLoop.Stop(); }