public bool Run()
        {
            FinishCondition = GetFinishCondition();

            foreach (var instance in _instances)
            {
                Runner.Enqueue(instance.EndPoint, new SystemMessage.SystemInit(), instance.InputBus);
                Runner.Enqueue(instance.EndPoint, new ElectionMessage.StartElections(), instance.InputBus);

                var gossip = GetInitialGossipFor(instance, _instances);
                Runner.Enqueue(instance.EndPoint, gossip, instance.InputBus);
            }

            var additionalProcessors = GetAdditionalProcessors();
            var processors = new[] { Logger }.Union(additionalProcessors);

            var isGood = Runner.Run(FinishCondition, processors.ToArray());

            if (!isGood)
            {
                Console.WriteLine("Unsuccessful run. Parameters:\n"
                                  + "rndSeed: {0}\n"
                                  + "maxIterCnt = {1}\n"
                                  + "instancesCnt = {2}\n"
                                  + "httpLossProbability = {3}\n"
                                  + "httpMaxDelay = {4}\n"
                                  + "timerMinDelay = {5}\n"
                                  + "timerMaxDelay = {6}\n",
                                  RndSeed,
                                  _maxIterCnt,
                                  InstancesCnt,
                                  HttpLossProbability,
                                  HttpMaxDelay,
                                  _timerMinDelay,
                                  _timerMaxDelay);
            }

            return(isGood);
        }
        public bool Run(IRandTestFinishCondition finishCondition, params IRandTestItemProcessor[] processors)
        {
            Ensure.NotNull(finishCondition, "finishCondition");

            while (++_iter <= _maxIterCnt && _queue.Count > 0)
            {
                var item = _queue.DeleteMin();
                _curLogicalTime = item.LogicalTime;
                foreach (var processor in processors)
                {
                    processor.Process(_iter, item);
                }

                finishCondition.Process(_iter, item);
                if (finishCondition.Done)
                {
                    break;
                }

                item.Bus.Publish(item.Message);
            }
            return(finishCondition.Success);
        }
        public bool Run()
        {
            FinishCondition = GetFinishCondition();

            foreach (var instance in _instances)
            {
                Runner.Enqueue(instance.EndPoint, new SystemMessage.SystemInit(), instance.InputBus);
                Runner.Enqueue(instance.EndPoint, new ElectionMessage.StartElections(), instance.InputBus);

                var gossip = GetInitialGossipFor(instance, _instances);
                Runner.Enqueue(instance.EndPoint, gossip, instance.InputBus);
            }

            var additionalProcessors = GetAdditionalProcessors();
            var processors = new[] { Logger }.Union(additionalProcessors);

            var isGood = Runner.Run(FinishCondition, processors.ToArray());

            if (!isGood)
            {
                Console.WriteLine("Unsuccessfull run. Parameters:\n"
                                  + "rndSeed: {0}\n"
                                  + "maxIterCnt = {1}\n"
                                  + "instancesCnt = {2}\n"
                                  + "httpLossProbability = {3}\n"
                                  + "httpMaxDelay = {4}\n"
                                  + "timerMinDelay = {5}\n"
                                  + "timerMaxDelay = {6}\n",
                                  RndSeed,
                                  _maxIterCnt,
                                  InstancesCnt,
                                  HttpLossProbability,
                                  HttpMaxDelay,
                                  _timerMinDelay,
                                  _timerMaxDelay);
            }
            return isGood;
        }