| using DotPulsar.Exceptions; |
| using DotPulsar.Internal.Abstractions; |
| using DotPulsar.Internal.Exceptions; |
| using System; |
| using System.Net.Sockets; |
| |
| namespace DotPulsar.Internal |
| { |
| public sealed class FaultStrategy : IFaultStrategy |
| { |
| public FaultStrategy(TimeSpan retryInterval) |
| { |
| RetryInterval = retryInterval; |
| } |
| |
| public TimeSpan RetryInterval { get; } |
| |
| public FaultAction DetermineFaultAction(Exception exception) |
| { |
| switch (exception) |
| { |
| case TooManyRequestsException _: return FaultAction.Retry; |
| case StreamNotReadyException _: return FaultAction.Relookup; |
| case ServiceNotReadyException _: return FaultAction.Relookup; |
| case DotPulsarException _: return FaultAction.Fault; |
| case SocketException socketException: |
| switch (socketException.SocketErrorCode) |
| { |
| case SocketError.HostNotFound: |
| case SocketError.HostUnreachable: |
| case SocketError.NetworkUnreachable: |
| return FaultAction.Fault; |
| } |
| break; |
| } |
| |
| return FaultAction.Relookup; |
| } |
| } |
| } |