package session import "sync" // NetConn 各类型连接的 write 接口 type NetConn interface { Write([]byte) error } type Channel struct { Uid string Conn NetConn groups []string // 记录 uid 对应的群组列表 lock *sync.Mutex } func NewChannel(uid string, conn NetConn) *Channel { return &Channel{ Uid: uid, Conn: conn, lock: &sync.Mutex{}, } } func (c *Channel) GroupJoin(gid string) { c.lock.Lock() defer c.lock.Unlock() for _, g := range c.groups { if g == gid { // 已加入 return } } c.groups = append(c.groups, gid) } func (c *Channel) GroupLeave(gid string) { c.lock.Lock() defer c.lock.Unlock() for i := 0; i < len(c.groups); i++ { if c.groups[i] == gid { // 从i前移一位 copy(c.groups[i:], c.groups[i+1:]) c.groups = c.groups[0 : len(c.groups)-1] return } } } func (c *Channel) Groups() []string { return c.groups }