protected override void CalculateState()

in src/DotPulsar/Internal/ProducerProcess.cs [40:76]


    protected override void CalculateState()
    {
        if (_stateManager.IsFinalState())
            return;

        if (ExecutorState == ExecutorState.Faulted)
        {
            var newState = Exception is ProducerFencedException ? ProducerState.Fenced : ProducerState.Faulted;
            var formerState = _stateManager.SetState(newState);
            if (formerState != ProducerState.Faulted && formerState != ProducerState.Fenced)
                ActionQueue.Enqueue(async _ => await _subProducer.ChannelFaulted(Exception!).ConfigureAwait(false));
            return;
        }

        switch (ChannelState)
        {
            case ChannelState.ClosedByServer:
            case ChannelState.Disconnected:
                _stateManager.SetState(ProducerState.Disconnected);
                ActionQueue.Enqueue(async x =>
                {
                    await _subProducer.CloseChannel(x).ConfigureAwait(false);
                    await _subProducer.EstablishNewChannel(x).ConfigureAwait(false);
                });
                return;
            case ChannelState.Connected:
                ActionQueue.Enqueue(x =>
                {
                    _stateManager.SetState(ProducerState.Connected);
                    return Task.CompletedTask;
                });
                return;
            case ChannelState.WaitingForExclusive:
                _stateManager.SetState(ProducerState.WaitingForExclusive);
                return;
        }
    }