From dce288d70c9a0223088bb644b57f7a201bdbe842 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 8 Aug 2024 10:05:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ws=E6=A8=A1=E5=9D=97=E8=AE=A2=E9=98=85?= =?UTF-8?q?=E7=BB=84=E6=94=B9=E4=B8=BA=E8=AE=B0=E5=BD=95=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AFID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/ws/service/ws.impl.go | 41 +++++++++++-------------------- 1 file changed, 15 insertions(+), 26 deletions(-) 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 } } }