func (self *treeBasedConnMap) DelConn(conn server.Conn) server.Conn { self.lock.Lock() defer self.lock.Unlock() if conn == nil { return nil } cset := self.getConn(connKey(conn)) if cset == nil { return nil } cset.lock() defer cset.unlock() ret := cset.del(conn.UniqId()) if ret == nil { return ret } self.nrConn-- if cset.nrConn() == 0 { self.tree.Delete(cset) } else { self.tree.ReplaceOrInsert(cset) } return ret }
func (self *connSet) add(conn server.Conn, max int) error { for _, c := range self.list { if c.UniqId() == conn.UniqId() { return nil } } if max > 0 && len(self.list) >= max { return ErrTooManyConnForThisUser } self.list = append(self.list, conn) return nil }
func connKey(conn server.Conn) string { return conn.Username() }