1
0
Fork 0
forked from External/grumble

Remove temporary channels when the last client leaves.

This commit is contained in:
Mikkel Krautz 2011-11-13 01:27:02 +01:00
parent f5008c12e5
commit 83fe0c737e
4 changed files with 31 additions and 12 deletions

View file

@ -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
}