public static void Each(ITestOutputHelper output, AtemServerClientPool pool, Func <Lazy <ImmutableList <ICommand> >, ICommand, IEnumerable <ICommand> > handler, string[] cases, Action <AtemMockServerWrapper> runner)
 {
     cases = cases.Where(c => !string.IsNullOrEmpty(c)).ToArray();
     Assert.NotEmpty(cases);
     cases.ForEach(caseId =>
     {
         using var helper = new AtemMockServerWrapper(output, pool, handler, caseId);
         runner(helper);
     });
 }
        public AtemMockServerWrapper(ITestOutputHelper output, AtemServerClientPool pool, Func <Lazy <ImmutableList <ICommand> >, ICommand, IEnumerable <ICommand> > handler, string caseId)
        {
            _output  = output;
            _pool    = pool;
            _handler = handler;

            _case     = _pool.GetCase(caseId);
            SdkClient = _case.SelectSdkClient();
            Server.ActiveConnectionId = SdkClient.Id;

            var resetEvent = new ManualResetEvent(false);

            void TmpHandler(object o) => resetEvent.Set();

            SdkClient.OnSdkStateChange += TmpHandler;
            Server.ResetClient(SdkClient.Id);
            resetEvent.WaitOne(2000); // TODO - monitor result
            SdkClient.OnSdkStateChange -= TmpHandler;

            Helper = new AtemTestHelper(SdkClient, _output, _case.Server, _pool.StateSettings);
        }