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)); }
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)); }
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); }