You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
898 B
51 lines
898 B
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 |
|
}
|
|
|