forked from External/grumble
Remove temporary channels when the last client leaves.
This commit is contained in:
parent
f5008c12e5
commit
83fe0c737e
4 changed files with 31 additions and 12 deletions
13
server.go
13
server.go
|
|
@ -69,6 +69,7 @@ type Server struct {
|
|||
incoming chan *Message
|
||||
voicebroadcast chan *VoiceBroadcast
|
||||
cfgUpdate chan *KeyValuePair
|
||||
tempRemove chan *Channel
|
||||
|
||||
// Signals to the server that a client has been successfully
|
||||
// authenticated.
|
||||
|
|
@ -388,6 +389,11 @@ func (server *Server) handlerLoop() {
|
|||
|
||||
target.SendVoiceBroadcast(vb)
|
||||
}
|
||||
// Remove a temporary channel
|
||||
case tempChannel := <- server.tempRemove:
|
||||
if tempChannel.IsEmpty() {
|
||||
server.RemoveChannel(tempChannel)
|
||||
}
|
||||
// Finish client authentication. Send post-authentication
|
||||
// server info.
|
||||
case client := <-server.clientAuthenticated:
|
||||
|
|
@ -1001,6 +1007,9 @@ func (server *Server) userEnterChannel(client *Client, channel *Channel, usersta
|
|||
oldchan := client.Channel
|
||||
if oldchan != nil {
|
||||
oldchan.RemoveClient(client)
|
||||
if oldchan.IsTemporary() && oldchan.IsEmpty() {
|
||||
server.tempRemove <- oldchan
|
||||
}
|
||||
}
|
||||
channel.AddClient(client)
|
||||
|
||||
|
|
@ -1008,8 +1017,6 @@ func (server *Server) userEnterChannel(client *Client, channel *Channel, usersta
|
|||
|
||||
server.UpdateFrozenUserLastChannel(client)
|
||||
|
||||
// fixme(mkrautz): Remove channel if temporary
|
||||
|
||||
canspeak := server.HasPermission(client, channel, SpeakPermission)
|
||||
if canspeak == client.Suppress {
|
||||
client.Suppress = !canspeak
|
||||
|
|
@ -1262,6 +1269,7 @@ func (server *Server) initPerLaunchData() {
|
|||
server.incoming = make(chan *Message)
|
||||
server.voicebroadcast = make(chan *VoiceBroadcast)
|
||||
server.cfgUpdate = make(chan *KeyValuePair)
|
||||
server.tempRemove = make(chan *Channel, 1)
|
||||
server.clientAuthenticated = make(chan *Client)
|
||||
}
|
||||
|
||||
|
|
@ -1276,6 +1284,7 @@ func (server *Server) cleanPerLaunchData() {
|
|||
server.incoming = nil
|
||||
server.voicebroadcast = nil
|
||||
server.cfgUpdate = nil
|
||||
server.tempRemove = nil
|
||||
server.clientAuthenticated = nil
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue