mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-06-19 14:05:04 +08:00
update lock.
This commit is contained in:
parent
c73e2f0cc5
commit
afb0ed6368
@ -829,24 +829,6 @@ func (c *QQClient) SolveFriendRequest(req *NewFriendRequest, accept bool) {
|
||||
_ = c.send(pkt)
|
||||
}
|
||||
|
||||
func (g *GroupInfo) SelfPermission() MemberPermission {
|
||||
return g.FindMember(g.client.Uin).Permission
|
||||
}
|
||||
|
||||
func (g *GroupInfo) AdministratorOrOwner() bool {
|
||||
return g.SelfPermission() == Administrator || g.SelfPermission() == Owner
|
||||
}
|
||||
|
||||
func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo {
|
||||
for _, m := range g.Members {
|
||||
f := m
|
||||
if f.Uin == uin {
|
||||
return f
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *QQClient) getCookies() string {
|
||||
return fmt.Sprintf("uin=o%d; skey=%s;", c.Uin, c.sigInfo.sKey)
|
||||
}
|
||||
@ -914,14 +896,14 @@ func (c *QQClient) kickGroupMember(groupCode, memberUin int64, msg string) {
|
||||
}
|
||||
|
||||
func (g *GroupInfo) removeMember(uin int64) {
|
||||
g.memLock.Lock()
|
||||
defer g.memLock.Unlock()
|
||||
for i, m := range g.Members {
|
||||
if m.Uin == uin {
|
||||
g.Members = append(g.Members[:i], g.Members[i+1:]...)
|
||||
break
|
||||
g.Update(func(info *GroupInfo) {
|
||||
for i, m := range info.Members {
|
||||
if m.Uin == uin {
|
||||
info.Members = append(info.Members[:i], info.Members[i+1:]...)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (c *QQClient) connect() error {
|
||||
|
@ -29,8 +29,8 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
groupJoinLock = new(sync.Mutex)
|
||||
groupLeaveLock = new(sync.Mutex)
|
||||
groupJoinLock sync.Mutex
|
||||
groupLeaveLock sync.Mutex
|
||||
)
|
||||
|
||||
// wtlogin.login
|
||||
@ -228,7 +228,9 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
|
||||
Permission: Member,
|
||||
Group: group,
|
||||
}
|
||||
group.Members = append(group.Members, mem)
|
||||
group.Update(func(info *GroupInfo) {
|
||||
info.Members = append(info.Members, mem)
|
||||
})
|
||||
c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
||||
Group: group,
|
||||
Member: mem,
|
||||
|
@ -70,8 +70,8 @@ type (
|
||||
MaxMemberCount uint16
|
||||
Members []*GroupMemberInfo
|
||||
|
||||
client *QQClient
|
||||
memLock sync.Mutex
|
||||
client *QQClient
|
||||
lock sync.RWMutex
|
||||
}
|
||||
|
||||
GroupMemberInfo struct {
|
||||
@ -285,6 +285,42 @@ func (g *GroupInfo) Quit() {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GroupInfo) SelfPermission() MemberPermission {
|
||||
return g.FindMember(g.client.Uin).Permission
|
||||
}
|
||||
|
||||
func (g *GroupInfo) AdministratorOrOwner() bool {
|
||||
return g.SelfPermission() == Administrator || g.SelfPermission() == Owner
|
||||
}
|
||||
|
||||
func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo {
|
||||
r := g.Read(func(info *GroupInfo) interface{} {
|
||||
for _, m := range info.Members {
|
||||
f := m
|
||||
if f.Uin == uin {
|
||||
return f
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if r == nil {
|
||||
return nil
|
||||
}
|
||||
return r.(*GroupMemberInfo)
|
||||
}
|
||||
|
||||
func (g *GroupInfo) Update(f func(*GroupInfo)) {
|
||||
g.lock.Lock()
|
||||
defer g.lock.Unlock()
|
||||
f(g)
|
||||
}
|
||||
|
||||
func (g *GroupInfo) Read(f func(*GroupInfo) interface{}) interface{} {
|
||||
g.lock.RLock()
|
||||
defer g.lock.RUnlock()
|
||||
return f(g)
|
||||
}
|
||||
|
||||
func (m *GroupMemberInfo) DisplayName() string {
|
||||
if m.CardName == "" {
|
||||
return m.Nickname
|
||||
|
Loading…
x
Reference in New Issue
Block a user