Retry on unknown errors when logging in
This commit is contained in:
30
user.go
30
user.go
@@ -442,13 +442,31 @@ func (user *User) Login(token string) error {
|
||||
user.wasLoggedOut = false
|
||||
user.bridgeStateLock.Unlock()
|
||||
user.DiscordToken = token
|
||||
err := user.Connect()
|
||||
if err != nil {
|
||||
user.DiscordToken = ""
|
||||
return err
|
||||
var err error
|
||||
const maxRetries = 3
|
||||
Loop:
|
||||
for i := 0; i < maxRetries; i++ {
|
||||
err = user.Connect()
|
||||
if err == nil {
|
||||
user.Update()
|
||||
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.Update()
|
||||
return nil
|
||||
user.DiscordToken = ""
|
||||
return err
|
||||
}
|
||||
|
||||
func (user *User) IsLoggedIn() bool {
|
||||
|
||||
Reference in New Issue
Block a user