public async Task WaitForServerState(PythonServerState state)
        {
            var waitEvent = new ManualResetEventSlim(false);

            _serverStateReplaySubject
            .Where(serverState => serverState == state)
            .Subscribe(serverState => waitEvent.Set());

            await waitEvent.WaitHandle.AsTask();
        }
        private void HandleServerStatusChange(PythonServerState state)
        {
            ServerState = state;
            switch (state)
            {
            case PythonServerState.Created:
                break;

            case PythonServerState.Starting:
                break;

            case PythonServerState.Running:
                IsRunning = true;
                break;

            case PythonServerState.Closing:
                break;

            case PythonServerState.Closed:
                IsRunning       = false;
                IsAuthenticated = false;
                break;

            case PythonServerState.Authenticating:
                break;

            case PythonServerState.AwaitingAuthenticationToken:
                break;

            case PythonServerState.Authenticated:
                IsAuthenticated = true;
                break;

            case PythonServerState.Error:
                break;

            case PythonServerState.AuthenticationError:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(state), state, null);
            }
        }
 private void PublishServerState(PythonServerState state) => _serverStateSubject?.OnNext(state);