Retry connecting a few times if connection fails on startup
This commit is contained in:
33
user.go
33
user.go
@@ -219,18 +219,7 @@ func (br *DiscordBridge) startUsers() {
|
|||||||
|
|
||||||
usersWithToken := br.getAllUsersWithToken()
|
usersWithToken := br.getAllUsersWithToken()
|
||||||
for _, u := range usersWithToken {
|
for _, u := range usersWithToken {
|
||||||
go func(user *User) {
|
go u.startupTryConnect(0)
|
||||||
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnecting})
|
|
||||||
err := user.Connect()
|
|
||||||
if err != nil {
|
|
||||||
user.log.Errorfln("Error connecting: %v", err)
|
|
||||||
if closeErr := (&websocket.CloseError{}); errors.As(err, &closeErr) && closeErr.Code == 4004 {
|
|
||||||
user.invalidAuthHandler(nil, nil)
|
|
||||||
} else {
|
|
||||||
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Error: "dc-unknown-websocket-error", Message: err.Error()})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}(u)
|
|
||||||
}
|
}
|
||||||
if len(usersWithToken) == 0 {
|
if len(usersWithToken) == 0 {
|
||||||
br.SendGlobalBridgeState(status.BridgeState{StateEvent: status.StateUnconfigured}.Fill(nil))
|
br.SendGlobalBridgeState(status.BridgeState{StateEvent: status.StateUnconfigured}.Fill(nil))
|
||||||
@@ -248,6 +237,26 @@ func (br *DiscordBridge) startUsers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (user *User) startupTryConnect(retryCount int) {
|
||||||
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnecting})
|
||||||
|
err := user.Connect()
|
||||||
|
if err != nil {
|
||||||
|
user.log.Errorfln("Error connecting: %v", err)
|
||||||
|
closeErr := &websocket.CloseError{}
|
||||||
|
if errors.As(err, &closeErr) && closeErr.Code == 4004 {
|
||||||
|
user.invalidAuthHandler(nil, nil)
|
||||||
|
} else if retryCount < 6 {
|
||||||
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: "dc-unknown-websocket-error", Message: err.Error()})
|
||||||
|
retryInSeconds := 2 << retryCount
|
||||||
|
user.log.Debugfln("Retrying connection in %d seconds", retryInSeconds)
|
||||||
|
time.Sleep(time.Duration(retryInSeconds) * time.Second)
|
||||||
|
user.startupTryConnect(retryCount + 1)
|
||||||
|
} else {
|
||||||
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Error: "dc-unknown-websocket-error", Message: err.Error()})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (user *User) SetManagementRoom(roomID id.RoomID) {
|
func (user *User) SetManagementRoom(roomID id.RoomID) {
|
||||||
user.bridge.managementRoomsLock.Lock()
|
user.bridge.managementRoomsLock.Lock()
|
||||||
defer user.bridge.managementRoomsLock.Unlock()
|
defer user.bridge.managementRoomsLock.Unlock()
|
||||||
|
|||||||
Reference in New Issue
Block a user