public static void Launch(string[] args, IMonkeyBehaviour monkeyBehaviour) { Parser.Default.ParseArguments <Options>(args).WithParsed(options => { Execute(options, monkeyBehaviour); }); }
private static async Task RunMonkeys(Options options, IMonkeyBehaviour monkeyBehaviour) { var logger = CreateLogger(options); logger.Log( $"Options: {JsonConvert.SerializeObject(options, Formatting.Indented)}{Environment.NewLine}Monkeys, GO!"); try { var monkeyFactory = monkeyBehaviour.CreateMonkeyFactory(new ShamanMonkeyLogger(logger), options); await LaunchMonkeyGroup(options, logger, monkeyFactory, monkeyBehaviour); } catch (Exception e) { logger.Log($"Monkeys gone with troubles {e}"); } finally { logger.Log("Monkeys gone."); } }
private static async Task LaunchMonkeyGroup(Options options, ILogger logger, IMonkeyFactory monkeyFactory, IMonkeyBehaviour monkeyBehaviour) { var random = new Random(); var monkeysCount = GetMonkeysCount(options, random); try { var monkeyGroup = await monkeyFactory.PrepareMonkeys(monkeysCount, options.MonkeysDelay, monkeyBehaviour.Authenticate); for (var gameIndex = 0; gameIndex < options.GamesCount || options.GamesCount == 0; gameIndex++) { try { var result = await monkeyGroup.SendMonkeys(TimeSpan.FromSeconds(options.RoomPlayDuration), monkeyBehaviour.Play); logger.Log($"Game {gameIndex + 1}:{Environment.NewLine}{result}"); } catch (Exception e) { logger.Log($"Error during monkeys play: {e}"); } } } catch (Exception e) { logger.Log($"Error during preparing monkeys: {e}"); } }
private static void Execute(Options options, IMonkeyBehaviour monkeyBehaviour) { RunMonkeys(options, monkeyBehaviour).Wait(); }