コード例 #1
0
        public SessionProvider(IPhysicalEndPointMultiplexer <TAddress> endPointMultiplexer,
                               IDateTimeProvider dateTimeProvider,
                               IAddressConversion <TAddress> addressConversion)
        {
            if (endPointMultiplexer == null)
            {
                throw new ArgumentNullException(nameof(endPointMultiplexer));
            }

            if (dateTimeProvider == null)
            {
                throw new ArgumentNullException(nameof(dateTimeProvider));
            }

            if (addressConversion == null)
            {
                throw new ArgumentNullException(nameof(addressConversion));
            }

            _address = endPointMultiplexer.LocalAddress;

            if (_address.Equals(default(TAddress)))
            {
                throw new ArgumentException($"The end-points physical address must not be the default value of '{typeof(TAddress)}'.", nameof(endPointMultiplexer));
            }

            _dateTimeProvider  = dateTimeProvider;
            _addressConversion = addressConversion;
        }
コード例 #2
0
        public DebugConnection(IAddressConversion <IPEndPoint> addressConversion,
                               IMetadataAccessor metadataAccessor,
                               IOptions <ModuleDebugOptions> optionsAccessor,
                               IOptions <RemoteMessagingOptions> remoteOptionsAccessor,
                               IServiceProvider serviceProvider,
                               ILoggerFactory loggerFactory = null)
        {
            if (addressConversion == null)
            {
                throw new ArgumentNullException(nameof(addressConversion));
            }

            if (metadataAccessor == null)
            {
                throw new ArgumentNullException(nameof(metadataAccessor));
            }

            if (optionsAccessor == null)
            {
                throw new ArgumentNullException(nameof(optionsAccessor));
            }

            if (remoteOptionsAccessor == null)
            {
                throw new ArgumentNullException(nameof(remoteOptionsAccessor));
            }

            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            _addressConversion = addressConversion;
            _metadataAccessor  = metadataAccessor;
            _options           = optionsAccessor.Value ?? new ModuleDebugOptions();
            _remoteOptions     = remoteOptionsAccessor.Value ?? new RemoteMessagingOptions();
            _serviceProvider   = serviceProvider;
            _loggerFactory     = loggerFactory;

            _logger    = _loggerFactory?.CreateLogger <DebugConnection>();
            _debugPort = new Lazy <IPEndPoint>(() => _addressConversion.Parse(_options.DebugConnection), LazyThreadSafetyMode.PublicationOnly);

            _tcpClientLazy = new DisposableAsyncLazy <TcpClient>(
                factory: CreateTcpClientAsync,
                disposal: tcpClient => { tcpClient.Dispose(); return(Task.CompletedTask); },
                options: DisposableAsyncLazyOptions.Autostart | DisposableAsyncLazyOptions.ExecuteOnCallingThread);

            _proxyHostLazy = new DisposableAsyncLazy <ProxyHost>(
                factory: CreateProxyHostAsync,
                disposal: proxyHost => proxyHost.DisposeAsync(),
                options: DisposableAsyncLazyOptions.Autostart | DisposableAsyncLazyOptions.ExecuteOnCallingThread);
        }
コード例 #3
0
        public EndPointMap(ICoordinationManager coordinationManager, IAddressConversion <TAddress> addressConversion)
        {
            if (coordinationManager == null)
            {
                throw new ArgumentNullException(nameof(coordinationManager));
            }

            if (addressConversion == null)
            {
                throw new ArgumentNullException(nameof(addressConversion));
            }

            _coordinationManager = coordinationManager;
            _addressConversion   = addressConversion;
        }
コード例 #4
0
        public DebugPort(IServiceProvider serviceProvider,
                         IAddressConversion <IPEndPoint> addressConversion,
                         IOptions <ModularityOptions> optionsAccessor,
                         IRemoteMessageDispatcher messageDispatcher,
                         ILoggerFactory loggerFactory = null)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            if (addressConversion == null)
            {
                throw new ArgumentNullException(nameof(addressConversion));
            }

            if (optionsAccessor == null)
            {
                throw new ArgumentNullException(nameof(optionsAccessor));
            }

            if (messageDispatcher == null)
            {
                throw new ArgumentNullException(nameof(messageDispatcher));
            }

            var options = optionsAccessor.Value ?? new ModularityOptions();

            _serviceProvider   = serviceProvider;
            _messageDispatcher = messageDispatcher;
            _loggerFactory     = loggerFactory;
            _logger            = _loggerFactory?.CreateLogger <DebugPort>();

            var endPoint = addressConversion.Parse(options.DebugConnection);

            _tcpHost              = new TcpListener(endPoint);
            _connectionProcess    = new AsyncProcess(ConnectProcedure);
            _initializationHelper = new AsyncInitializationHelper <IPEndPoint>(InitializeInternalAsync);
            _disposeHelper        = new AsyncDisposeHelper(DisposeInternalAsync);
        }
コード例 #5
0
        public CoordinationExchangeManager(ICoordinationSessionOwner sessionOwner,
                                           ISessionManager sessionManager,
                                           ILockWaitDirectory lockWaitDirectory,
                                           IProvider <ICoordinationLockManager> lockManager,
                                           ICoordinationStorage storage,
                                           CoordinationEntryCache cache,
                                           IPhysicalEndPointMultiplexer <TAddress> endPointMultiplexer,
                                           IAddressConversion <TAddress> addressConversion,
                                           IOptions <CoordinationManagerOptions> optionsAccessor,
                                           ILogger <CoordinationExchangeManager <TAddress> > logger = null)
        {
            if (sessionOwner == null)
            {
                throw new ArgumentNullException(nameof(sessionOwner));
            }

            if (sessionManager == null)
            {
                throw new ArgumentNullException(nameof(sessionManager));
            }

            if (lockWaitDirectory == null)
            {
                throw new ArgumentNullException(nameof(lockWaitDirectory));
            }

            if (lockManager == null)
            {
                throw new ArgumentNullException(nameof(lockManager));
            }

            if (storage == null)
            {
                throw new ArgumentNullException(nameof(storage));
            }

            if (cache == null)
            {
                throw new ArgumentNullException(nameof(cache));
            }

            if (endPointMultiplexer == null)
            {
                throw new ArgumentNullException(nameof(endPointMultiplexer));
            }

            if (addressConversion == null)
            {
                throw new ArgumentNullException(nameof(addressConversion));
            }

            _sessionOwner        = sessionOwner;
            _sessionManager      = sessionManager;
            _lockWaitDirectory   = lockWaitDirectory;
            _lockManager         = lockManager;
            _storage             = storage;
            _cache               = cache;
            _endPointMultiplexer = endPointMultiplexer;
            _addressConversion   = addressConversion;
            _logger              = logger;

            _options          = optionsAccessor.Value ?? new CoordinationManagerOptions();
            _physicalEndPoint = new DisposableAsyncLazy <IPhysicalEndPoint <TAddress> >(
                factory: GetLocalSessionEndPointAsync,
                disposal: DisposePhysicalEndPointAsync,
                DisposableAsyncLazyOptions.Autostart | DisposableAsyncLazyOptions.ExecuteOnCallingThread);

            _receiveProcess = new AsyncProcess(ReceiveProcess);
            _receiveProcess.Start();
        }