コード例 #1
0
        public LinkTopology(LinkConfiguration configuration, ILinkChannel channel, ILinkTopologyHandler handler,
            bool once)
        {
            if (configuration == null)
                throw new ArgumentNullException(nameof(configuration));

            if (channel == null)
                throw new ArgumentNullException(nameof(channel));

            if (handler == null)
                throw new ArgumentNullException(nameof(handler));

            _configuration = configuration;
            _logger = _configuration.LoggerFactory.CreateLogger($"{GetType().Name}({Id:D})");

            if (_logger == null)
                throw new ArgumentException("Cannot create logger", nameof(configuration.LoggerFactory));

            _handler = handler;
            _isOnce = once;

            _disposedCancellationSource = new CancellationTokenSource();
            _disposedCancellation = _disposedCancellationSource.Token;

            Channel = channel;
            Channel.Disposed += ChannelOnDisposed;
            Channel.Ready += ChannelOnReady;

            _logger.Debug($"Created(channelId: {Channel.Id}, once: {once})");

#pragma warning disable 4014
            ScheduleConfiguration(false);
#pragma warning restore 4014           
        }
コード例 #2
0
        public ILinkTopologyBuilder Handler(ILinkTopologyHandler handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            return(new LinkTopologyBuilder(this, topologyHandler: handler));
        }
コード例 #3
0
 private LinkTopologyBuilder(
     LinkTopologyBuilder prev,
     TimeSpan?recoveryInterval = null,
     LinkStateHandler <LinkTopologyState> stateHandler       = null,
     LinkStateHandler <LinkChannelState> channelStateHandler = null,
     ILinkTopologyHandler topologyHandler = null
     ) : this(
         prev._link,
         recoveryInterval ?? prev._recoveryInterval,
         stateHandler ?? prev._stateHandler,
         channelStateHandler ?? prev._channelStateHandler,
         topologyHandler ?? prev._topologyHandler
         )
 {
 }
コード例 #4
0
        public LinkTopologyBuilder(
            Link link,
            TimeSpan recoveryInterval,
            LinkStateHandler <LinkTopologyState> stateHandler       = null,
            LinkStateHandler <LinkChannelState> channelStateHandler = null,
            ILinkTopologyHandler topologyHandler = null
            )
        {
            _link = link ?? throw new ArgumentNullException(nameof(link));

            _recoveryInterval    = recoveryInterval;
            _stateHandler        = stateHandler ?? ((old, @new) => { });
            _channelStateHandler = channelStateHandler ?? ((old, @new) => { });
            _topologyHandler     = topologyHandler;
        }
コード例 #5
0
        public LinkTopologyConfiguration(
            TimeSpan recoveryInterval,
            LinkStateHandler <LinkTopologyState> stateHandler,
            ILinkTopologyHandler topologyHandler
            )
        {
            if (recoveryInterval <= TimeSpan.Zero)
            {
                throw new ArgumentOutOfRangeException(nameof(recoveryInterval), "Must be greater than TimeSpan.Zero");
            }

            RecoveryInterval = recoveryInterval;
            StateHandler     = stateHandler ?? throw new ArgumentNullException(nameof(stateHandler));
            TopologyHandler  = topologyHandler ?? throw new ArgumentException(nameof(topologyHandler));
        }
コード例 #6
0
ファイル: Link.cs プロジェクト: rabbit-link/rabbit-link
        public IDisposable CreatePersistentTopologyConfigurator(ILinkTopologyHandler handler)
        {
            if (handler == null)
                throw new ArgumentNullException(nameof(handler));

            return new LinkTopology(_configuration, CreateChannel(), handler, false);
        }