Эх сурвалжийг харах

Retry on unknown errors when logging in

Tulir Asokan 2 жил өмнө
parent
commit
0deec8b853
1 өөрчлөгдсөн 24 нэмэгдсэн , 6 устгасан
  1. 24 6
      user.go

+ 24 - 6
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 {