fix: ws模块订阅组改为记录客户端ID

This commit is contained in:
TsMask
2024-08-08 10:05:13 +08:00
parent 0d312e61fa
commit dce288d70c

View File

@@ -16,7 +16,7 @@ import (
var (
wsClients sync.Map // ws客户端 [clientId: client]
wsUsers sync.Map // ws用户对应的多个客户端id [uid:clientIds]
wsGroup sync.Map // ws组对应的多个用户id [groupID:uids]
wsGroup sync.Map // ws组对应的多个客户端id [groupId:clientIds]
)
// NewWSImpl 实例化服务层 WSImpl 结构体
@@ -85,20 +85,10 @@ func (s *WSImpl) ClientCreate(uid string, groupIDs []string, conn *websocket.Con
if uid != "" && len(groupIDs) > 0 {
for _, groupID := range groupIDs {
if v, ok := wsGroup.Load(groupID); ok {
groupUIDs := v.(*[]string)
// 避免同组内相同用户
hasUid := false
for _, uidv := range *groupUIDs {
if uidv == uid {
hasUid = true
break
}
}
if !hasUid {
*groupUIDs = append(*groupUIDs, uid)
}
groupClientIds := v.(*[]string)
*groupClientIds = append(*groupClientIds, clientID)
} else {
wsGroup.Store(groupID, &[]string{uid})
wsGroup.Store(groupID, &[]string{clientID})
}
}
}
@@ -123,8 +113,8 @@ func (s *WSImpl) ClientClose(clientID string) {
// 客户端断线时自动踢出Uid绑定列表
if client.BindUid != "" {
if clientIds, ok := wsUsers.Load(client.BindUid); ok {
uidClientIds := clientIds.(*[]string)
if v, ok := wsUsers.Load(client.BindUid); ok {
uidClientIds := v.(*[]string)
if len(*uidClientIds) > 0 {
tempClientIds := make([]string, 0, len(*uidClientIds))
for _, v := range *uidClientIds {
@@ -138,22 +128,21 @@ func (s *WSImpl) ClientClose(clientID string) {
}
// 客户端断线时自动踢出已加入的组
if client.BindUid != "" && len(client.SubGroup) > 0 {
if len(client.SubGroup) > 0 {
for _, groupID := range client.SubGroup {
uids, ok := wsGroup.Load(groupID)
v, ok := wsGroup.Load(groupID)
if !ok {
continue
}
groupUIDs := uids.(*[]string)
if len(*groupUIDs) > 0 {
tempUIDs := make([]string, 0, len(*groupUIDs))
for _, v := range *groupUIDs {
if v != client.BindUid {
tempUIDs = append(tempUIDs, v)
groupClientIds := v.(*[]string)
if len(*groupClientIds) > 0 {
tempClientIds := make([]string, 0, len(*groupClientIds))
for _, v := range *groupClientIds {
if v != client.ID {
tempClientIds = append(tempClientIds, v)
}
}
*groupUIDs = tempUIDs
*groupClientIds = tempClientIds
}
}
}