Exemplo n.º 1
0
        /// <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");
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        /// <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();
                }
            };
        }
Exemplo n.º 4
0
 public PeerMessageHandler(
     ISoulseekClient soulseekClient,
     IDiagnosticFactory diagnosticFactory = null)
 {
     SoulseekClient = (SoulseekClient)soulseekClient;
     Diagnostic     = diagnosticFactory ??
                      new DiagnosticFactory(this, SoulseekClient.Options.MinimumDiagnosticLevel, (e) => DiagnosticGenerated?.Invoke(this, e));
 }
Exemplo n.º 5
0
 /// <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));
 }
Exemplo n.º 6
0
 /// <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));
 }
Exemplo n.º 7
0
        /// <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));
        }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
        /// <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)>();
        }
Exemplo n.º 10
0
        /// <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;
        }
Exemplo n.º 11
0
 public static Diagnostic GetDiagnostic([NotNull] this IDiagnosticFactory fac, [NotNull] ISourceLine location, int code, object[] messageArgs, string stackTrace)
 {
     return(fac.GetDiagnostic(location, code, messageArgs, stackTrace, null));
 }
Exemplo n.º 12
0
 private AdditionalTextAnalyzerRegisterService(IDiagnosticFactory diagnosticFactory)
 {
     _diagnosticFactory = diagnosticFactory;
 }
Exemplo n.º 13
0
 /// <summary/>
 public RetryingInterceptor(ILogger <RetryingInterceptor> logger, IDiagnosticFactory diagnosticFactory, IOptions <MessagingClientOptions> options) : base(logger, diagnosticFactory, options)
 {
 }
Exemplo n.º 14
0
 /// <summary/>
 public DiagnosticsInterceptor(ILogger <DiagnosticsInterceptor <IMessage <object>, object> > logger, IDiagnosticFactory diagnosticFactory) : base(logger, diagnosticFactory)
 {
 }
Exemplo n.º 15
0
 public BaseDiagnosticSuite()
 {
     Container         = PumaApp.Instance.Container;
     Analyzers         = new List <IAnalyzer>();
     DiagnosticFactory = new DiagnosticFactory();
 }
Exemplo n.º 16
0
 /// <summary/>
 public OperationHandler(IDiagnosticFactory diagnosticFactory) =>
 this.diagnosticFactory = diagnosticFactory;
 private ConfigurationFileAnalyzerRegisterService(IConfigurationFileParser configurationFileParser, IFileExtensionFilter configurationFileFilter, IDiagnosticFactory diagnosticFactory)
 {
     _configurationFileParser = configurationFileParser;
     _configurationFileFilter = configurationFileFilter;
     _diagnosticFactory       = diagnosticFactory;
 }
 public DiagnosticMiddleware(IDiagnosticFactory operationFactory) =>
 this.operationFactory = operationFactory;