Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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
}
Ejemplo n.º 3
0
func connKey(conn server.Conn) string {
	return conn.Username()
}