Пример #1
0
        public ModulesManager(int maxPacketSize, string receiverHost, int receiverPort, int receiverTimeout,
                              string rpcHost, int rpcPort, int queriesRecomputeTimer, int purgeTimer, RSA rsa,
                              IGossipStrategy gossipStrategy, int gossipTimer, int retryDelay, int maxRetriesCount, ZMI zmi)
        {
            Logger.Log("Creating modules...");
            _registry = new ExecutorRegistry();
            var executor = new Executor(_registry);

            void AddModule(IModule module)
            {
                if (executor.TryAddModule(module))
                {
                    return;
                }
                Logger.LogError($"Could not add {module.GetType().Name}");
                throw new ApplicationException(
                          $"Could not add {module.GetType().Name}, which violates the application");
            }

            Console.WriteLine($"Agent started on {receiverHost}:{receiverPort}\nRPC started on {rpcHost}:{rpcPort}");

            AddModule(_timer         = new TimerModule(executor));
            AddModule(_communication = new CommunicationModule(executor, maxPacketSize, IPAddress.Parse(receiverHost), receiverPort, receiverTimeout));
            AddModule(_zmi           = new ZMIModule(zmi, rsa, queriesRecomputeTimer, purgeTimer, executor));
            AddModule(_rmi           = new RMIModule(executor, new ServerPort(rpcHost, rpcPort, ServerCredentials.Insecure)));
            AddModule(_gossip        = new GossipModule(executor, gossipTimer, retryDelay, maxRetriesCount, gossipStrategy));
        }
Пример #2
0
        public GossipModule(IExecutor executor, int gossipTimer, int retryDelay, int maxRetriesCount,
                            IGossipStrategy gossipStrategy = null)
        {
            _executor       = executor;
            _gossipStrategy = gossipStrategy ?? new RandomGossipStrategy();

            _gossipThread = new Thread(Gossip);
            _gossipThread.Start();

            _readerThread = new Thread(ReadMessages);
            _readerThread.Start();

            _gossipTimer     = gossipTimer;
            _retryDelay      = retryDelay;
            _maxRetriesCount = maxRetriesCount;

            lock (_timerMessageIdLock)
                _executor.AddMessage(new TimerAddCallbackMessage(GetType(), _timerMessageId++, _gossipTimer,
                                                                 DateTimeOffset.Now, AddGossipTimer));
        }
Пример #3
0
        private static bool TryGetGossipStrategy(string strategyName, out IGossipStrategy gossipStrategy)
        {
            switch (strategyName)
            {
            case "random":
                gossipStrategy = new RandomGossipStrategy();
                return(true);

            case "randomExp":
                gossipStrategy = new RandomExponentialGossipStrategy();
                return(true);

            case "roundRobin":
                gossipStrategy = new RoundRobinGossipStrategy();
                return(true);

            case "roundRobinExp":
                gossipStrategy = new RoundRobinExponentialGossipStrategy();
                return(true);
            }

            gossipStrategy = null;
            return(false);
        }