diff --git a/src/modules/ws/service/ws.impl.go b/src/modules/ws/service/ws.impl.go index da16419e..33307ba2 100644 --- a/src/modules/ws/service/ws.impl.go +++ b/src/modules/ws/service/ws.impl.go @@ -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 } } }