private void CreatePlayers() { database.AddBot(botFactory.CreateBot("Bot1", startingChips)); database.AddBot(botFactory.CreateBot("Bot2", startingChips)); database.AddBot(botFactory.CreateBot("Bot3", startingChips)); database.AddBot(botFactory.CreateBot("Bot4", startingChips)); database.AddBot(botFactory.CreateBot("Bot5", startingChips)); database.AddHuman(humanFactory.CreateHuman("Player", startingChips)); }
public void Initialize(IBotFactory botFactory, int delayBetweenInitsMS = 1100) { if (_initialized) { throw new InvalidOperationException("Unable to initialize bot framework a second time."); } int numFailed = 0; for (int i = 0; i < _numBots; ++i) { if (_terminating) { throw new BotException("Received termination signal; initialization has been cancelled"); } try { var bot = botFactory.CreateBot(i, _host, _port); bot.WorkCompleted += () => _doneSignal.Release(); bot.Initialize(); _botsList.Add(bot); } catch (Exception ex) { _outputHandler.OutputBotInitializationFailed(ex.Message); numFailed++; continue; } _outputHandler.OutputBotInitializationSucceeded(i); Thread.Sleep(delayBetweenInitsMS); //minimum for this is 1sec server-side } if (numFailed > 0) { _outputHandler.OutputWarnSomeBotsFailed(); _numBots -= numFailed; } else if (numFailed == _numBots) { throw new BotException("All bots failed to initialize. No bots will run."); } _initialized = true; }
private async Task <int> Run(ServiceProvider serviceProvider) { while (true) { try { var botConfiguration = serviceProvider.GetRequiredService <IOptions <BotConfiguration> >(); var botInstance = _botConfigurationFactory.CreateBot(botConfiguration.Value.BotType); await botInstance.Run(); } catch (Exception e) { var externalClient = serviceProvider.GetRequiredService <IExternalMessagingClient>(); Log.Information($"Bot crashed with exception {e.Message}, restarting"); await externalClient.SendMessage($"Bot crashed with exception {e.Message}, restarting"); await Task.Delay(TimeSpan.FromSeconds(30)); } } }
public void Initialize(IBotFactory botFactory, int delayBetweenInitsMS = 1100) { if (_initialized) throw new InvalidOperationException("Unable to initialize bot framework a second time."); int numFailed = 0; for (int i = 0; i < _numBots; ++i) { if (_terminating) throw new BotException("Received termination signal; initialization has been cancelled"); try { var bot = botFactory.CreateBot(i, _host, _port); bot.WorkCompleted += () => _doneSignal.Release(); bot.Initialize(); _botsList.Add(bot); } catch(Exception ex) { _outputHandler.OutputBotInitializationFailed(ex.Message); numFailed++; continue; } _outputHandler.OutputBotInitializationSucceeded(i); Thread.Sleep(delayBetweenInitsMS); //minimum for this is 1sec server-side } if (numFailed > 0) { _outputHandler.OutputWarnSomeBotsFailed(); _numBots -= numFailed; } else if (numFailed == _numBots) { throw new BotException("All bots failed to initialize. No bots will run."); } _initialized = true; }