Retry on unknown errors when logging in

This commit is contained in:
Tulir Asokan
2023-03-10 17:39:34 +02:00
parent d42c4722c9
commit 0deec8b853

28
user.go
View File

@@ -442,14 +442,32 @@ func (user *User) Login(token string) error {
user.wasLoggedOut = false user.wasLoggedOut = false
user.bridgeStateLock.Unlock() user.bridgeStateLock.Unlock()
user.DiscordToken = token user.DiscordToken = token
err := user.Connect() var err error
if err != nil { const maxRetries = 3
user.DiscordToken = "" Loop:
return err for i := 0; i < maxRetries; i++ {
} err = user.Connect()
if err == nil {
user.Update() user.Update()
return nil return nil
} }
user.log.Errorfln("Error connecting for login: %v", err)
closeErr := &websocket.CloseError{}
errors.As(err, &closeErr)
switch closeErr.Code {
case 4004, 4010, 4011, 4012, 4013, 4014:
break Loop
case 4000:
fallthrough
default:
if i < maxRetries-1 {
time.Sleep(time.Duration(i+1) * 2 * time.Second)
}
}
}
user.DiscordToken = ""
return err
}
func (user *User) IsLoggedIn() bool { func (user *User) IsLoggedIn() bool {
user.Lock() user.Lock()