Fix condition for sending CONNECTED state after TRANSIENT_DISCONNECT
This commit is contained in:
11
user.go
11
user.go
@@ -8,6 +8,7 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
@@ -47,7 +48,8 @@ type User struct {
|
|||||||
|
|
||||||
Session *discordgo.Session
|
Session *discordgo.Session
|
||||||
|
|
||||||
BridgeState *bridge.BridgeStateQueue
|
BridgeState *bridge.BridgeStateQueue
|
||||||
|
wasDisconnected atomic.Bool
|
||||||
|
|
||||||
markedOpened map[string]time.Time
|
markedOpened map[string]time.Time
|
||||||
markedOpenedLock sync.Mutex
|
markedOpenedLock sync.Mutex
|
||||||
@@ -530,8 +532,8 @@ func (user *User) readyHandler(_ *discordgo.Session, r *discordgo.Ready) {
|
|||||||
user.DiscordID = r.User.ID
|
user.DiscordID = r.User.ID
|
||||||
user.Update()
|
user.Update()
|
||||||
}
|
}
|
||||||
user.tryAutomaticDoublePuppeting()
|
|
||||||
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBackfilling})
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBackfilling})
|
||||||
|
user.tryAutomaticDoublePuppeting()
|
||||||
|
|
||||||
updateTS := time.Now()
|
updateTS := time.Now()
|
||||||
portalsInSpace := make(map[string]bool)
|
portalsInSpace := make(map[string]bool)
|
||||||
@@ -705,15 +707,14 @@ func (user *User) handleGuild(meta *discordgo.Guild, timestamp time.Time, isInSp
|
|||||||
|
|
||||||
func (user *User) connectedHandler(_ *discordgo.Session, c *discordgo.Connect) {
|
func (user *User) connectedHandler(_ *discordgo.Session, c *discordgo.Connect) {
|
||||||
user.log.Debugln("Connected to discord")
|
user.log.Debugln("Connected to discord")
|
||||||
|
if user.wasDisconnected.Swap(false) {
|
||||||
// FIXME this check can fail if the previous event didn't get sent before reconnecting
|
|
||||||
if user.BridgeState.GetPrev().StateEvent == status.StateTransientDisconnect {
|
|
||||||
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) disconnectedHandler(_ *discordgo.Session, d *discordgo.Disconnect) {
|
func (user *User) disconnectedHandler(_ *discordgo.Session, d *discordgo.Disconnect) {
|
||||||
user.log.Debugln("Disconnected from discord")
|
user.log.Debugln("Disconnected from discord")
|
||||||
|
user.wasDisconnected.Store(true)
|
||||||
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect})
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user