Example #1
0
        public RoundBasedRegister(IIntercomMessageHub intercomMessageHub,
                                  IBallotGenerator ballotGenerator,
                                  ISynodConfiguration synodConfig,
                                  LeaseConfiguration leaseConfig,
                                  ILogger logger)
        {
            this.logger = logger;
            this.synodConfig = synodConfig;
            this.leaseConfig = leaseConfig;
            this.intercomMessageHub = intercomMessageHub;
            intercomMessageHub.Start();
            readBallot = ballotGenerator.Null();
            writeBallot = ballotGenerator.Null();

            listener = intercomMessageHub.Subscribe();

            listener.Where(m => Unsafe.Equals(m.Identity, LeaseReadMessage.MessageIdentity))
                    .Subscribe(OnReadReceived);
            listener.Where(m => Unsafe.Equals(m.Identity, LeaseWriteMessage.MessageIdentity))
                    .Subscribe(OnWriteReceived);

            ackReadStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseAckReadMessage.MessageIdentity));
            nackReadStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseNackReadMessage.MessageIdentity));
            ackWriteStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseAckWriteMessage.MessageIdentity));
            nackWriteStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseNackWriteMessage.MessageIdentity));
        }
Example #2
0
        private void StartIntercomMessageHub()
        {
            var started = intercomMessageHub.Start(StartTimeout);

            if (!started)
            {
                logger.Error($"Failed starting IntercomMessageHub! Method call timed out after {StartTimeout.TotalMilliseconds} ms.");
            }
        }
        public bool Start(TimeSpan startTimeout)
        {
            if (intercomMessageHub.Start(startTimeout))
            {
                RequestInstanceDiscovery();
                cleanUpTimer = new Timer(_ => CleanUpStaleInstances(),
                                         null,
                                         TimeSpan.Zero,
                                         staleInstancesCleanupPeriod);
                return(true);
            }

            return(false);
        }