/// <summary> /// Initializes a new instance of the <see cref="DistributedMessageHandler"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> public DistributedMessageHandler( SoulseekClient soulseekClient, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient ?? throw new ArgumentNullException(nameof(soulseekClient)); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(SoulseekClient.Options.MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); }
/// <summary> /// Initializes a new instance of the <see cref="PeerConnectionManager"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="connectionFactory">The IConnectionFactory instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> internal PeerConnectionManager( SoulseekClient soulseekClient, IConnectionFactory connectionFactory = null, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient ?? throw new ArgumentNullException(nameof(soulseekClient)); ConnectionFactory = connectionFactory ?? new ConnectionFactory(); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(SoulseekClient.Options.MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); }
/// <summary> /// Initializes a new instance of the <see cref="DistributedConnectionManager"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="connectionFactory">The IConnectionFactory instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> public DistributedConnectionManager( SoulseekClient soulseekClient, IConnectionFactory connectionFactory = null, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient; ConnectionFactory = connectionFactory ?? new ConnectionFactory(); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(SoulseekClient.Options.MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); WatchdogTimer = new SystemTimer() { Enabled = SoulseekClient.Options.EnableDistributedNetwork, AutoReset = true, Interval = 300000, }; WatchdogTimer.Elapsed += WatchdogTimer_Elapsed; }
/// <summary> /// Initializes a new instance of the <see cref="DistributedConnectionManager"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="connectionFactory">The IConnectionFactory instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> public DistributedConnectionManager( SoulseekClient soulseekClient, IConnectionFactory connectionFactory = null, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient; AcceptChildren = SoulseekClient?.Options?.AcceptDistributedChildren ?? new SoulseekClientOptions().AcceptDistributedChildren; ConcurrentChildLimit = SoulseekClient?.Options?.DistributedChildLimit ?? new SoulseekClientOptions().DistributedChildLimit; ConnectionFactory = connectionFactory ?? new ConnectionFactory(); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(this, SoulseekClient?.Options?.MinimumDiagnosticLevel ?? new SoulseekClientOptions().MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); ParentWatchdogTimer = new SystemTimer() { Enabled = false, AutoReset = false, Interval = SoulseekClient.Options.DistributedConnectionOptions.InactivityTimeout, }; ParentWatchdogTimer.Elapsed += (sender, e) => ParentConnection?.Disconnect($"Inactivity timeout of {SoulseekClient.Options.DistributedConnectionOptions.InactivityTimeout} milliseconds was reached; no broadcastable messages recieved"); }
public PeerMessageHandler( ISoulseekClient soulseekClient, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = (SoulseekClient)soulseekClient; Diagnostic = diagnosticFactory ?? new DiagnosticFactory(this, SoulseekClient.Options.MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); }
/// <summary> /// Initializes a new instance of the <see cref="ListenerHandler"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> public ListenerHandler( SoulseekClient soulseekClient, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient ?? throw new ArgumentNullException(nameof(soulseekClient)); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(this, SoulseekClient?.Options?.MinimumDiagnosticLevel ?? new ClientOptions().MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); }
/// <summary> /// Initializes a new instance of the <see cref="PeerConnectionManager"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="connectionFactory">The IConnectionFactory instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> internal PeerConnectionManager( SoulseekClient soulseekClient, IConnectionFactory connectionFactory = null, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient ?? throw new ArgumentNullException(nameof(soulseekClient)); ConcurrentMessageConnectionLimit = SoulseekClient?.Options?.ConcurrentPeerMessageConnectionLimit ?? new ClientOptions().ConcurrentPeerMessageConnectionLimit; ConnectionFactory = connectionFactory ?? new ConnectionFactory(); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(this, SoulseekClient?.Options?.MinimumDiagnosticLevel ?? new ClientOptions().MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); MessageSemaphore = new SemaphoreSlim(ConcurrentMessageConnectionLimit, ConcurrentMessageConnectionLimit); }
/// <summary> /// Initializes a new instance of the <see cref="DistributedConnectionManager"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="connectionFactory">The IConnectionFactory instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> public DistributedConnectionManager( SoulseekClient soulseekClient, IConnectionFactory connectionFactory = null, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient; AcceptChildren = SoulseekClient?.Options?.AcceptDistributedChildren ?? new SoulseekClientOptions().AcceptDistributedChildren; ConcurrentChildLimit = SoulseekClient?.Options?.DistributedChildLimit ?? new SoulseekClientOptions().DistributedChildLimit; ConnectionFactory = connectionFactory ?? new ConnectionFactory(); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(this, SoulseekClient?.Options?.MinimumDiagnosticLevel ?? new SoulseekClientOptions().MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); WatchdogTimer = new SystemTimer() { Enabled = SoulseekClient.Options.EnableDistributedNetwork, AutoReset = true, Interval = 300000, }; WatchdogTimer.Elapsed += (sender, e) => { if (!HasParent) { Diagnostic.Warning($"No distributed parent connected. Requesting a list of candidates."); _ = UpdateStatusAsync(); } }; }
private static readonly int WatchdogTime = 900000; // 15 minutes /// <summary> /// Initializes a new instance of the <see cref="DistributedConnectionManager"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="connectionFactory">The IConnectionFactory instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> public DistributedConnectionManager( SoulseekClient soulseekClient, IConnectionFactory connectionFactory = null, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = soulseekClient; ConnectionFactory = connectionFactory ?? new ConnectionFactory(); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(SoulseekClient.Options.MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); StatusDebounceTimer = new SystemTimer() { Interval = StatusDebounceTime, Enabled = false, AutoReset = false, }; StatusDebounceTimer.Elapsed += (sender, e) => UpdateStatusAsync().ConfigureAwait(false); WatchdogTimer = new SystemTimer() { Enabled = true, AutoReset = true, Interval = WatchdogTime, }; WatchdogTimer.Elapsed += WatchdogTimer_Elapsed; }
/// <summary> /// Initializes a new instance of the <see cref="PeerConnectionManager"/> class. /// </summary> /// <param name="soulseekClient">The ISoulseekClient instance to use.</param> /// <param name="connectionFactory">The IConnectionFactory instance to use.</param> /// <param name="diagnosticFactory">The IDiagnosticFactory instance to use.</param> internal PeerConnectionManager( ISoulseekClient soulseekClient, IConnectionFactory connectionFactory = null, IDiagnosticFactory diagnosticFactory = null) { SoulseekClient = (SoulseekClient)soulseekClient; ConcurrentMessageConnectionLimit = SoulseekClient.Options.ConcurrentPeerMessageConnectionLimit; if (SoulseekClient.Listener != null) { SoulseekClient.Listener.Accepted += Listener_Accepted; } ConnectionFactory = connectionFactory ?? new ConnectionFactory(); Diagnostic = diagnosticFactory ?? new DiagnosticFactory(this, SoulseekClient.Options.MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e)); MessageSemaphore = new SemaphoreSlim(ConcurrentMessageConnectionLimit, ConcurrentMessageConnectionLimit); MessageConnections = new ConcurrentDictionary <string, (SemaphoreSlim Semaphore, IMessageConnection Connection)>(); }