Handle node removal better to ensure players aren't used if there's no node
This commit is contained in:
parent
169cc4f563
commit
d99e202995
1
go.mod
1
go.mod
|
@ -1,6 +1,7 @@
|
||||||
module meow.tf/astra/gavalink
|
module meow.tf/astra/gavalink
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/bwmarrin/discordgo v0.20.3 // indirect
|
||||||
github.com/foxbot/gavalink v0.0.0-20181105223750-6252b1245300
|
github.com/foxbot/gavalink v0.0.0-20181105223750-6252b1245300
|
||||||
github.com/gorilla/websocket v1.4.0
|
github.com/gorilla/websocket v1.4.0
|
||||||
github.com/valyala/fastjson v1.4.1
|
github.com/valyala/fastjson v1.4.1
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -1,6 +1,10 @@
|
||||||
|
github.com/bwmarrin/discordgo v0.20.3 h1:AxjcHGbyBFSC0a3Zx5nDQwbOjU7xai5dXjRnZ0YB7nU=
|
||||||
|
github.com/bwmarrin/discordgo v0.20.3/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q=
|
||||||
github.com/foxbot/gavalink v0.0.0-20181105223750-6252b1245300 h1:/p4AzwhPqvi9V0Ktsd+4jpkTpkLbrns2AyCUrylJFDo=
|
github.com/foxbot/gavalink v0.0.0-20181105223750-6252b1245300 h1:/p4AzwhPqvi9V0Ktsd+4jpkTpkLbrns2AyCUrylJFDo=
|
||||||
github.com/foxbot/gavalink v0.0.0-20181105223750-6252b1245300/go.mod h1:MDlIQ50PLaU0fUW0JcHFOxec8Q17F9byrnGi8ok5vVQ=
|
github.com/foxbot/gavalink v0.0.0-20181105223750-6252b1245300/go.mod h1:MDlIQ50PLaU0fUW0JcHFOxec8Q17F9byrnGi8ok5vVQ=
|
||||||
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE=
|
github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE=
|
||||||
github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o=
|
github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o=
|
||||||
|
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16 h1:y6ce7gCWtnH+m3dCjzQ1PCuwl28DDIc3VNnvY29DlIA=
|
||||||
|
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
|
|
13
lavalink.go
13
lavalink.go
|
@ -117,12 +117,17 @@ func (l *Lavalink) removeNode(node *Node) error {
|
||||||
|
|
||||||
node.stop()
|
node.stop()
|
||||||
|
|
||||||
|
danglingPlayers := make([]*Player, 0)
|
||||||
|
|
||||||
l.playersMu.RLock()
|
l.playersMu.RLock()
|
||||||
for _, player := range l.players {
|
for _, player := range l.players {
|
||||||
if player.node == node {
|
if player.node == node {
|
||||||
|
player.node = nil
|
||||||
|
|
||||||
n, err := l.BestNode()
|
n, err := l.BestNode()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil || n == nil {
|
||||||
|
danglingPlayers = append(danglingPlayers, player)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,6 +136,12 @@ func (l *Lavalink) removeNode(node *Node) error {
|
||||||
}
|
}
|
||||||
l.playersMu.RUnlock()
|
l.playersMu.RUnlock()
|
||||||
|
|
||||||
|
if len(danglingPlayers) > 0 {
|
||||||
|
for _, player := range danglingPlayers {
|
||||||
|
player.Destroy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// temp var for easier reading
|
// temp var for easier reading
|
||||||
n := l.nodes
|
n := l.nodes
|
||||||
z := len(n) - 1
|
z := len(n) - 1
|
||||||
|
|
15
player.go
15
player.go
|
@ -191,15 +191,14 @@ func (player *Player) ChangeNode(node *Node) error {
|
||||||
|
|
||||||
// Destroy will destroy this player
|
// Destroy will destroy this player
|
||||||
func (player *Player) Destroy() error {
|
func (player *Player) Destroy() error {
|
||||||
msg := basicMessage{
|
if player.node != nil && player.node.wsConn != nil {
|
||||||
Op: opDestroy,
|
msg := basicMessage{
|
||||||
GuildID: player.guildID,
|
Op: opDestroy,
|
||||||
}
|
GuildID: player.guildID,
|
||||||
|
}
|
||||||
|
|
||||||
err := player.node.wsConn.WriteJSON(msg)
|
// We don't actually care if this goes through, since the node/connection may be invalid anyway.
|
||||||
|
player.node.wsConn.WriteJSON(msg)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player.manager.playersMu.Lock()
|
player.manager.playersMu.Lock()
|
||||||
|
|
Loading…
Reference in New Issue