public EventStoreConnectionLogicHandler(IEventStoreConnection esConnection, ConnectionSettings settings)
        {
            Ensure.NotNull(esConnection, "esConnection");
            Ensure.NotNull(settings, "settings");

            _esConnection = esConnection;
            _settings     = settings;

            // NOTE: It can happen the user submitted operations before the connection was available and got postponed
            // by the operation or subscription manager. This leads the first operation to take time before being
            // executed. By initializing _lastTimeoutsTimeStamp like this we prevent the first operation from taking a
            // huge amount of time to complete.
            _lastTimeoutsTimeStamp = _settings.OperationTimeoutCheckPeriod.Negate();

            _operations    = new OperationsManager(_esConnection.ConnectionName, settings);
            _subscriptions = new SubscriptionsManager(_esConnection.ConnectionName, settings);
            _queue         = new SimpleQueuedHandler(_settings.Log);
            _queue.RegisterHandler <StartConnectionMessage>(msg => StartConnection(msg.Task, msg.EndPointDiscoverer));
            _queue.RegisterHandler <CloseConnectionMessage>(msg => CloseConnection(msg.Reason, msg.Exception));

            _queue.RegisterHandler <StartOperationMessage>(msg =>
                                                           StartOperation(msg.Operation, msg.MaxRetries, msg.Timeout));
            _queue.RegisterHandler <StartSubscriptionMessage>(StartSubscription);
            _queue.RegisterHandler <StartFilteredSubscriptionMessage>(StartFilteredSubscription);
            _queue.RegisterHandler <StartPersistentSubscriptionMessage>(StartSubscription);

            _queue.RegisterHandler <EstablishTcpConnectionMessage>(msg => EstablishTcpConnection(msg.EndPoints));
            _queue.RegisterHandler <TcpConnectionEstablishedMessage>(msg => TcpConnectionEstablished(msg.Connection));
            _queue.RegisterHandler <TcpConnectionErrorMessage>(msg => TcpConnectionError(msg.Connection, msg.Exception));
            _queue.RegisterHandler <TcpConnectionClosedMessage>(msg => TcpConnectionClosed(msg.Connection));
            _queue.RegisterHandler <HandleTcpPackageMessage>(msg => HandleTcpPackage(msg.Connection, msg.Package));

            _queue.RegisterHandler <TimerTickMessage>(msg => TimerTick());

            _timer = new Timer(_ => EnqueueMessage(TimerTickMessage), null, Consts.TimerPeriod, Consts.TimerPeriod);

            _compatibilityMode = CompatibilityMode.Create(_settings.CompatibilityMode);
        }
Beispiel #2
0
        public ClusterDnsEndPointDiscoverer(ILogger log,
                                            string clusterDns,
                                            int maxDiscoverAttempts,
                                            int httpGossipPort,
                                            GossipSeed[] gossipSeeds,
                                            TimeSpan gossipTimeout,
                                            NodePreference nodePreference,
                                            ICompatibilityMode compatibilityMode,
                                            IHttpClient httpAsyncClient)
        {
            Ensure.NotNull(log, "log");

            _log        = log;
            _clusterDns = (gossipSeeds?.Length ?? 0) == 0
                                ? new DnsEndPoint(clusterDns, httpGossipPort)
                                : null;
            _maxDiscoverAttempts = maxDiscoverAttempts;
            _gossipSeeds         = gossipSeeds;
            _gossipTimeout       = gossipTimeout;
            _compatibilityMode   = compatibilityMode;
            _client         = httpAsyncClient;
            _nodePreference = nodePreference;
        }