public SnapshotProcessor(IStreamStore streamStore,
                                 IServiceProvider serviceProvider,
                                 IOptions <StorageOptions> optionsAccessor)
        {
            if (streamStore == null)
            {
                throw new ArgumentNullException(nameof(streamStore));
            }

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

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

            _streamStore     = streamStore;
            _serviceProvider = serviceProvider;

            _differ          = new JsonDiffPatch();
            _options         = optionsAccessor.Value ?? new StorageOptions();
            _snapshotProcess = new AsyncProcess(SnapshotProcess);
            _initialization  = InitializeInternalAsync(_cancellationSource.Token);
        }
        public RemoteMessageRouter(ISerializedMessageHandler serializedMessageHandler,
                                   IRequestReplyClientEndPoint logicalEndPoint,
                                   IDateTimeProvider dateTimeProvider,
                                   ILogger <RemoteMessageRouter> logger = null)
        {
            if (serializedMessageHandler == null)
            {
                throw new ArgumentNullException(nameof(serializedMessageHandler));
            }

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

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

            _serializedMessageHandler = serializedMessageHandler;
            _logicalEndPoint          = logicalEndPoint;
            _dateTimeProvider         = dateTimeProvider;
            _logger = logger;

            _receiveProcess = new AsyncProcess(ReceiveProcess, start: true);
        }
        private int _operating = 0; // 0 = Idle, 1 = Running

        #endregion

        /// <summary>
        /// Creates a new instance of the <see cref="Process"/> type with the specified execution operation.
        /// </summary>
        /// <param name="operation">The asynchronous execution operation.</param>
        public TriggerableAsyncProcess(Func <CancellationToken, Task> operation) // The operation is guaranteed not to run concurrently.
        {
            if (operation == null)
            {
                throw new ArgumentNullException(nameof(operation));
            }

            _operation      = operation;
            _dynamicProcess = new AsyncProcess(DynamicExecute);
        }
Beispiel #4
0
        public ProxyHost(Stream stream, IServiceProvider serviceProvider)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

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

            _stream          = stream;
            _serviceProvider = serviceProvider;

            _receiveProcess = new AsyncProcess(ReceiveProcess, start: true);
            _disposeHelper  = new AsyncDisposeHelper(DisposeInternalAsync);
        }
        public ClientConnectionManager(ICoordinationManager coordinationManager,
                                       IDateTimeProvider dateTimeProvider,
                                       IOptions <ClientConnectionOptions> clientConnectionOptionsAccessor,
                                       IOptions <ClientConnectionManagerOptions> clientConnectionManagerOptionsAccessor,
                                       ILogger <ClientConnectionManager> logger = null)
        {
            if (coordinationManager == null)
            {
                throw new ArgumentNullException(nameof(coordinationManager));
            }

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

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

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

            _coordinationManager = coordinationManager;
            _dateTimeProvider    = dateTimeProvider;
            _logger = logger;

            _clientConnectionOptions        = clientConnectionOptionsAccessor.Value ?? new ClientConnectionOptions();
            _clientConnectionManagerOptions = clientConnectionManagerOptionsAccessor.Value ?? new ClientConnectionManagerOptions();

            Timeout  = _clientConnectionOptions.Timeout <= TimeSpan.Zero ? ClientConnectionOptions.DefaultTimeout : _clientConnectionOptions.Timeout;
            BasePath = new CoordinationEntryPath(string.IsNullOrEmpty(_clientConnectionManagerOptions.BasePath) ? ClientConnectionManagerOptions.DefaultBasePath : _clientConnectionManagerOptions.BasePath);
            GarbageCollectionDelayMax = _clientConnectionManagerOptions.GarbageCollectionDelayMax <= TimeSpan.Zero ? ClientConnectionManagerOptions.DefaultGarbageCollectionDelayMax : _clientConnectionManagerOptions.GarbageCollectionDelayMax;


            _garbageCollectionProcess = new AsyncProcess(GarbageCollection, start: true);
        }
        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();
        }
        public CoordinationManager(IServiceScope serviceScope,
                                   ICoordinationStorage storage,
                                   IStoredEntryManager storedEntryManager,
                                   ISessionManager sessionManager,
                                   ICoordinationSessionOwner sessionOwner,
                                   IDateTimeProvider dateTimeProvider,
                                   CoordinationEntryCache cache,
                                   ICoordinationLockManager lockManager,
                                   IOptions <CoordinationManagerOptions> optionsAccessor,
                                   ILogger <CoordinationManager <TAddress> > logger = null)
        {
            if (serviceScope == null)
            {
                throw new ArgumentNullException(nameof(serviceScope));
            }

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

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

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

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

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

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

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

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

            _serviceScope       = serviceScope;
            _storage            = storage;
            _storedEntryManager = storedEntryManager;
            _sessionManager     = sessionManager;
            _sessionOwner       = sessionOwner;
            _dateTimeProvider   = dateTimeProvider;
            _cache       = cache;
            _lockManager = lockManager;
            _logger      = logger;

            _options = optionsAccessor.Value ?? new CoordinationManagerOptions();

            _updateSessionProcess  = new AsyncProcess(UpdateSessionProcess, start: true);
            _sessionCleanupProcess = new AsyncProcess(SessionCleanupProcess, start: true);
        }