namespace Myriad.Gateway;

// TODO: unused?
public class GatewayCloseException: Exception
{
    public GatewayCloseException(int closeCode, string closeReason) : base($"{closeCode}: {closeReason}")
    {
        CloseCode = closeCode;
        CloseReason = closeReason;
    }

    public int CloseCode { get; }
    public string CloseReason { get; }
}

public class GatewayCloseCode
{
    public const int UnknownError = 4000;
    public const int UnknownOpcode = 4001;
    public const int DecodeError = 4002;
    public const int NotAuthenticated = 4003;
    public const int AuthenticationFailed = 4004;
    public const int AlreadyAuthenticated = 4005;
    public const int InvalidSeq = 4007;
    public const int RateLimited = 4008;
    public const int SessionTimedOut = 4009;
    public const int InvalidShard = 4010;
    public const int ShardingRequired = 4011;
    public const int InvalidApiVersion = 4012;
    public const int InvalidIntent = 4013;
    public const int DisallowedIntent = 4014;
}