From a99dbf634b3064dd7174d4a3e5e4e6e4069a602a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 14:21:03 +0800 Subject: [PATCH 01/12] callback fix --- internal/push/logic/callback.go | 7 ++++--- internal/rpc/msg/callback.go | 6 ++++-- pkg/common/callback/callback.go | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 pkg/common/callback/callback.go diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index 5c3c317bf..44f703ef8 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -2,6 +2,7 @@ package logic import ( cbApi "Open_IM/pkg/call_back_struct" + "Open_IM/pkg/common/callback" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/http" @@ -32,7 +33,7 @@ func callbackOfflinePush(operationID string, userIDList []string, msg *commonPb. ContentType: msg.ContentType, SessionType: msg.SessionType, AtUserIDList: msg.AtUserIDList, - Content: string(msg.Content), + Content: callback.GetContent(msg), } resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil { @@ -74,7 +75,7 @@ func callbackOnlinePush(operationID string, userIDList []string, msg *commonPb.M ContentType: msg.ContentType, SessionType: msg.SessionType, AtUserIDList: msg.AtUserIDList, - Content: string(msg.Content), + Content: callback.GetContent(msg), } resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackOnlinePush.CallbackTimeOut); err != nil { @@ -110,7 +111,7 @@ func callbackBeforeSuperGroupOnlinePush(operationID string, groupID string, msg ContentType: msg.ContentType, SessionType: msg.SessionType, AtUserIDList: msg.AtUserIDList, - Content: string(msg.Content), + Content: callback.GetContent(msg), } resp := &cbApi.CallbackBeforeSuperGroupOnlinePushResp{CommonCallbackResp: &callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.CallbackTimeOut); err != nil { diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index f53ee327d..ba03998a5 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -2,6 +2,7 @@ package msg import ( cbApi "Open_IM/pkg/call_back_struct" + "Open_IM/pkg/common/callback" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/http" @@ -12,7 +13,7 @@ import ( ) func copyCallbackCommonReqStruct(msg *pbChat.SendMsgReq) cbApi.CommonCallbackReq { - return cbApi.CommonCallbackReq{ + req := cbApi.CommonCallbackReq{ SendID: msg.MsgData.SendID, ServerMsgID: msg.MsgData.ServerMsgID, ClientMsgID: msg.MsgData.ClientMsgID, @@ -24,10 +25,11 @@ func copyCallbackCommonReqStruct(msg *pbChat.SendMsgReq) cbApi.CommonCallbackReq ContentType: msg.MsgData.ContentType, Status: msg.MsgData.Status, CreateTime: msg.MsgData.CreateTime, - Content: string(msg.MsgData.Content), AtUserIDList: msg.MsgData.AtUserIDList, SenderFaceURL: msg.MsgData.SenderFaceURL, + Content: callback.GetContent(msg.MsgData), } + return req } func callbackBeforeSendSingleMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { diff --git a/pkg/common/callback/callback.go b/pkg/common/callback/callback.go new file mode 100644 index 000000000..676a62a52 --- /dev/null +++ b/pkg/common/callback/callback.go @@ -0,0 +1,24 @@ +package callback + +import ( + "Open_IM/pkg/common/constant" + server_api_params "Open_IM/pkg/proto/sdk_ws" + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" +) + +func GetContent(msg *server_api_params.MsgData) string { + if msg.ContentType >= constant.NotificationBegin && msg.ContentType <= constant.NotificationEnd { + var tips server_api_params.TipsComm + _ = proto.Unmarshal(msg.Content, &tips) + marshaler := jsonpb.Marshaler{ + OrigName: true, + EnumsAsInts: false, + EmitDefaults: false, + } + content, _ := marshaler.MarshalToString(&tips) + return content + } else { + return string(msg.Content) + } +} From ca7bba33e62a422d6f18810cb789db00e41db132 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 4 Aug 2022 14:46:30 +0800 Subject: [PATCH 02/12] docker-compose file update --- internal/msg_gateway/gate/ws_server.go | 2 +- .../constant/platform_number_id_to_name.go | 64 +++++++++++-------- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 53942155f..6b6c7ee51 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -230,7 +230,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn log.NewError(operationID, "conn close err", err.Error(), uid, platformID) } } else { - log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[platformID]) + log.NewWarn(operationID, "normal uid-conn ", uid, platformID, oldConnMap[platformID]) } } else { diff --git a/pkg/common/constant/platform_number_id_to_name.go b/pkg/common/constant/platform_number_id_to_name.go index cac93dea8..0480db01b 100644 --- a/pkg/common/constant/platform_number_id_to_name.go +++ b/pkg/common/constant/platform_number_id_to_name.go @@ -5,22 +5,26 @@ package constant const ( //Platform ID - IOSPlatformID = 1 - AndroidPlatformID = 2 - WindowsPlatformID = 3 - OSXPlatformID = 4 - WebPlatformID = 5 - MiniWebPlatformID = 6 - LinuxPlatformID = 7 + IOSPlatformID = 1 + AndroidPlatformID = 2 + WindowsPlatformID = 3 + OSXPlatformID = 4 + WebPlatformID = 5 + MiniWebPlatformID = 6 + LinuxPlatformID = 7 + AndroidPadPlatformID = 8 + IPadPlatformID = 9 //Platform string match to Platform ID - IOSPlatformStr = "IOS" - AndroidPlatformStr = "Android" - WindowsPlatformStr = "Windows" - OSXPlatformStr = "OSX" - WebPlatformStr = "Web" - MiniWebPlatformStr = "MiniWeb" - LinuxPlatformStr = "Linux" + IOSPlatformStr = "IOS" + AndroidPlatformStr = "Android" + WindowsPlatformStr = "Windows" + OSXPlatformStr = "OSX" + WebPlatformStr = "Web" + MiniWebPlatformStr = "MiniWeb" + LinuxPlatformStr = "Linux" + AndroidPadPlatformStr = "APad" + IPadPlatformStr = "IPad" //terminal types TerminalPC = "PC" @@ -28,22 +32,26 @@ const ( ) var PlatformID2Name = map[int]string{ - IOSPlatformID: IOSPlatformStr, - AndroidPlatformID: AndroidPlatformStr, - WindowsPlatformID: WindowsPlatformStr, - OSXPlatformID: OSXPlatformStr, - WebPlatformID: WebPlatformStr, - MiniWebPlatformID: MiniWebPlatformStr, - LinuxPlatformID: LinuxPlatformStr, + IOSPlatformID: IOSPlatformStr, + AndroidPlatformID: AndroidPlatformStr, + WindowsPlatformID: WindowsPlatformStr, + OSXPlatformID: OSXPlatformStr, + WebPlatformID: WebPlatformStr, + MiniWebPlatformID: MiniWebPlatformStr, + LinuxPlatformID: LinuxPlatformStr, + AndroidPadPlatformID: AndroidPadPlatformStr, + IPadPlatformID: IPadPlatformStr, } var PlatformName2ID = map[string]int{ - IOSPlatformStr: IOSPlatformID, - AndroidPlatformStr: AndroidPlatformID, - WindowsPlatformStr: WindowsPlatformID, - OSXPlatformStr: OSXPlatformID, - WebPlatformStr: WebPlatformID, - MiniWebPlatformStr: MiniWebPlatformID, - LinuxPlatformStr: LinuxPlatformID, + IOSPlatformStr: IOSPlatformID, + AndroidPlatformStr: AndroidPlatformID, + WindowsPlatformStr: WindowsPlatformID, + OSXPlatformStr: OSXPlatformID, + WebPlatformStr: WebPlatformID, + MiniWebPlatformStr: MiniWebPlatformID, + LinuxPlatformStr: LinuxPlatformID, + AndroidPadPlatformStr: AndroidPadPlatformID, + IPadPlatformStr: IPadPlatformID, } var Platform2class = map[string]string{ IOSPlatformStr: TerminalMobile, From 0117e96d5b20ce82fb03d9c567e5a79baef52383 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 4 Aug 2022 16:27:39 +0800 Subject: [PATCH 03/12] callback msg content --- pkg/common/callback/callback.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pkg/common/callback/callback.go b/pkg/common/callback/callback.go index 676a62a52..fa19e7961 100644 --- a/pkg/common/callback/callback.go +++ b/pkg/common/callback/callback.go @@ -3,7 +3,6 @@ package callback import ( "Open_IM/pkg/common/constant" server_api_params "Open_IM/pkg/proto/sdk_ws" - "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" ) @@ -11,12 +10,12 @@ func GetContent(msg *server_api_params.MsgData) string { if msg.ContentType >= constant.NotificationBegin && msg.ContentType <= constant.NotificationEnd { var tips server_api_params.TipsComm _ = proto.Unmarshal(msg.Content, &tips) - marshaler := jsonpb.Marshaler{ - OrigName: true, - EnumsAsInts: false, - EmitDefaults: false, - } - content, _ := marshaler.MarshalToString(&tips) + //marshaler := jsonpb.Marshaler{ + // OrigName: true, + // EnumsAsInts: false, + // EmitDefaults: false, + //} + content := tips.JsonDetail return content } else { return string(msg.Content) From 231d4db71d8c50672638fc6103098debb66a6d4c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 4 Aug 2022 16:36:50 +0800 Subject: [PATCH 04/12] callback msg content --- internal/msg_gateway/gate/ws_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 6b6c7ee51..b97e552e8 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -196,7 +196,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] if oldConn, ok := oldConnMap[platformID]; ok { log.NewDebug(operationID, uid, platformID, "kick old conn") - // ws.sendKickMsg(oldConn, newConn) + ws.sendKickMsg(oldConn, newConn) m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) if err != nil && err != go_redis.Nil { log.NewError(operationID, "get token from redis err", err.Error(), uid, constant.PlatformIDToName(platformID)) From 3d0827a6da22a2bc3b659a192f5ca68ad31ee8ee Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 17:20:33 +0800 Subject: [PATCH 05/12] callback fix --- internal/rpc/group/group.go | 143 ++++++++++++++--------- internal/rpc/user/user.go | 15 ++- pkg/base_info/group_api_struct.go | 2 + pkg/common/constant/constant.go | 7 ++ pkg/common/db/RedisModel.go | 6 + pkg/common/db/rocks_cache/rocks_cache.go | 43 ++++++- 6 files changed, 158 insertions(+), 58 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index d6d9e2a9f..640b7eb07 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -467,9 +467,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), userID) } } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) - } + chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) } else { for _, v := range req.InvitedUserIDList { @@ -491,7 +489,6 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) { log.NewInfo(req.OperationID, "GetGroupAllMember, args ", req.String()) var resp pbGroup.GetGroupAllMemberResp - //groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) groupInfo, err := rocksCache.GetGroupInfoFromCache(req.GroupID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) @@ -500,7 +497,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro return &resp, nil } if groupInfo.GroupType != constant.SuperGroup { - memberList, err := rocksCache.GetAllGroupMembersInfoFromCache(req.GroupID) + memberList, err := rocksCache.GetGroupMembersInfoFromCache(req.Count, req.Offset, req.GroupID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) resp.ErrCode = constant.ErrDB.ErrCode @@ -693,10 +690,11 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), userID) } + if err := rocksCache.DelGroupMemberInfoFromCache(req.GroupID, userID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + } } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) - } + chat.MemberKickedNotification(req, okUserIDList) } else { for _, userID := range okUserIDList { @@ -721,22 +719,35 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String()) var resp pbGroup.GetGroupMembersInfoResp resp.MemberList = []*open_im_sdk.GroupMemberFullInfo{} - groupMembers, err := rocksCache.GetAllGroupMembersInfoFromCache(req.GroupID) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, err.Error()) - resp.ErrCode = constant.ErrDB.ErrCode - resp.ErrMsg = constant.ErrDB.ErrMsg - return &resp, nil - } - for _, member := range groupMembers { - if utils.IsContain(member.UserID, req.MemberList) { - var memberNode open_im_sdk.GroupMemberFullInfo - utils.CopyStructFields(&memberNode, member) - memberNode.JoinTime = int32(member.JoinTime.Unix()) - resp.MemberList = append(resp.MemberList, &memberNode) + + for _, userID := range req.MemberList { + groupMember, err := rocksCache.GetGroupMemberInfoFromCache(req.GroupID, userID, "") + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, userID, err.Error()) + continue } + var memberNode open_im_sdk.GroupMemberFullInfo + utils.CopyStructFields(&memberNode, groupMember) + memberNode.JoinTime = int32(groupMember.JoinTime.Unix()) + resp.MemberList = append(resp.MemberList, &memberNode) } + //groupMembers, err := rocksCache.GetAllGroupMembersInfoFromCache(req.GroupID) + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, err.Error()) + // resp.ErrCode = constant.ErrDB.ErrCode + // resp.ErrMsg = constant.ErrDB.ErrMsg + // return &resp, nil + //} + //for _, member := range groupMembers { + // if utils.IsContain(member.UserID, req.MemberList) { + // var memberNode open_im_sdk.GroupMemberFullInfo + // utils.CopyStructFields(&memberNode, member) + // memberNode.JoinTime = int32(member.JoinTime.Unix()) + // resp.MemberList = append(resp.MemberList, &memberNode) + // } + //} + resp.ErrCode = 0 log.NewInfo(req.OperationID, "GetGroupMembersInfo rpc return ", resp.String()) return &resp, nil @@ -899,17 +910,17 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - group, err := rocksCache.GetGroupInfoFromCache(req.GroupID) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, err.Error()) - } - if group != nil { - if group.GroupType != constant.SuperGroup { - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) - } - } - } + //group, err := rocksCache.GetGroupInfoFromCache(req.GroupID) + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, err.Error()) + //} + //if group != nil { + // if group.GroupType != constant.SuperGroup { + // if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + // } + // } + //} chat.GroupApplicationAcceptedNotification(req) chat.MemberEnterNotification(req) @@ -987,10 +998,10 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) } - err = rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - } + //err = rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID) + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + //} chat.MemberEnterDirectlyNotification(req.GroupID, req.OpUserID, req.OperationID) log.NewInfo(req.OperationID, "JoinGroup rpc return ") @@ -1100,7 +1111,10 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) } if groupInfo.GroupType != constant.SuperGroup { - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + //} + if err := rocksCache.DelGroupMemberInfoFromCache(req.GroupID, req.OpUserID); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) } if err := rocksCache.DelJoinedGroupIDListFromCache(req.OpUserID); err != nil { @@ -1304,8 +1318,16 @@ func (s *groupServer) TransferGroupOwner(_ context.Context, req *pbGroup.Transfe log.NewError(req.OperationID, "UpdateGroupMemberInfo failed ", groupMemberInfo) return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, err.Error()) + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, err.Error()) + //} + err = rocksCache.DelGroupMemberInfoFromCache(req.GroupID, req.NewOwnerUserID) + if err != nil { + log.NewError(req.OperationID, "DelGroupMemberInfoFromCache failed ", req.GroupID, req.NewOwnerUserID) + } + err = rocksCache.DelGroupMemberInfoFromCache(req.GroupID, req.OldOwnerUserID) + if err != nil { + log.NewError(req.OperationID, "DelGroupMemberInfoFromCache failed ", req.GroupID, req.OldOwnerUserID) } chat.GroupOwnerTransferredNotification(req) return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil @@ -1581,8 +1603,13 @@ func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.Remo log.NewError(req.OperationID, "DelGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String()) return resp, http.WrapError(constant.ErrDB) } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupId); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupId) + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupId); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupId) + //} + for _, userID := range resp.Success { + if err := rocksCache.DelGroupMemberInfoFromCache(req.GroupId, userID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupId, userID) + } } chat.MemberKickedNotification(reqKick, resp.Success) @@ -1643,9 +1670,9 @@ func (s *groupServer) AddGroupMembersCMS(_ context.Context, req *pbGroup.AddGrou log.NewError(req.OperationId, "DelGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String()) return resp, http.WrapError(constant.ErrDB) } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupId); err != nil { - log.NewError(req.OperationId, utils.GetSelfFuncName(), err.Error(), req.GroupId) - } + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupId); err != nil { + // log.NewError(req.OperationId, utils.GetSelfFuncName(), err.Error(), req.GroupId) + //} chat.MemberInvitedNotification(req.OperationId, req.GroupId, req.OpUserId, "admin add you to group", resp.Success) return resp, nil @@ -1767,9 +1794,9 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou log.NewError(req.OperationID, "DelGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String()) return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: cacheResp.CommonResp.ErrCode, ErrMsg: cacheResp.CommonResp.ErrMsg}}, nil } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) - } + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + //} log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}) return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil } @@ -1815,7 +1842,10 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo) return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + //} + if err := rocksCache.DelGroupMemberInfoFromCache(req.GroupID, req.UserID); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) } chat.GroupMemberMutedNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, req.MutedSeconds) @@ -1859,7 +1889,10 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo) return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + //} + if err := rocksCache.DelGroupMemberInfoFromCache(req.GroupID, req.UserID); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) } chat.GroupMemberCancelMutedNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) @@ -1979,7 +2012,10 @@ func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.S log.Error(req.OperationID, errMsg) return &pbGroup.SetGroupMemberNicknameResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + //} + if err := rocksCache.DelGroupMemberInfoFromCache(req.GroupID, req.UserID); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) } chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) @@ -2014,8 +2050,11 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg + ":" + err.Error() return resp, nil } - if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + //if err := rocksCache.DelAllGroupMembersInfoFromCache(req.GroupID); err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + //} + if err := rocksCache.DelGroupMemberInfoFromCache(req.GroupID, req.UserID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID, req.UserID) } if req.RoleLevel != nil { switch req.RoleLevel.Value { diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 47f6036bf..57a456d4e 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -482,8 +482,12 @@ func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string, log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupMemberInfo) continue } - if err := rocksCache.DelAllGroupMembersInfoFromCache(groupID); err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID) + //if err := rocksCache.DelAllGroupMembersInfoFromCache(groupID); err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID) + // continue + //} + if err := rocksCache.DelGroupMemberInfoFromCache(groupID, userID); err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID, userID) continue } chat.GroupMemberInfoSetNotification(operationID, opUserID, groupID, userID) @@ -508,9 +512,12 @@ func (s *userServer) SyncJoinedGroupMemberNickname(userID string, newNickname, o log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupMemberInfo) continue } - if err := rocksCache.DelAllGroupMembersInfoFromCache(v); err != nil { + //if err := rocksCache.DelAllGroupMembersInfoFromCache(v); err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), v) + // continue + //} + if err := rocksCache.DelGroupMemberInfoFromCache(v, userID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), v) - continue } chat.GroupMemberInfoSetNotification(operationID, opUserID, v, userID) } diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index 6ba6b2d52..7424a843d 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -73,6 +73,8 @@ type GetGroupMemberListResp struct { type GetGroupAllMemberReq struct { GroupID string `json:"groupID" binding:"required"` OperationID string `json:"operationID" binding:"required"` + Offset int `json:"offset"` + Count int `json:"count"` } type GetGroupAllMemberResp struct { CommResp diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 25e2fe3dc..a542560da 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -225,6 +225,13 @@ const ( WorkMomentLikeNotification = 1 WorkMomentAtUserNotification = 2 ) + +const ( + // diffusionType + WriteDiffusion = 0 + ReadDiffusion = 1 +) + const ( AtAllString = "AtAllTag" AtNormal = 0 diff --git a/pkg/common/db/RedisModel.go b/pkg/common/db/RedisModel.go index 2ef11d59b..b4dfd6139 100644 --- a/pkg/common/db/RedisModel.go +++ b/pkg/common/db/RedisModel.go @@ -34,6 +34,7 @@ const ( FcmToken = "FCM_TOKEN:" groupUserMinSeq = "GROUP_USER_MIN_SEQ:" groupMaxSeq = "GROUP_MAX_SEQ:" + groupMinSeq = "GROUP_MIN_SEQ:" sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:" ) @@ -115,6 +116,11 @@ func (d *DataBases) SetGroupMaxSeq(groupID string, maxSeq uint64) error { return d.RDB.Set(context.Background(), key, maxSeq, 0).Err() } +func (d *DataBases) SetGroupMinSeq(groupID string, minSeq uint32) error { + key := groupMinSeq + groupID + return d.RDB.Set(context.Background(), key, minSeq, 0).Err() +} + //Store userid and platform class to redis func (d *DataBases) AddTokenFlag(userID string, platformID int, token string, flag int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index 033731e8d..2300d051d 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -186,7 +186,7 @@ func DelUserInfoFromCache(userID string) error { return db.DB.Rc.TagAsDeleted(userInfoCache + userID) } -func GetGroupMemberInfoFromCache(groupID, userID string) (*db.GroupMember, error) { +func GetGroupMemberInfoFromCache(groupID, userID, fullKey string) (*db.GroupMember, error) { getGroupMemberInfo := func() (string, error) { groupMemberInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID) if err != nil { @@ -195,7 +195,10 @@ func GetGroupMemberInfoFromCache(groupID, userID string) (*db.GroupMember, error bytes, err := json.Marshal(groupMemberInfo) return string(bytes), utils.Wrap(err, "") } - groupMemberInfoStr, err := db.DB.Rc.Fetch(groupMemberInfoCache+groupID+"-"+userID, time.Second*30*60, getGroupMemberInfo) + if fullKey == "" { + fullKey = groupMemberInfoCache + groupID + "-" + userID + } + groupMemberInfoStr, err := db.DB.Rc.Fetch(fullKey, time.Second*30*60, getGroupMemberInfo) if err != nil { return nil, utils.Wrap(err, "") } @@ -208,6 +211,42 @@ func DelGroupMemberInfoFromCache(groupID, userID string) error { return db.DB.Rc.TagAsDeleted(groupMemberInfoCache + groupID + "-" + userID) } +func GetGroupMembersInfoFromCache(count, offset int32, groupID string) ([]*db.GroupMember, error) { + var cursor uint64 + var err error + var keys []string + key := groupMemberInfoCache + groupID + "-" + if count != 0 { + keys, cursor, err = db.DB.RDB.Scan(context.Background(), uint64(offset), key, int64(count)).Result() + if err != nil { + return nil, err + } + } else { + for { + var currentKeys []string + currentKeys, cursor, err = db.DB.RDB.Scan(context.Background(), cursor, key, 3000).Result() + if err != nil { + return nil, err + } + keys = append(keys, currentKeys...) + if cursor == 0 { + break + } + } + } + + var groupMemberList []*db.GroupMember + for _, key := range keys { + v, err := GetGroupMemberInfoFromCache("", "", key) + if err != nil { + log.NewError("", utils.GetSelfFuncName(), key, err.Error()) + continue + } + groupMemberList = append(groupMemberList, v) + } + return groupMemberList, nil +} + func GetAllGroupMembersInfoFromCache(groupID string) ([]*db.GroupMember, error) { getGroupMemberInfo := func() (string, error) { groupMembers, err := imdb.GetGroupMemberListByGroupID(groupID) From 0f655e9292045002579e22a17ae78f1321793c64 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 17:23:21 +0800 Subject: [PATCH 06/12] callback fix --- pkg/common/db/rocks_cache/rocks_cache.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index 2300d051d..6f8cfe562 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -214,17 +214,18 @@ func DelGroupMemberInfoFromCache(groupID, userID string) error { func GetGroupMembersInfoFromCache(count, offset int32, groupID string) ([]*db.GroupMember, error) { var cursor uint64 var err error - var keys []string + var keys, currentKeys []string key := groupMemberInfoCache + groupID + "-" if count != 0 { keys, cursor, err = db.DB.RDB.Scan(context.Background(), uint64(offset), key, int64(count)).Result() if err != nil { return nil, err } + keys = append(keys, currentKeys...) } else { for { var currentKeys []string - currentKeys, cursor, err = db.DB.RDB.Scan(context.Background(), cursor, key, 3000).Result() + currentKeys, cursor, err = db.DB.RDB.Scan(context.Background(), cursor, key, int64(count)).Result() if err != nil { return nil, err } From db547d60dfc8f129bfddedd4b36b054dde51a6d4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 18:24:17 +0800 Subject: [PATCH 07/12] callback fix --- internal/rpc/group/group.go | 2 +- pkg/common/db/rocks_cache/rocks_cache.go | 64 +++++++++++------------- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 640b7eb07..a86398ee1 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -721,7 +721,7 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG resp.MemberList = []*open_im_sdk.GroupMemberFullInfo{} for _, userID := range req.MemberList { - groupMember, err := rocksCache.GetGroupMemberInfoFromCache(req.GroupID, userID, "") + groupMember, err := rocksCache.GetGroupMemberInfoFromCache(req.GroupID, userID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, userID, err.Error()) continue diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index 6f8cfe562..0227869a3 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -186,7 +186,7 @@ func DelUserInfoFromCache(userID string) error { return db.DB.Rc.TagAsDeleted(userInfoCache + userID) } -func GetGroupMemberInfoFromCache(groupID, userID, fullKey string) (*db.GroupMember, error) { +func GetGroupMemberInfoFromCache(groupID, userID string) (*db.GroupMember, error) { getGroupMemberInfo := func() (string, error) { groupMemberInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID) if err != nil { @@ -195,10 +195,7 @@ func GetGroupMemberInfoFromCache(groupID, userID, fullKey string) (*db.GroupMemb bytes, err := json.Marshal(groupMemberInfo) return string(bytes), utils.Wrap(err, "") } - if fullKey == "" { - fullKey = groupMemberInfoCache + groupID + "-" + userID - } - groupMemberInfoStr, err := db.DB.Rc.Fetch(fullKey, time.Second*30*60, getGroupMemberInfo) + groupMemberInfoStr, err := db.DB.Rc.Fetch(groupMemberInfoCache+groupID+"-"+userID, time.Second*30*60, getGroupMemberInfo) if err != nil { return nil, utils.Wrap(err, "") } @@ -212,38 +209,37 @@ func DelGroupMemberInfoFromCache(groupID, userID string) error { } func GetGroupMembersInfoFromCache(count, offset int32, groupID string) ([]*db.GroupMember, error) { - var cursor uint64 - var err error - var keys, currentKeys []string - key := groupMemberInfoCache + groupID + "-" - if count != 0 { - keys, cursor, err = db.DB.RDB.Scan(context.Background(), uint64(offset), key, int64(count)).Result() - if err != nil { - return nil, err - } - keys = append(keys, currentKeys...) - } else { - for { - var currentKeys []string - currentKeys, cursor, err = db.DB.RDB.Scan(context.Background(), cursor, key, int64(count)).Result() - if err != nil { - return nil, err - } - keys = append(keys, currentKeys...) - if cursor == 0 { - break - } - } + groupMemberIDList, err := GetGroupMemberIDListFromCache(groupID) + if err != nil { + return nil, err + } + if count < 0 || offset < 0 { + return nil, nil } - var groupMemberList []*db.GroupMember - for _, key := range keys { - v, err := GetGroupMemberInfoFromCache("", "", key) - if err != nil { - log.NewError("", utils.GetSelfFuncName(), key, err.Error()) - continue + if count != 0 { + l := int32(len(groupMemberIDList)) + var start, stop int32 + start = offset + stop = offset + count + if start > stop { + return nil, nil } - groupMemberList = append(groupMemberList, v) + if start >= l { + return nil, nil + } + if stop >= l { + stop = l + } + groupMemberIDList = groupMemberIDList[start:stop] + } + log.NewDebug("", utils.GetSelfFuncName(), "ID list: ", groupMemberIDList) + for _, userID := range groupMemberIDList { + groupMembers, err := GetGroupMemberInfoFromCache(groupID, userID) + if err != nil { + log.NewError("", utils.GetSelfFuncName(), err.Error(), groupID, userID) + } + groupMemberList = append(groupMemberList, groupMembers) } return groupMemberList, nil } From 576348b1f26582f300f7e158508fcf3699d6d1f7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 18:55:38 +0800 Subject: [PATCH 08/12] callback fix --- pkg/common/db/rocks_cache/rocks_cache.go | 29 +++++++++++++++--------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index 0227869a3..9d91aad66 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -217,23 +217,30 @@ func GetGroupMembersInfoFromCache(count, offset int32, groupID string) ([]*db.Gr return nil, nil } var groupMemberList []*db.GroupMember + var start, stop int32 + start = offset + stop = offset + count + l := int32(len(groupMemberIDList)) + if start > stop { + return nil, nil + } + if start >= l { + return nil, nil + } if count != 0 { - l := int32(len(groupMemberIDList)) - var start, stop int32 - start = offset - stop = offset + count - if start > stop { - return nil, nil - } - if start >= l { - return nil, nil - } if stop >= l { stop = l } groupMemberIDList = groupMemberIDList[start:stop] + } else { + if l < 1000 { + stop = l + } else { + stop = 1000 + } + groupMemberIDList = groupMemberIDList[start:stop] } - log.NewDebug("", utils.GetSelfFuncName(), "ID list: ", groupMemberIDList) + //log.NewDebug("", utils.GetSelfFuncName(), "ID list: ", groupMemberIDList) for _, userID := range groupMemberIDList { groupMembers, err := GetGroupMemberInfoFromCache(groupID, userID) if err != nil { From 4e69ff196a7fa6bfd0e08d3cebce9b9f36a9578c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 19:08:08 +0800 Subject: [PATCH 09/12] cache get group --- internal/rpc/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index a86398ee1..8e279d82b 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -510,7 +510,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro resp.MemberList = append(resp.MemberList, &node) } } - log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String()) + log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", len(resp.MemberList)) return &resp, nil } From 91a767b4fb72d2c31e528b4bd52d8327b12c85bc Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 19:18:31 +0800 Subject: [PATCH 10/12] callback fix --- internal/api/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index ac4e43b41..925b33c26 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -239,7 +239,7 @@ func GetGroupAllMemberList(c *gin.Context) { memberListResp := api.GetGroupAllMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, MemberList: RpcResp.MemberList} memberListResp.Data = jsonData.JsonDataList(memberListResp.MemberList) - log.NewInfo(req.OperationID, "GetGroupAllMember api return ", memberListResp) + log.NewInfo(req.OperationID, "GetGroupAllMember api return ", len(memberListResp.MemberList)) c.JSON(http.StatusOK, memberListResp) } From 10c0f3075a7979592b3a75abd1af9fe38ca7dca6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 5 Aug 2022 12:08:00 +0800 Subject: [PATCH 11/12] unread bug fix --- internal/rpc/conversation/conversaion.go | 15 +++++++++++---- internal/rpc/msg/conversation_notification.go | 12 ++++++++++++ internal/rpc/msg/send_msg.go | 2 +- pkg/common/constant/constant.go | 1 + pkg/proto/sdk_ws/ws.proto | 1 + 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index 77fc58e63..2828a9df5 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -30,6 +30,7 @@ func (rpc *rpcConversation) ModifyConversationField(c context.Context, req *pbCo log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) resp := &pbConversation.ModifyConversationFieldResp{} var err error + isSyncConversation := true if req.Conversation.ConversationType == constant.GroupChatType { groupInfo, err := imdb.GetGroupInfoByGroupID(req.Conversation.GroupID) if err != nil { @@ -71,8 +72,7 @@ func (rpc *rpcConversation) ModifyConversationField(c context.Context, req *pbCo case constant.FieldAttachedInfo: err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"attached_info": conversation.AttachedInfo}) case constant.FieldUnread: - err = imdb.UpdateColumnsConversations(haveUserID, req.Conversation.ConversationID, map[string]interface{}{"unread_count": conversation.UnreadCount}) - + isSyncConversation = false } if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateColumnsConversations error", err.Error()) @@ -97,9 +97,16 @@ func (rpc *rpcConversation) ModifyConversationField(c context.Context, req *pbCo return resp, nil } } else { - for _, v := range req.UserIDList { - chat.ConversationChangeNotification(req.OperationID, v) + if isSyncConversation { + for _, v := range req.UserIDList { + chat.ConversationChangeNotification(req.OperationID, v) + } + } else { + for _, v := range req.UserIDList { + chat.ConversationUnreadChangeNotification(req.OperationID, v, req.Conversation.ConversationID) + } } + } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String()) resp.CommonResp = &pbConversation.CommonResp{} diff --git a/internal/rpc/msg/conversation_notification.go b/internal/rpc/msg/conversation_notification.go index b43db7959..c79f28a65 100644 --- a/internal/rpc/msg/conversation_notification.go +++ b/internal/rpc/msg/conversation_notification.go @@ -68,3 +68,15 @@ func ConversationChangeNotification(operationID, userID string) { tips.DefaultTips = config.Config.Notification.ConversationOptUpdate.DefaultTips.Tips SetConversationNotification(operationID, userID, userID, constant.ConversationOptChangeNotification, ConversationChangedTips, tips) } + +//会话未读数同步 +func ConversationUnreadChangeNotification(operationID, userID, conversationID string) { + log.NewInfo(operationID, utils.GetSelfFuncName()) + ConversationChangedTips := &open_im_sdk.ConversationUpdateTips{ + UserID: userID, + ConversationIDList: []string{conversationID}, + } + var tips open_im_sdk.TipsComm + tips.DefaultTips = config.Config.Notification.ConversationOptUpdate.DefaultTips.Tips + SetConversationNotification(operationID, userID, userID, constant.ConversationUnreadNotification, ConversationChangedTips, tips) +} diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index c4e57293c..11a646b8b 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -831,7 +831,7 @@ func Notification(n *NotificationMsg) { unReadCount = config.Config.Notification.ConversationSetPrivate.Conversation.UnreadCount case constant.DeleteMessageNotification: reliabilityLevel = constant.ReliableNotificationNoMsg - case constant.SuperGroupUpdateNotification: + case constant.SuperGroupUpdateNotification, constant.ConversationUnreadNotification: reliabilityLevel = constant.UnreliableNotification } switch reliabilityLevel { diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index a542560da..2ba3d1774 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -103,6 +103,7 @@ const ( SuperGroupNotificationEnd = 1699 ConversationPrivateChatNotification = 1701 + ConversationUnreadNotification = 1702 OrganizationChangedNotification = 1801 diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 225a93c39..7c0a6813a 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -487,6 +487,7 @@ message UserInfoUpdatedTips{ //////////////////////conversation///////////////////// message ConversationUpdateTips{ string UserID = 1; + repeated string conversationIDList = 2; } message ConversationSetPrivateTips{ From 0489c3541756ec4212fdf2d90155992dd6c98774 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 5 Aug 2022 12:08:34 +0800 Subject: [PATCH 12/12] unread bug fix --- pkg/proto/sdk_ws/ws.pb.go | 321 ++++++++++++++++++++------------------ 1 file changed, 165 insertions(+), 156 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 1c768edac..b62698035 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -46,7 +46,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{0} + return fileDescriptor_ws_aba301ea11ce8970, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -204,7 +204,7 @@ func (m *GroupInfoForSet) Reset() { *m = GroupInfoForSet{} } func (m *GroupInfoForSet) String() string { return proto.CompactTextString(m) } func (*GroupInfoForSet) ProtoMessage() {} func (*GroupInfoForSet) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{1} + return fileDescriptor_ws_aba301ea11ce8970, []int{1} } func (m *GroupInfoForSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoForSet.Unmarshal(m, b) @@ -309,7 +309,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{2} + return fileDescriptor_ws_aba301ea11ce8970, []int{2} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -428,7 +428,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{3} + return fileDescriptor_ws_aba301ea11ce8970, []int{3} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -504,7 +504,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{4} + return fileDescriptor_ws_aba301ea11ce8970, []int{4} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -618,7 +618,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{5} + return fileDescriptor_ws_aba301ea11ce8970, []int{5} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -703,7 +703,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{6} + return fileDescriptor_ws_aba301ea11ce8970, []int{6} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -786,7 +786,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{7} + return fileDescriptor_ws_aba301ea11ce8970, []int{7} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -908,7 +908,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{8} + return fileDescriptor_ws_aba301ea11ce8970, []int{8} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -1053,7 +1053,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{9} + return fileDescriptor_ws_aba301ea11ce8970, []int{9} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -1164,7 +1164,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{10} + return fileDescriptor_ws_aba301ea11ce8970, []int{10} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1278,7 +1278,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{11} + return fileDescriptor_ws_aba301ea11ce8970, []int{11} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1359,7 +1359,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{12} + return fileDescriptor_ws_aba301ea11ce8970, []int{12} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1405,7 +1405,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{13} + return fileDescriptor_ws_aba301ea11ce8970, []int{13} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1454,7 +1454,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{14} + return fileDescriptor_ws_aba301ea11ce8970, []int{14} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1513,7 +1513,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{15} + return fileDescriptor_ws_aba301ea11ce8970, []int{15} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1551,7 +1551,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{16} + return fileDescriptor_ws_aba301ea11ce8970, []int{16} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1592,7 +1592,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{17} + return fileDescriptor_ws_aba301ea11ce8970, []int{17} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1653,7 +1653,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{18} + return fileDescriptor_ws_aba301ea11ce8970, []int{18} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1706,7 +1706,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{19} + return fileDescriptor_ws_aba301ea11ce8970, []int{19} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1755,7 +1755,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{20} + return fileDescriptor_ws_aba301ea11ce8970, []int{20} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1823,7 +1823,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{21} + return fileDescriptor_ws_aba301ea11ce8970, []int{21} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1896,7 +1896,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{22} + return fileDescriptor_ws_aba301ea11ce8970, []int{22} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -2085,7 +2085,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{23} + return fileDescriptor_ws_aba301ea11ce8970, []int{23} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -2153,7 +2153,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{24} + return fileDescriptor_ws_aba301ea11ce8970, []int{24} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2210,7 +2210,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{25} + return fileDescriptor_ws_aba301ea11ce8970, []int{25} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2279,7 +2279,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{26} + return fileDescriptor_ws_aba301ea11ce8970, []int{26} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2334,7 +2334,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{27} + return fileDescriptor_ws_aba301ea11ce8970, []int{27} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2390,7 +2390,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{28} + return fileDescriptor_ws_aba301ea11ce8970, []int{28} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2445,7 +2445,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{29} + return fileDescriptor_ws_aba301ea11ce8970, []int{29} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2500,7 +2500,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{30} + return fileDescriptor_ws_aba301ea11ce8970, []int{30} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2556,7 +2556,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{31} + return fileDescriptor_ws_aba301ea11ce8970, []int{31} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2619,7 +2619,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{32} + return fileDescriptor_ws_aba301ea11ce8970, []int{32} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2682,7 +2682,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{33} + return fileDescriptor_ws_aba301ea11ce8970, []int{33} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2744,7 +2744,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{34} + return fileDescriptor_ws_aba301ea11ce8970, []int{34} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2798,7 +2798,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{35} + return fileDescriptor_ws_aba301ea11ce8970, []int{35} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2854,7 +2854,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{36} + return fileDescriptor_ws_aba301ea11ce8970, []int{36} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2923,7 +2923,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{37} + return fileDescriptor_ws_aba301ea11ce8970, []int{37} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2984,7 +2984,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{38} + return fileDescriptor_ws_aba301ea11ce8970, []int{38} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -3038,7 +3038,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{39} + return fileDescriptor_ws_aba301ea11ce8970, []int{39} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -3093,7 +3093,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{40} + return fileDescriptor_ws_aba301ea11ce8970, []int{40} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -3153,7 +3153,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{41} + return fileDescriptor_ws_aba301ea11ce8970, []int{41} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3200,7 +3200,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{42} + return fileDescriptor_ws_aba301ea11ce8970, []int{42} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3253,7 +3253,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{43} + return fileDescriptor_ws_aba301ea11ce8970, []int{43} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3299,7 +3299,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{44} + return fileDescriptor_ws_aba301ea11ce8970, []int{44} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3339,7 +3339,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{45} + return fileDescriptor_ws_aba301ea11ce8970, []int{45} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3386,7 +3386,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{46} + return fileDescriptor_ws_aba301ea11ce8970, []int{46} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3434,7 +3434,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{47} + return fileDescriptor_ws_aba301ea11ce8970, []int{47} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3487,7 +3487,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{48} + return fileDescriptor_ws_aba301ea11ce8970, []int{48} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3525,7 +3525,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{49} + return fileDescriptor_ws_aba301ea11ce8970, []int{49} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3563,7 +3563,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{50} + return fileDescriptor_ws_aba301ea11ce8970, []int{50} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3601,7 +3601,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{51} + return fileDescriptor_ws_aba301ea11ce8970, []int{51} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3640,7 +3640,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{52} + return fileDescriptor_ws_aba301ea11ce8970, []int{52} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3670,6 +3670,7 @@ func (m *UserInfoUpdatedTips) GetUserID() string { // ////////////////////conversation///////////////////// type ConversationUpdateTips struct { UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` + ConversationIDList []string `protobuf:"bytes,2,rep,name=conversationIDList" json:"conversationIDList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -3679,7 +3680,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{53} + return fileDescriptor_ws_aba301ea11ce8970, []int{53} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3706,6 +3707,13 @@ func (m *ConversationUpdateTips) GetUserID() string { return "" } +func (m *ConversationUpdateTips) GetConversationIDList() []string { + if m != nil { + return m.ConversationIDList + } + return nil +} + type ConversationSetPrivateTips struct { RecvID string `protobuf:"bytes,1,opt,name=recvID" json:"recvID,omitempty"` SendID string `protobuf:"bytes,2,opt,name=sendID" json:"sendID,omitempty"` @@ -3719,7 +3727,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{54} + return fileDescriptor_ws_aba301ea11ce8970, []int{54} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3774,7 +3782,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{55} + return fileDescriptor_ws_aba301ea11ce8970, []int{55} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3828,7 +3836,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{56} + return fileDescriptor_ws_aba301ea11ce8970, []int{56} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3874,7 +3882,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{57} + return fileDescriptor_ws_aba301ea11ce8970, []int{57} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3927,7 +3935,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{58} + return fileDescriptor_ws_aba301ea11ce8970, []int{58} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4194,7 +4202,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{59} + return fileDescriptor_ws_aba301ea11ce8970, []int{59} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4463,7 +4471,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{60} + return fileDescriptor_ws_aba301ea11ce8970, []int{60} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4566,7 +4574,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{61} + return fileDescriptor_ws_aba301ea11ce8970, []int{61} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4621,7 +4629,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{62} + return fileDescriptor_ws_aba301ea11ce8970, []int{62} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4682,7 +4690,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{63} + return fileDescriptor_ws_aba301ea11ce8970, []int{63} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4737,7 +4745,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{64} + return fileDescriptor_ws_aba301ea11ce8970, []int{64} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4798,7 +4806,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{65} + return fileDescriptor_ws_aba301ea11ce8970, []int{65} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4853,7 +4861,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{66} + return fileDescriptor_ws_aba301ea11ce8970, []int{66} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4911,7 +4919,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{67} + return fileDescriptor_ws_aba301ea11ce8970, []int{67} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4946,7 +4954,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{68} + return fileDescriptor_ws_aba301ea11ce8970, []int{68} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -5014,7 +5022,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{69} + return fileDescriptor_ws_aba301ea11ce8970, []int{69} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -5068,7 +5076,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{70} + return fileDescriptor_ws_aba301ea11ce8970, []int{70} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -5119,7 +5127,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{71} + return fileDescriptor_ws_aba301ea11ce8970, []int{71} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -5154,7 +5162,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{72} + return fileDescriptor_ws_aba301ea11ce8970, []int{72} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5219,7 +5227,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{73} + return fileDescriptor_ws_aba301ea11ce8970, []int{73} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5253,7 +5261,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{74} + return fileDescriptor_ws_aba301ea11ce8970, []int{74} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5313,7 +5321,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_860ddb8af4f21a5d, []int{75} + return fileDescriptor_ws_aba301ea11ce8970, []int{75} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5430,14 +5438,14 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_860ddb8af4f21a5d) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_aba301ea11ce8970) } -var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ - // 3499 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_aba301ea11ce8970 = []byte{ + // 3512 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x6f, 0x24, 0x47, 0xf5, 0xbf, 0xee, 0xf1, 0x8c, 0x3d, 0x6f, 0xfc, 0x31, 0xee, 0xdd, 0x38, 0xf3, 0x33, 0x9b, 0xc5, - 0x74, 0xac, 0x24, 0x2c, 0xc1, 0x1b, 0x6d, 0x08, 0x82, 0x7c, 0x2c, 0xf2, 0x47, 0xf6, 0x23, 0xd9, - 0xb1, 0x9d, 0x9e, 0xdd, 0x04, 0x11, 0xa4, 0xa5, 0x3d, 0x5d, 0x1e, 0xf7, 0xba, 0xa7, 0xab, 0xdd, + 0x74, 0xac, 0x24, 0x2c, 0xc1, 0x8b, 0x36, 0x04, 0x41, 0x3e, 0x16, 0xf9, 0x23, 0xfb, 0x91, 0xec, + 0xd8, 0x4e, 0xcf, 0x6e, 0x82, 0x08, 0xd2, 0xa6, 0x3d, 0x5d, 0x1e, 0xf7, 0xba, 0xa7, 0xab, 0xdd, 0x1f, 0xde, 0x35, 0x17, 0x24, 0x90, 0x10, 0x37, 0x2e, 0x20, 0x24, 0x2e, 0x48, 0x5c, 0x10, 0x28, 0x8a, 0x10, 0x02, 0xc4, 0x01, 0x21, 0x84, 0xb8, 0x71, 0xe1, 0xc0, 0x8d, 0x03, 0x12, 0x67, 0xfe, 0x01, 0x24, 0xa4, 0xa0, 0xaa, 0x57, 0xdd, 0x5d, 0xd5, 0xdd, 0x63, 0xcf, 0x5a, 0x56, 0x76, 0xa3, @@ -5456,15 +5464,15 @@ var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ 0x9a, 0xf8, 0x71, 0x67, 0x8a, 0x0f, 0x90, 0x51, 0xc6, 0x2c, 0xe8, 0xe4, 0x41, 0xa7, 0xc9, 0x59, 0xeb, 0xe4, 0x81, 0xb1, 0x00, 0x8d, 0x28, 0xb6, 0xe3, 0x24, 0xea, 0xc0, 0x92, 0xf6, 0x42, 0xdd, 0x12, 0x90, 0xb1, 0x0c, 0x33, 0x9c, 0x2f, 0x4d, 0xa5, 0x69, 0x71, 0x12, 0x15, 0x99, 0x59, 0xec, - 0xf6, 0x51, 0x40, 0x3a, 0xd3, 0x9c, 0x41, 0x8e, 0x30, 0x2e, 0x41, 0xdb, 0x27, 0xc4, 0x79, 0x97, + 0xf6, 0x51, 0x40, 0x3a, 0xd3, 0x9c, 0x41, 0x8e, 0x30, 0x2e, 0x41, 0xdb, 0x27, 0xc4, 0x79, 0x87, 0x84, 0xb9, 0xd5, 0x66, 0xf8, 0xa0, 0x12, 0xde, 0x78, 0x0e, 0x66, 0x3d, 0x4a, 0xf7, 0xbb, 0x5c, 0x54, 0xe6, 0xa7, 0xce, 0x2c, 0x1f, 0x59, 0xc0, 0x1a, 0x2f, 0xc2, 0xbc, 0x1d, 0x04, 0xde, 0x11, - 0xa2, 0xae, 0x85, 0x2e, 0xf1, 0x9d, 0xce, 0x1c, 0x1f, 0x5a, 0xfe, 0x60, 0x7c, 0x11, 0x16, 0x64, + 0xa2, 0xae, 0x85, 0x2e, 0xf1, 0x9d, 0xce, 0x1c, 0x1f, 0x5a, 0xfe, 0x60, 0x7c, 0x09, 0x16, 0x64, 0xff, 0xdc, 0x09, 0x9c, 0xd4, 0x76, 0x6d, 0x6e, 0x9a, 0x11, 0x5f, 0x8d, 0x15, 0x30, 0x94, 0x2f, 0x68, 0x82, 0x79, 0x6e, 0x82, 0x8a, 0x2f, 0xe6, 0x0f, 0x6a, 0x30, 0x97, 0x45, 0xd8, 0x35, 0x1a, 0xf6, 0x48, 0xfc, 0x18, 0xc7, 0x19, 0xc6, 0x40, 0x23, 0x8b, 0x81, 0xeb, 0x15, 0x7e, 0x62, 0xb1, 0xd5, 0xba, 0xf2, 0xa9, 0x95, 0x01, 0xa5, 0x03, 0x8f, 0x60, 0x22, 0xed, 0x24, 0xbb, 0x2b, 0x37, - 0xfd, 0xf8, 0xe5, 0x2b, 0xef, 0xda, 0x5e, 0x42, 0x2a, 0x9c, 0xb8, 0x5e, 0x72, 0xe2, 0xd4, 0xc9, + 0xfd, 0xf8, 0xa5, 0x2b, 0xef, 0xd8, 0x5e, 0x42, 0x2a, 0x9c, 0xb8, 0x5e, 0x72, 0xe2, 0xd4, 0xc9, 0x6c, 0x8a, 0x1e, 0xbe, 0x59, 0xe5, 0xe1, 0xe6, 0xc9, 0x7c, 0xca, 0x54, 0xe6, 0x47, 0x3a, 0x9c, 0xe3, 0x6e, 0x11, 0xd8, 0xc4, 0xf3, 0x4e, 0x28, 0x01, 0x0b, 0xd0, 0x48, 0xd0, 0xd9, 0xe8, 0x17, 0x01, 0x31, 0x97, 0x85, 0xd4, 0x23, 0xb7, 0xc8, 0x21, 0xf1, 0xb8, 0x47, 0xea, 0x56, 0x8e, 0x30, @@ -5472,7 +5480,7 @@ var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ 0xdf, 0xf7, 0x99, 0xaf, 0xd1, 0x0f, 0x19, 0x2c, 0xbb, 0xa8, 0xa1, 0xba, 0xe8, 0x39, 0x98, 0xb5, 0x83, 0xa0, 0x6b, 0xfb, 0x03, 0x12, 0xe2, 0xa4, 0x93, 0x98, 0x0e, 0x2a, 0x96, 0x15, 0x04, 0x36, 0x53, 0x8f, 0x26, 0x61, 0x9f, 0x70, 0x6b, 0xd7, 0x2d, 0x09, 0xc3, 0xf8, 0xd0, 0x80, 0x84, 0x52, - 0x1e, 0x63, 0xea, 0x17, 0xb0, 0x22, 0x24, 0x20, 0x0b, 0x09, 0x56, 0x48, 0x92, 0x98, 0xbc, 0xe9, + 0x1e, 0x63, 0xea, 0x17, 0xb0, 0x22, 0x24, 0x20, 0x0b, 0x09, 0x56, 0x48, 0x92, 0x98, 0xbc, 0xe1, 0x3b, 0x5c, 0xa9, 0x96, 0x28, 0x24, 0x39, 0x8a, 0x15, 0x08, 0xd7, 0x3f, 0x74, 0xe3, 0xac, 0x5c, 0x4d, 0x63, 0x81, 0x50, 0x90, 0xe6, 0x77, 0x35, 0x98, 0xdd, 0x4e, 0x76, 0x3c, 0xb7, 0xcf, 0x11, 0xcc, 0xf8, 0xb9, 0x89, 0x35, 0xc5, 0xc4, 0xb2, 0xa1, 0xf4, 0xd1, 0x86, 0xaa, 0xa9, 0x86, 0x5a, @@ -5483,14 +5491,14 @@ var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ 0x68, 0x96, 0x96, 0x82, 0x72, 0x04, 0x41, 0x65, 0x04, 0x5d, 0x82, 0xf6, 0xc0, 0xa3, 0x3b, 0xb6, 0x67, 0x91, 0xfe, 0x61, 0x37, 0x1a, 0x6c, 0x05, 0x31, 0x77, 0x77, 0xdd, 0x2a, 0xe1, 0xcd, 0x7f, 0x6b, 0x00, 0x98, 0x5a, 0xdc, 0x8c, 0x85, 0xf5, 0x4a, 0x2b, 0xaf, 0x57, 0x0b, 0xd0, 0x08, 0xc9, - 0xd0, 0x0e, 0xf7, 0xd3, 0x74, 0x42, 0xa8, 0x20, 0x7c, 0xad, 0x24, 0xfc, 0x6b, 0x00, 0xbb, 0x7c, + 0xd0, 0x0e, 0xf7, 0xd3, 0x74, 0x42, 0xa8, 0x20, 0x7c, 0xad, 0x24, 0xfc, 0xab, 0x00, 0xbb, 0x7c, 0x1e, 0xc6, 0x87, 0x9b, 0x95, 0x25, 0x7f, 0xa9, 0x05, 0x58, 0x49, 0x3d, 0x6a, 0x49, 0xc3, 0x59, 0xae, 0xda, 0x8e, 0x23, 0x52, 0xa2, 0x8e, 0xb9, 0x9a, 0x21, 0x2a, 0x32, 0xa2, 0x71, 0x4c, 0x46, 0x4c, 0x66, 0x01, 0xf4, 0x2f, 0x0d, 0x9a, 0x6b, 0x9e, 0xdd, 0xdf, 0x1f, 0x53, 0x75, 0x55, 0x45, 0xbd, 0xa4, 0xe2, 0x75, 0x98, 0xd9, 0x61, 0xec, 0x52, 0x15, 0xb8, 0x15, 0x5a, 0x57, 0x3e, 0x53, 0xa1, 0xa5, 0x9a, 0x40, 0x96, 0x4a, 0xa7, 0xaa, 0x3b, 0x71, 0xb2, 0xba, 0xf5, 0x63, 0xd4, 0xcd, - 0xd6, 0x04, 0xf3, 0x47, 0x35, 0x98, 0xe6, 0xa5, 0xd3, 0x22, 0x07, 0x09, 0x89, 0x62, 0xe3, 0x0d, - 0x98, 0x4a, 0x52, 0x51, 0xb5, 0x71, 0x45, 0xcd, 0x48, 0x8c, 0x57, 0xc5, 0x9a, 0xc7, 0xe9, 0x75, + 0xd6, 0x04, 0xf3, 0x47, 0x35, 0x98, 0xe6, 0xa5, 0xd3, 0x22, 0x07, 0x09, 0x89, 0x62, 0xe3, 0x75, + 0x98, 0x4a, 0x52, 0x51, 0xb5, 0x71, 0x45, 0xcd, 0x48, 0x8c, 0x57, 0xc4, 0x9a, 0xc7, 0xe9, 0x75, 0x4e, 0x7f, 0xa1, 0x82, 0x3e, 0x5b, 0x44, 0xad, 0x7c, 0x38, 0x5b, 0xed, 0xf6, 0x6c, 0xdf, 0xf1, 0x88, 0x45, 0xa2, 0xc4, 0x8b, 0x45, 0xfd, 0x55, 0x70, 0x18, 0x69, 0x07, 0xdd, 0x68, 0x20, 0xd6, 0x42, 0x01, 0x31, 0xeb, 0xe0, 0x38, 0xf6, 0x09, 0x55, 0xcf, 0x11, 0x2c, 0xa9, 0x43, 0x72, 0xc0, @@ -5519,29 +5527,29 @@ var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ 0x92, 0xb6, 0xa3, 0x0d, 0x65, 0x3b, 0x5a, 0x5c, 0x8d, 0x7f, 0xa7, 0xc1, 0x79, 0xe6, 0xe5, 0x92, 0x1a, 0x5b, 0xd0, 0xa6, 0x85, 0x48, 0x10, 0xcb, 0xd5, 0xb3, 0x15, 0xcb, 0x4d, 0x31, 0x68, 0xac, 0x12, 0x31, 0x63, 0xe8, 0x14, 0x26, 0x11, 0xeb, 0x57, 0x15, 0xc3, 0xa2, 0x3c, 0x56, 0x89, 0xd8, - 0xfc, 0xbd, 0x06, 0x6d, 0x5c, 0x20, 0xa5, 0x3c, 0x3f, 0x73, 0xb1, 0xdf, 0x83, 0xf3, 0xc5, 0x99, + 0xfc, 0xbd, 0x06, 0x6d, 0x5c, 0x20, 0xa5, 0x3c, 0x3f, 0x73, 0xb1, 0xdf, 0x85, 0xf3, 0xc5, 0x99, 0x6f, 0xb9, 0x51, 0xdc, 0xd1, 0x97, 0x6a, 0xe3, 0x8a, 0x5e, 0xc9, 0x80, 0xe5, 0xda, 0xd3, 0xdb, 0x89, 0xe7, 0x75, 0x49, 0x14, 0xd9, 0x03, 0xb2, 0x76, 0xd4, 0x23, 0x07, 0xec, 0x83, 0x45, 0x0e, 0x46, 0xc6, 0x10, 0xeb, 0x96, 0x78, 0xbb, 0xe1, 0x52, 0x3f, 0x0b, 0x21, 0x19, 0xc5, 0xd2, 0x2a, - 0x42, 0x3e, 0x9d, 0xda, 0x52, 0x8d, 0x2d, 0xc4, 0x02, 0x34, 0xbe, 0x01, 0xd3, 0xbc, 0x13, 0x10, - 0xd3, 0x74, 0x26, 0xb8, 0x02, 0xaf, 0x57, 0xf6, 0x1e, 0x95, 0x52, 0x61, 0x4f, 0x21, 0xe0, 0x37, - 0xfd, 0x38, 0x3c, 0xb2, 0x14, 0x8e, 0x8b, 0xef, 0xc3, 0x7c, 0x69, 0x88, 0xd1, 0x86, 0xda, 0x3e, - 0x39, 0x12, 0x7a, 0xb0, 0x9f, 0xc6, 0x4b, 0x50, 0x3f, 0x64, 0x1b, 0x4d, 0xe1, 0xfd, 0xc5, 0x0a, - 0x09, 0x84, 0xcc, 0x16, 0x0e, 0x7c, 0x55, 0xff, 0x92, 0x66, 0x3e, 0x9b, 0x29, 0x26, 0xeb, 0xa8, - 0x29, 0x3a, 0x9a, 0x6f, 0x43, 0xab, 0x1b, 0x0d, 0x36, 0xec, 0xd8, 0xe6, 0x03, 0x5f, 0x87, 0xd6, + 0x42, 0x3e, 0x9d, 0xda, 0x52, 0x8d, 0x2d, 0xc4, 0x02, 0x34, 0xde, 0x87, 0x69, 0xde, 0x09, 0x88, + 0x69, 0x3a, 0x13, 0x5c, 0x81, 0xd7, 0x2a, 0x7b, 0x8f, 0x4a, 0xa9, 0xb0, 0xa7, 0x10, 0xf0, 0x1b, + 0x7e, 0x1c, 0x1e, 0x59, 0x0a, 0xc7, 0xc5, 0xf7, 0x60, 0xbe, 0x34, 0xc4, 0x68, 0x43, 0x6d, 0x9f, + 0x1c, 0x09, 0x3d, 0xd8, 0x4f, 0xe3, 0x0b, 0x50, 0x3f, 0x64, 0x1b, 0x4d, 0xe1, 0xfd, 0xc5, 0x0a, + 0x09, 0x84, 0xcc, 0x16, 0x0e, 0x7c, 0x45, 0xff, 0xb2, 0x66, 0x3e, 0x9b, 0x29, 0x26, 0xeb, 0xa8, + 0x29, 0x3a, 0x9a, 0x6f, 0x41, 0xab, 0x1b, 0x0d, 0x36, 0xec, 0xd8, 0xe6, 0x03, 0x5f, 0x83, 0xd6, 0x30, 0x07, 0xf9, 0xe0, 0xea, 0xf9, 0x04, 0x91, 0x25, 0x0f, 0x37, 0xff, 0xaa, 0x43, 0xa7, 0xda, 0x14, 0x51, 0xc0, 0x64, 0x20, 0x61, 0xb8, 0x4e, 0x1d, 0xc2, 0x55, 0xab, 0x5b, 0x29, 0xc8, 0x7c, 0x47, 0xc2, 0x90, 0xad, 0x61, 0xa2, 0x55, 0x47, 0xc8, 0x58, 0x81, 0x09, 0x2f, 0x75, 0xcb, 0xf1, 0x52, 0xf0, 0x71, 0xc6, 0x10, 0xda, 0xdc, 0xba, 0x92, 0x42, 0xc2, 0x67, 0xab, 0x63, 0xfb, 0x2c, 0x0a, 0xd0, 0x69, 0x12, 0x0f, 0x74, 0x5c, 0x89, 0xf5, 0x62, 0x1f, 0x9e, 0xaa, 0x1c, 0x5a, 0xe1, - 0xc0, 0x2f, 0xa8, 0x0e, 0xbc, 0x38, 0x5a, 0x95, 0xa2, 0x13, 0x03, 0x30, 0xae, 0x93, 0xb8, 0x6b, + 0xc0, 0x2f, 0xaa, 0x0e, 0xbc, 0x38, 0x5a, 0x95, 0xa2, 0x13, 0x03, 0x30, 0xae, 0x93, 0xb8, 0x6b, 0x3f, 0x58, 0xf5, 0x9d, 0xae, 0xeb, 0xf7, 0xc8, 0x01, 0x8b, 0xf6, 0x25, 0x68, 0x89, 0x63, 0x83, 0xcc, 0x4d, 0x4d, 0x4b, 0x46, 0x8d, 0x3c, 0x4d, 0x28, 0xe4, 0x43, 0xad, 0x94, 0x0f, 0xe6, 0x55, 0x98, 0x96, 0xa7, 0xe3, 0x8b, 0x88, 0xfd, 0xa0, 0x47, 0x0e, 0xb8, 0x42, 0x33, 0x96, 0x80, 0x38, 0x9e, 0x8f, 0x10, 0x3b, 0x0c, 0x01, 0x99, 0x7f, 0xd1, 0xe1, 0x5c, 0x49, 0xe4, 0x28, 0x78, 0x58, 0x3e, 0x72, 0xbc, 0xd4, 0x46, 0xc5, 0xcb, 0x84, 0x12, 0x2f, 0xfb, 0x30, 0x8f, 0x4e, 0x92, 0xa6, - 0xee, 0xd4, 0x79, 0x00, 0xbc, 0x51, 0xd5, 0xf0, 0x97, 0x85, 0x14, 0xbe, 0x97, 0xb0, 0xe8, 0xfc, - 0x32, 0xdf, 0x45, 0x02, 0x0b, 0xd5, 0x83, 0x2b, 0xdc, 0xff, 0x8a, 0xea, 0xfe, 0x4f, 0x57, 0xb9, + 0xee, 0xd4, 0x79, 0x00, 0xbc, 0x5e, 0xd5, 0xf0, 0x97, 0x85, 0x14, 0xbe, 0x97, 0xb0, 0xe8, 0xfc, + 0x32, 0xdf, 0x45, 0x02, 0x0b, 0xd5, 0x83, 0x2b, 0xdc, 0xff, 0xb2, 0xea, 0xfe, 0x4f, 0x57, 0xb9, 0x5f, 0x96, 0x44, 0xf2, 0xff, 0x01, 0xcc, 0xb1, 0xa2, 0xda, 0x23, 0xbe, 0xd3, 0x8d, 0x06, 0xdc, 0x90, 0x4b, 0xd0, 0x42, 0xfa, 0x6e, 0x34, 0xc8, 0x37, 0x80, 0x12, 0x8a, 0x8d, 0xe8, 0x7b, 0x2e, 0x2b, 0x9e, 0x7c, 0x84, 0x28, 0x7a, 0x12, 0x8a, 0x2d, 0x90, 0x11, 0x11, 0x27, 0x2c, 0xcc, 0xba, @@ -5560,7 +5568,7 @@ var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ 0xd5, 0x44, 0xa8, 0x23, 0xad, 0x22, 0x29, 0xeb, 0xfc, 0xec, 0x18, 0x37, 0x39, 0xbc, 0xc0, 0x9d, 0xe7, 0x05, 0x4e, 0xc1, 0xf1, 0x73, 0x42, 0xa9, 0xd0, 0x3f, 0xc5, 0x0d, 0x27, 0xa3, 0x90, 0x4b, 0x6c, 0xf7, 0xf7, 0x08, 0x3f, 0x34, 0xea, 0x2c, 0x60, 0xff, 0x28, 0xe3, 0x44, 0x77, 0xf7, 0x74, - 0xda, 0xdd, 0x2d, 0xbe, 0x0a, 0xd3, 0xb2, 0x82, 0x15, 0xc9, 0x7c, 0x5e, 0x4e, 0xe6, 0x29, 0x39, + 0xda, 0xdd, 0x2d, 0xbe, 0x02, 0xd3, 0xb2, 0x82, 0x15, 0xc9, 0x7c, 0x5e, 0x4e, 0xe6, 0x29, 0x39, 0x57, 0x7f, 0xa8, 0xc1, 0x5c, 0x41, 0x35, 0x36, 0x3a, 0x76, 0x63, 0x8f, 0x08, 0x0e, 0x08, 0xb0, 0xdd, 0x91, 0x43, 0xa2, 0xbe, 0x48, 0x1e, 0xfe, 0x5b, 0x48, 0x52, 0xcb, 0xb6, 0xec, 0x26, 0x4c, 0xbb, 0x5b, 0x3d, 0xc6, 0xa8, 0x47, 0x13, 0xdf, 0xc9, 0x0e, 0xda, 0x25, 0x1c, 0xdf, 0xb6, 0x6f, @@ -5574,19 +5582,19 @@ var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ 0x9b, 0xad, 0x8b, 0xd9, 0xf9, 0x7a, 0xcd, 0x52, 0x91, 0xc6, 0x26, 0xcc, 0x72, 0xb1, 0xb7, 0xd2, 0x03, 0x38, 0xee, 0x83, 0xf1, 0x67, 0x2c, 0x50, 0x9b, 0x3f, 0xd5, 0x84, 0x19, 0xd9, 0xd7, 0x1e, 0x41, 0xdb, 0xe7, 0x26, 0xd1, 0x4e, 0x65, 0x92, 0x45, 0x98, 0x1a, 0x26, 0xd2, 0x79, 0x60, 0xcd, - 0xca, 0xe0, 0xdc, 0x45, 0xb5, 0xb1, 0x5d, 0x64, 0xfe, 0x4c, 0x83, 0xce, 0x5b, 0xd4, 0xf5, 0xf9, - 0x87, 0xd5, 0x20, 0xf0, 0xc4, 0x35, 0xcc, 0xa9, 0x7d, 0xfe, 0x15, 0x68, 0xda, 0xc8, 0xc6, 0x8f, + 0xca, 0xe0, 0xdc, 0x45, 0xb5, 0xb1, 0x5d, 0x64, 0xfe, 0x4c, 0x83, 0xce, 0x9b, 0xd4, 0xf5, 0xf9, + 0x87, 0xd5, 0x20, 0xf0, 0xc4, 0x35, 0xcc, 0xa9, 0x7d, 0xfe, 0x55, 0x68, 0xda, 0xc8, 0xc6, 0x8f, 0x85, 0xdb, 0xc7, 0x38, 0xe3, 0xcb, 0x69, 0xa4, 0x83, 0x96, 0x9a, 0x7c, 0xd0, 0x62, 0x7e, 0xa8, - 0xc1, 0x2c, 0x1a, 0xe5, 0x9d, 0xc4, 0x8d, 0x4f, 0x2d, 0xdf, 0x1a, 0x4c, 0x1d, 0x24, 0x6e, 0x7c, + 0xc1, 0x2c, 0x1a, 0xe5, 0xed, 0xc4, 0x8d, 0x4f, 0x2d, 0xdf, 0x1a, 0x4c, 0x1d, 0x24, 0x6e, 0x7c, 0x8a, 0xa8, 0xcc, 0xe8, 0xca, 0xf1, 0x54, 0xab, 0x88, 0x27, 0xf3, 0x97, 0x1a, 0x5c, 0x28, 0x9a, 0x75, 0xb5, 0xdf, 0x27, 0xc1, 0xa3, 0x4c, 0x29, 0xe5, 0xa0, 0x69, 0xa2, 0x70, 0xd0, 0x54, 0x29, 0xb2, 0x45, 0xee, 0x91, 0xfe, 0xe3, 0x2b, 0xf2, 0x77, 0x74, 0xf8, 0xff, 0xeb, 0x59, 0xe2, 0xdd, 0x0e, 0x6d, 0x3f, 0xda, 0x25, 0x61, 0xf8, 0x08, 0xe5, 0xbd, 0x05, 0x33, 0x3e, 0xb9, 0x9f, 0xcb, 0x24, 0xd2, 0x71, 0x5c, 0x36, 0x2a, 0xf1, 0x78, 0xb5, 0xcb, 0xfc, 0x8f, 0x06, 0x6d, 0xe4, 0xf3, - 0xb6, 0xdb, 0xdf, 0x7f, 0x84, 0xca, 0x6f, 0xc2, 0xec, 0x3e, 0x97, 0x80, 0x41, 0xa7, 0x28, 0xdb, + 0x96, 0xdb, 0xdf, 0x7f, 0x84, 0xca, 0x6f, 0xc2, 0xec, 0x3e, 0x97, 0x80, 0x41, 0xa7, 0x28, 0xdb, 0x05, 0xea, 0x31, 0xd5, 0xff, 0x48, 0x83, 0xf9, 0xf4, 0xf6, 0xf7, 0xd0, 0x7d, 0x94, 0xc1, 0xba, 0x0d, 0x73, 0x78, 0xd2, 0x7e, 0x5a, 0x03, 0x14, 0xc9, 0xc7, 0xb4, 0xc0, 0x6f, 0x34, 0x98, 0x43, - 0x4e, 0x6f, 0xfa, 0x31, 0x09, 0x4f, 0xad, 0xff, 0x0d, 0x68, 0x11, 0x3f, 0x0e, 0x6d, 0xff, 0x34, + 0x4e, 0x6f, 0xf8, 0x31, 0x09, 0x4f, 0xad, 0xff, 0x0d, 0x68, 0x11, 0x3f, 0x0e, 0x6d, 0xff, 0x34, 0x15, 0x52, 0x26, 0x1d, 0xb3, 0x48, 0x7e, 0xa8, 0x81, 0xc1, 0x59, 0x6d, 0xb8, 0xd1, 0xd0, 0x8d, 0xa2, 0x47, 0xe8, 0xba, 0xf1, 0x04, 0xfe, 0xb1, 0x0e, 0xe7, 0x25, 0x2e, 0xdd, 0x24, 0x7e, 0xdc, 0x45, 0x36, 0x36, 0xa0, 0xc9, 0x7a, 0x04, 0xf9, 0x1e, 0x74, 0xdc, 0x89, 0x72, 0x42, 0xd6, 0xc5, @@ -5594,63 +5602,64 @@ var fileDescriptor_ws_860ddb8af4f21a5d = []byte{ 0x89, 0xcd, 0xba, 0xed, 0xf7, 0x89, 0xf7, 0xc4, 0x98, 0xc8, 0xfc, 0x85, 0x06, 0xb3, 0x38, 0xe4, 0xf1, 0x57, 0x99, 0xad, 0xf5, 0x18, 0xc8, 0x9f, 0x18, 0x2f, 0xb1, 0xf0, 0x5a, 0x90, 0xb8, 0xc8, 0x7d, 0xf5, 0xe3, 0x1b, 0x5a, 0x37, 0xa0, 0xd5, 0xdf, 0xb3, 0xfd, 0xc1, 0xa9, 0x82, 0x4b, 0x26, - 0x35, 0x63, 0x78, 0x5a, 0x3e, 0xb4, 0x5f, 0xc7, 0x4f, 0x5c, 0xfd, 0x97, 0x0b, 0xaa, 0x1c, 0xfb, + 0x35, 0x63, 0x78, 0x5a, 0x3e, 0xb4, 0x5f, 0xc7, 0x4f, 0x5c, 0xfd, 0x97, 0x0a, 0xaa, 0x1c, 0xfb, 0xce, 0xe1, 0xe1, 0x8c, 0xbe, 0x0f, 0xf3, 0x78, 0x53, 0x2c, 0xf5, 0x84, 0x46, 0x07, 0x26, 0x6d, 0x07, 0x8f, 0x2e, 0x34, 0x4e, 0x94, 0x82, 0xea, 0x4b, 0x02, 0xf1, 0x2e, 0x2d, 0x7f, 0x49, 0x70, - 0x11, 0xc0, 0x76, 0x9c, 0xf7, 0x68, 0xe8, 0xb8, 0x7e, 0xda, 0xe0, 0x4b, 0x18, 0xf3, 0x2d, 0x98, + 0x11, 0xc0, 0x76, 0x9c, 0x77, 0x69, 0xe8, 0xb8, 0x7e, 0xda, 0xe0, 0x4b, 0x18, 0xf3, 0x4d, 0x98, 0xbe, 0x16, 0xd2, 0xe1, 0x6d, 0xe9, 0xce, 0xf7, 0xd8, 0x5b, 0x69, 0xf9, 0xbe, 0x58, 0x57, 0xef, - 0x8b, 0xcd, 0xaf, 0xc3, 0x53, 0x25, 0xc1, 0xb9, 0xb1, 0xd6, 0xf1, 0x2a, 0x3b, 0x9d, 0x44, 0x84, + 0x8b, 0xcd, 0x6f, 0xc0, 0x53, 0x25, 0xc1, 0xb9, 0xb1, 0xd6, 0xf1, 0x2a, 0x3b, 0x9d, 0x44, 0x84, 0x4c, 0xd5, 0x59, 0x9e, 0x2c, 0x8b, 0xa5, 0x10, 0x99, 0xdf, 0xd6, 0xe0, 0x99, 0x12, 0xfb, 0xd5, 0x20, 0x08, 0xe9, 0xa1, 0xf0, 0xc9, 0x59, 0x4c, 0xa3, 0x36, 0xbf, 0x7a, 0xb1, 0xf9, 0xad, 0x14, - 0x42, 0x69, 0xd8, 0x3f, 0x06, 0x21, 0x7e, 0xae, 0xc1, 0x9c, 0x10, 0xc2, 0x71, 0xc4, 0xb4, 0xaf, - 0x40, 0x03, 0x1f, 0xd3, 0x88, 0x09, 0x9f, 0xa9, 0x9c, 0x30, 0x7d, 0x04, 0x64, 0x89, 0xc1, 0xe5, - 0x88, 0xd4, 0xab, 0x32, 0xea, 0xcb, 0x59, 0xb0, 0x8f, 0xfd, 0xdc, 0x45, 0x10, 0x98, 0x5f, 0x4d, + 0x42, 0x69, 0xd8, 0x3f, 0x06, 0x21, 0x7e, 0xae, 0xc1, 0x9c, 0x10, 0xc2, 0x71, 0xc4, 0xb4, 0x2f, + 0x43, 0x03, 0x1f, 0xd3, 0x88, 0x09, 0x9f, 0xa9, 0x9c, 0x30, 0x7d, 0x04, 0x64, 0x89, 0xc1, 0xe5, + 0x88, 0xd4, 0xab, 0x32, 0xea, 0x2b, 0x59, 0xb0, 0x8f, 0xfd, 0xdc, 0x45, 0x10, 0x98, 0x5f, 0x4b, 0x83, 0x79, 0x83, 0x78, 0xe4, 0x2c, 0x6d, 0x64, 0xde, 0x81, 0x59, 0xfe, 0xb2, 0x27, 0xb7, 0xc1, - 0x99, 0xb0, 0x7d, 0x0f, 0xda, 0x9c, 0xed, 0x99, 0xcb, 0x9b, 0x65, 0x07, 0xb3, 0x8f, 0x5c, 0x4a, + 0x99, 0xb0, 0x7d, 0x17, 0xda, 0x9c, 0xed, 0x99, 0xcb, 0x9b, 0x65, 0x07, 0xb3, 0x8f, 0x5c, 0x4a, 0xce, 0x84, 0xfb, 0xe7, 0xe1, 0x5c, 0x6a, 0x7b, 0x7c, 0x11, 0x8b, 0xbc, 0x47, 0xdc, 0xed, 0x99, - 0x2f, 0xc1, 0xc2, 0x3a, 0xf5, 0x0f, 0x49, 0x18, 0x29, 0x8f, 0x68, 0x91, 0x42, 0x49, 0x7e, 0x01, - 0x99, 0xf7, 0x60, 0x51, 0xa6, 0xe8, 0x91, 0x78, 0x3b, 0x74, 0x0f, 0x25, 0x2a, 0x71, 0xa8, 0xad, - 0x29, 0x87, 0xda, 0xf9, 0x21, 0xb8, 0xae, 0x1c, 0x82, 0x5f, 0x80, 0xa6, 0x1b, 0x09, 0x06, 0x3c, - 0xa8, 0xa6, 0xac, 0x1c, 0x61, 0xda, 0x30, 0x8f, 0xe6, 0x17, 0x97, 0x4c, 0x7c, 0x8a, 0x45, 0x98, - 0xc2, 0x98, 0xca, 0x26, 0xc9, 0xe0, 0x91, 0x57, 0x36, 0x23, 0x2f, 0x28, 0xcd, 0x1e, 0xcc, 0x8b, - 0x87, 0x38, 0xdb, 0xf6, 0xc0, 0xf5, 0xb1, 0xc8, 0x5e, 0x04, 0x08, 0xec, 0x41, 0xfa, 0xf4, 0x0f, - 0xaf, 0xda, 0x24, 0x0c, 0xfb, 0x1e, 0xed, 0xd1, 0xfb, 0xe2, 0xbb, 0x8e, 0xdf, 0x73, 0x8c, 0xf9, - 0x2e, 0x18, 0x16, 0x89, 0x02, 0xea, 0x47, 0x44, 0xe2, 0xba, 0x04, 0xad, 0xf5, 0x24, 0x0c, 0x89, - 0xcf, 0xa6, 0x4a, 0xdf, 0xb6, 0xc9, 0x28, 0xc6, 0xb7, 0x97, 0xf3, 0xc5, 0x63, 0x79, 0x09, 0x63, - 0xfe, 0xa4, 0x06, 0xcd, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x22, 0x07, 0xc6, 0xeb, 0xd0, 0xc0, 0x2d, - 0x8b, 0x88, 0x94, 0xaa, 0x63, 0x62, 0x1c, 0x8d, 0x7b, 0x33, 0x8b, 0x1c, 0xdc, 0xf8, 0x3f, 0x4b, - 0xd0, 0x18, 0xef, 0xa4, 0xcf, 0x95, 0x6e, 0xe2, 0x11, 0x94, 0x58, 0xbf, 0x3e, 0x7b, 0x02, 0x13, - 0x31, 0x1a, 0x79, 0xa9, 0x1c, 0x98, 0x40, 0x7d, 0xde, 0xd2, 0x88, 0xf2, 0x30, 0x5a, 0x20, 0xec, - 0x7c, 0x84, 0x40, 0x48, 0xc3, 0xa8, 0x6d, 0x7e, 0x48, 0x23, 0x56, 0xea, 0xd1, 0xd4, 0x78, 0x96, - 0x23, 0xa8, 0x91, 0x86, 0x51, 0xef, 0x25, 0xfe, 0xe0, 0x4e, 0x20, 0xce, 0x0e, 0x47, 0x53, 0xdf, - 0xe0, 0xc3, 0x04, 0x35, 0xd2, 0x30, 0xea, 0x90, 0x17, 0x6f, 0x6e, 0xf4, 0xe3, 0xa8, 0xb1, 0xc6, - 0x0b, 0x6a, 0xa4, 0x59, 0x6b, 0xc2, 0x64, 0x60, 0x1f, 0x79, 0xd4, 0x76, 0xcc, 0x0f, 0x6a, 0x00, - 0xe9, 0xc0, 0x88, 0x37, 0x3a, 0x8a, 0x8b, 0x96, 0x4f, 0x74, 0x51, 0xe0, 0x1d, 0x49, 0x4e, 0xea, - 0x55, 0x3b, 0xe9, 0x73, 0xe3, 0x3a, 0x09, 0xb9, 0x15, 0xdc, 0x74, 0xb5, 0xe0, 0xa6, 0xe5, 0x13, - 0xdd, 0x24, 0x84, 0x12, 0x8e, 0xba, 0x5a, 0x70, 0xd4, 0xf2, 0x89, 0x8e, 0x12, 0xf4, 0xc2, 0x55, - 0x57, 0x0b, 0xae, 0x5a, 0x3e, 0xd1, 0x55, 0x82, 0x5e, 0x38, 0xeb, 0x6a, 0xc1, 0x59, 0xcb, 0x27, - 0x3a, 0x4b, 0xd0, 0x97, 0xdd, 0xf5, 0x37, 0x1d, 0x66, 0xb9, 0xc9, 0xf0, 0xe6, 0xd6, 0xdf, 0xa5, - 0xe5, 0x67, 0x7c, 0x5a, 0xc5, 0x33, 0x3e, 0xe3, 0x45, 0x98, 0x47, 0x04, 0x91, 0xae, 0x58, 0x74, - 0x7e, 0xc5, 0x52, 0xfe, 0xc0, 0x2f, 0x95, 0x92, 0x28, 0xa6, 0xc3, 0x0d, 0x3b, 0xb6, 0xd3, 0xe6, - 0x2b, 0xc7, 0xc8, 0x57, 0x7e, 0x13, 0xa5, 0x17, 0xed, 0x21, 0xa5, 0xc3, 0xec, 0x2e, 0x4f, 0x40, - 0x8c, 0x22, 0x76, 0x87, 0x84, 0x26, 0xb1, 0x28, 0x13, 0x29, 0x88, 0x6f, 0xaf, 0x1c, 0xd7, 0xe6, - 0x17, 0x65, 0xe2, 0x61, 0x52, 0x86, 0xe0, 0x95, 0x2d, 0xbf, 0xf8, 0x13, 0x2f, 0xce, 0x73, 0xcc, - 0x18, 0x97, 0x74, 0xfc, 0xcf, 0x0b, 0x6e, 0xec, 0xca, 0x0f, 0x96, 0xea, 0x96, 0x82, 0x33, 0xff, - 0xa9, 0xc1, 0xb9, 0x6d, 0x3b, 0x8c, 0xdd, 0xbe, 0x1b, 0xd8, 0x7e, 0xdc, 0x25, 0xb1, 0xcd, 0xf5, - 0x54, 0x9e, 0x91, 0x6a, 0x0f, 0xf7, 0x8c, 0x74, 0x1b, 0xe6, 0x06, 0xea, 0x0e, 0xe4, 0x21, 0x37, - 0x0f, 0x45, 0x72, 0xe5, 0x4d, 0x6c, 0xed, 0xa1, 0xdf, 0xc4, 0x9a, 0xdf, 0xd3, 0x61, 0xae, 0x50, - 0x5e, 0x8f, 0x5d, 0x9b, 0x56, 0x01, 0xdc, 0x2c, 0xd4, 0x8e, 0x39, 0xa0, 0x57, 0xe3, 0xd1, 0x92, - 0x88, 0xaa, 0x6e, 0x08, 0x6b, 0xa7, 0xbf, 0x21, 0xbc, 0x01, 0xad, 0x20, 0x77, 0xd2, 0x31, 0xfb, - 0xa3, 0x0a, 0x57, 0x5a, 0x32, 0xa9, 0xf9, 0x3e, 0xcc, 0x97, 0xaa, 0x18, 0xbf, 0xb6, 0xa3, 0xfb, - 0xc4, 0xcf, 0xae, 0xed, 0x18, 0x20, 0x05, 0xb4, 0x5e, 0x0c, 0x68, 0xcf, 0x3d, 0x94, 0x1f, 0xe8, - 0x0b, 0xd0, 0xfc, 0xbe, 0x0e, 0x0b, 0xd5, 0x2b, 0xd0, 0x93, 0x6a, 0xee, 0x1d, 0xe8, 0x8c, 0xaa, - 0xf6, 0x67, 0x66, 0xf5, 0x3c, 0xba, 0xb3, 0xb5, 0xfa, 0x49, 0x35, 0xf7, 0xb9, 0x34, 0xba, 0xa5, - 0xe5, 0xd0, 0xfc, 0x75, 0x66, 0x9f, 0xac, 0x1b, 0x79, 0x42, 0xed, 0x63, 0x5c, 0x82, 0x36, 0xaa, - 0x29, 0x3d, 0x29, 0xc1, 0xe6, 0xb6, 0x84, 0xcf, 0x2b, 0x85, 0xd4, 0x1a, 0x9c, 0x59, 0xcc, 0xfe, - 0x41, 0x4b, 0x7d, 0x92, 0xf5, 0x78, 0x9f, 0x28, 0x9f, 0xe4, 0x91, 0x26, 0x35, 0x3e, 0x52, 0xa4, - 0x65, 0xbd, 0xe7, 0xff, 0x22, 0xed, 0xe4, 0x48, 0xcb, 0x6c, 0x29, 0x35, 0x81, 0xe6, 0xb7, 0x60, - 0x66, 0x83, 0x78, 0xdd, 0x68, 0x90, 0xbe, 0x79, 0x3d, 0xd3, 0xcd, 0x64, 0xf1, 0x65, 0xe0, 0x44, - 0xf9, 0x65, 0xe0, 0x1a, 0xcc, 0xca, 0x02, 0x9c, 0xe6, 0x4d, 0xe7, 0xda, 0x85, 0xaf, 0x2d, 0xae, - 0x88, 0xff, 0x4a, 0xbf, 0x56, 0x32, 0xe2, 0x4e, 0x83, 0xff, 0xbb, 0xf2, 0xe5, 0xff, 0x06, 0x00, - 0x00, 0xff, 0xff, 0x8e, 0xa2, 0xa5, 0x98, 0x84, 0x3d, 0x00, 0x00, + 0xef, 0xc3, 0xc2, 0x3a, 0xf5, 0x0f, 0x49, 0x18, 0x29, 0x8f, 0x68, 0x91, 0x42, 0x49, 0x7e, 0x01, + 0x19, 0x2b, 0x60, 0xf4, 0x25, 0x0a, 0x71, 0xba, 0xa8, 0xf3, 0xd3, 0xc5, 0x8a, 0x2f, 0xe6, 0x3d, + 0x58, 0x94, 0x67, 0xe8, 0x91, 0x78, 0x3b, 0x74, 0x0f, 0xa5, 0x59, 0xc4, 0x21, 0xb8, 0xa6, 0x1c, + 0x82, 0xe7, 0x87, 0xe6, 0xba, 0x72, 0x68, 0x7e, 0x01, 0x9a, 0x6e, 0x24, 0x18, 0xf0, 0x20, 0x9c, + 0xb2, 0x72, 0x84, 0x69, 0xc3, 0x3c, 0xba, 0x4b, 0x5c, 0x4a, 0xf1, 0x29, 0x16, 0x61, 0x0a, 0x63, + 0x30, 0x9b, 0x24, 0x83, 0x47, 0x5e, 0xf1, 0x8c, 0xbc, 0xd0, 0x34, 0x7b, 0x30, 0x2f, 0x1e, 0xee, + 0x6c, 0xdb, 0x03, 0xd7, 0xc7, 0xa2, 0x7c, 0x11, 0x20, 0xb0, 0x07, 0xe9, 0x53, 0x41, 0xbc, 0x9a, + 0x93, 0x30, 0xec, 0x7b, 0xb4, 0x47, 0xef, 0x8b, 0xef, 0x3a, 0x7e, 0xcf, 0x31, 0xe6, 0x3b, 0x60, + 0x58, 0x24, 0x0a, 0xa8, 0x1f, 0x11, 0x89, 0xeb, 0x12, 0xb4, 0xd6, 0x93, 0x30, 0x24, 0x3e, 0x9b, + 0x2a, 0x7d, 0x0b, 0x27, 0xa3, 0x18, 0xdf, 0x5e, 0xce, 0x17, 0x8f, 0xf1, 0x25, 0x8c, 0xf9, 0x93, + 0x1a, 0x34, 0x7b, 0xee, 0xc0, 0xb7, 0x3d, 0x8b, 0x1c, 0x18, 0xaf, 0x41, 0x03, 0xb7, 0x38, 0x22, + 0xb2, 0xaa, 0x8e, 0x95, 0x71, 0x34, 0xee, 0xe5, 0x2c, 0x72, 0x70, 0xe3, 0xff, 0x2c, 0x41, 0x63, + 0xbc, 0x9d, 0x3e, 0x6f, 0xba, 0x89, 0x47, 0x56, 0x62, 0xbd, 0xfb, 0xec, 0x09, 0x4c, 0xc4, 0x68, + 0xe4, 0xa5, 0x72, 0x60, 0x02, 0xf5, 0x79, 0x0b, 0x24, 0xca, 0xc9, 0x68, 0x81, 0xb0, 0x53, 0x12, + 0x02, 0x21, 0x0d, 0xa3, 0xb6, 0xf9, 0xa1, 0x8e, 0x58, 0xd9, 0x47, 0x53, 0xe3, 0xd9, 0x8f, 0xa0, + 0x46, 0x1a, 0x46, 0xbd, 0x97, 0xf8, 0x83, 0x3b, 0x81, 0x38, 0x6b, 0x1c, 0x4d, 0x7d, 0x83, 0x0f, + 0x13, 0xd4, 0x48, 0xc3, 0xa8, 0x43, 0x5e, 0xec, 0xb9, 0xd1, 0x8f, 0xa3, 0xc6, 0x35, 0x41, 0x50, + 0x23, 0xcd, 0x5a, 0x13, 0x26, 0x03, 0xfb, 0xc8, 0xa3, 0xb6, 0x63, 0x7e, 0x50, 0x03, 0x48, 0x07, + 0x46, 0xbc, 0x31, 0x52, 0x5c, 0xb4, 0x7c, 0xa2, 0x8b, 0x02, 0xef, 0x48, 0x72, 0x52, 0xaf, 0xda, + 0x49, 0x9f, 0x1b, 0xd7, 0x49, 0xc8, 0xad, 0xe0, 0xa6, 0xab, 0x05, 0x37, 0x2d, 0x9f, 0xe8, 0x26, + 0x21, 0x94, 0x70, 0xd4, 0xd5, 0x82, 0xa3, 0x96, 0x4f, 0x74, 0x94, 0xa0, 0x17, 0xae, 0xba, 0x5a, + 0x70, 0xd5, 0xf2, 0x89, 0xae, 0x12, 0xf4, 0xc2, 0x59, 0x57, 0x0b, 0xce, 0x5a, 0x3e, 0xd1, 0x59, + 0x82, 0xbe, 0xec, 0xae, 0xbf, 0xe9, 0x30, 0xcb, 0x4d, 0x86, 0x15, 0xce, 0xdf, 0xa5, 0xe5, 0x67, + 0x7f, 0x5a, 0xc5, 0xb3, 0x3f, 0xe3, 0x45, 0x98, 0x47, 0x04, 0x91, 0xae, 0x64, 0xb0, 0x68, 0x96, + 0x3f, 0xf0, 0x4b, 0xa8, 0x24, 0x8a, 0xe9, 0x70, 0xc3, 0x8e, 0xed, 0xb4, 0x59, 0xcb, 0x31, 0xf2, + 0x15, 0xe1, 0x44, 0xe9, 0x05, 0x7c, 0x48, 0xe9, 0x30, 0xbb, 0xfb, 0x13, 0x10, 0xa3, 0x88, 0xdd, + 0x21, 0xa1, 0x49, 0x2c, 0xca, 0x44, 0x0a, 0xe2, 0x5b, 0x2d, 0xc7, 0xb5, 0xf9, 0xc5, 0x9a, 0x78, + 0xc8, 0x94, 0x21, 0x78, 0x65, 0xcb, 0x2f, 0x0a, 0xc5, 0x0b, 0xf5, 0x1c, 0x33, 0xc6, 0xa5, 0x1e, + 0xff, 0xb3, 0x83, 0x1b, 0xbb, 0xf2, 0x03, 0xa7, 0xba, 0xa5, 0xe0, 0xcc, 0x7f, 0x6a, 0x70, 0x6e, + 0xdb, 0x0e, 0x63, 0xb7, 0xef, 0x06, 0xb6, 0x1f, 0x77, 0x49, 0x6c, 0x73, 0x3d, 0x95, 0x67, 0xa7, + 0xda, 0xc3, 0x3d, 0x3b, 0xdd, 0x86, 0xb9, 0x81, 0xba, 0x63, 0x79, 0xc8, 0xcd, 0x46, 0x91, 0x5c, + 0x79, 0x43, 0x5b, 0x7b, 0xe8, 0x37, 0xb4, 0xe6, 0xf7, 0x74, 0x98, 0x2b, 0x94, 0xd7, 0x63, 0xd7, + 0xa6, 0x55, 0x00, 0x37, 0x0b, 0xb5, 0x63, 0x0e, 0xf4, 0xd5, 0x78, 0xb4, 0x24, 0xa2, 0xaa, 0x1b, + 0xc5, 0xda, 0xe9, 0x6f, 0x14, 0x6f, 0x40, 0x2b, 0xc8, 0x9d, 0x74, 0xcc, 0x7e, 0xaa, 0xc2, 0x95, + 0x96, 0x4c, 0x6a, 0xbe, 0x07, 0xf3, 0xa5, 0x2a, 0xc6, 0xaf, 0xf9, 0xe8, 0x3e, 0xf1, 0xb3, 0x6b, + 0x3e, 0x06, 0x48, 0x01, 0xad, 0x17, 0x03, 0xda, 0x73, 0x0f, 0xe5, 0x07, 0xfd, 0x02, 0x34, 0xbf, + 0xaf, 0xc3, 0x42, 0xf5, 0x0a, 0xf4, 0xa4, 0x9a, 0x7b, 0x07, 0x3a, 0xa3, 0xaa, 0xfd, 0x99, 0x59, + 0x3d, 0x8f, 0xee, 0x6c, 0xad, 0x7e, 0x52, 0xcd, 0x7d, 0x2e, 0x8d, 0x6e, 0x69, 0x39, 0x34, 0x7f, + 0x9d, 0xd9, 0x27, 0xeb, 0x46, 0x9e, 0x50, 0xfb, 0x18, 0x97, 0xa0, 0x8d, 0x6a, 0x4a, 0x4f, 0x50, + 0xb0, 0xb9, 0x2d, 0xe1, 0xf3, 0x4a, 0x21, 0xb5, 0x06, 0x67, 0x16, 0xb3, 0x7f, 0xd0, 0x52, 0x9f, + 0x64, 0x3d, 0xde, 0x27, 0xca, 0x27, 0x79, 0xa4, 0x49, 0x8d, 0x8f, 0x14, 0x69, 0x59, 0xef, 0xf9, + 0xbf, 0x48, 0x3b, 0x39, 0xd2, 0x32, 0x5b, 0x4a, 0x4d, 0xa0, 0xf9, 0x2d, 0x98, 0xd9, 0x20, 0x5e, + 0x37, 0x1a, 0xa4, 0x6f, 0x64, 0xcf, 0x74, 0x33, 0x59, 0x7c, 0x49, 0x38, 0x51, 0x7e, 0x49, 0xb8, + 0x06, 0xb3, 0xb2, 0x00, 0xa7, 0x79, 0x03, 0xba, 0x76, 0xe1, 0xeb, 0x8b, 0x2b, 0xe2, 0xbf, 0xd5, + 0xaf, 0x96, 0x8c, 0xb8, 0xd3, 0xe0, 0xff, 0xc6, 0x7c, 0xe9, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x36, 0xc8, 0xed, 0x00, 0xb4, 0x3d, 0x00, 0x00, }