From bbe8c46df9c23a6253fa067ca1d3837d3dc20260 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 16:13:44 +0800 Subject: [PATCH 001/256] callback --- internal/rpc/group/group.go | 124 ++++++++++++++++---------------- pkg/common/constant/constant.go | 3 +- pkg/common/db/mongoModel.go | 4 ++ 3 files changed, 70 insertions(+), 61 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 57faf3fe2..f42b6d30d 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -91,12 +91,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewError(req.OperationID, "CheckAccess false ", req.OpUserID, req.OwnerUserID) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil } - canCreate, err := callbackBeforeCreateGroup(req) - if err != nil || !canCreate { - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "callbackBeforeCreateGroup failed") - } - } groupId := req.GroupInfo.GroupID if groupId == "" { @@ -107,72 +101,82 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR utils.CopyStructFields(&groupInfo, req.GroupInfo) groupInfo.CreatorUserID = req.OpUserID groupInfo.GroupID = groupId - err = imdb.InsertIntoGroup(groupInfo) + err := imdb.InsertIntoGroup(groupInfo) if err != nil { log.NewError(req.OperationID, "InsertIntoGroup failed, ", err.Error(), groupInfo) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - groupMember := db.GroupMember{} - us := &db.User{} - if req.OwnerUserID == "" { - goto initMemberList - } - us, err = imdb.GetUserByUserID(req.OwnerUserID) - if err != nil { - log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID) - return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) - } - - //to group member - groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} - utils.CopyStructFields(&groupMember, us) - err = imdb.InsertIntoGroupMember(groupMember) - if err != nil { - log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) - return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) - } - -initMemberList: var okUserIDList []string - //to group member - for _, user := range req.InitMemberList { - us, err := imdb.GetUserByUserID(user.UserID) - if err != nil { - log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), user.UserID) - continue + + if req.GroupInfo.GroupType == constant.NormalGroup { + groupMember := db.GroupMember{} + us := &db.User{} + if req.OwnerUserID == "" { + goto initMemberList } - if user.RoleLevel == constant.GroupOwner { - log.NewError(req.OperationID, "only one owner, failed ", user) - continue + us, err = imdb.GetUserByUserID(req.OwnerUserID) + if err != nil { + log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID) + return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - groupMember.RoleLevel = user.RoleLevel + + //to group member + groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} utils.CopyStructFields(&groupMember, us) err = imdb.InsertIntoGroupMember(groupMember) if err != nil { log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) - continue + return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - okUserIDList = append(okUserIDList, user.UserID) - } - resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} - group, err := imdb.GetGroupInfoByGroupID(groupId) - if err != nil { - log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId) - resp.ErrCode = constant.ErrDB.ErrCode - resp.ErrMsg = err.Error() - return resp, nil - } - utils.CopyStructFields(resp.GroupInfo, group) - resp.GroupInfo.MemberCount, err = imdb.GetGroupMemberNumByGroupID(groupId) - if err != nil { - log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) - resp.ErrCode = constant.ErrDB.ErrCode - resp.ErrMsg = err.Error() - return resp, nil - } - if req.OwnerUserID != "" { - resp.GroupInfo.OwnerUserID = req.OwnerUserID - okUserIDList = append(okUserIDList, req.OwnerUserID) + + initMemberList: + var okUserIDList []string + //to group member + for _, user := range req.InitMemberList { + us, err := imdb.GetUserByUserID(user.UserID) + if err != nil { + log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), user.UserID) + continue + } + if user.RoleLevel == constant.GroupOwner { + log.NewError(req.OperationID, "only one owner, failed ", user) + continue + } + groupMember.RoleLevel = user.RoleLevel + utils.CopyStructFields(&groupMember, us) + err = imdb.InsertIntoGroupMember(groupMember) + if err != nil { + log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) + continue + } + okUserIDList = append(okUserIDList, user.UserID) + } + resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} + group, err := imdb.GetGroupInfoByGroupID(groupId) + if err != nil { + log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = err.Error() + return resp, nil + } + utils.CopyStructFields(resp.GroupInfo, group) + resp.GroupInfo.MemberCount, err = imdb.GetGroupMemberNumByGroupID(groupId) + if err != nil { + log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = err.Error() + return resp, nil + } + if req.OwnerUserID != "" { + resp.GroupInfo.OwnerUserID = req.OwnerUserID + okUserIDList = append(okUserIDList, req.OwnerUserID) + } + } else if req.GroupInfo.GroupType == constant.SuperGroup { + for _, v := range req.InitMemberList { + okUserIDList = append(okUserIDList, v.UserID) + } + //memberCount := len(okUserIDList) + } if len(okUserIDList) != 0 { diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index e27be4d8e..5878c3851 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -154,7 +154,8 @@ const ( //GroupType NormalGroup = 0 - DepartmentGroup = 1 + SuperGroup = 1 + DepartmentGroup = 2 GroupBaned = 3 GroupBanPrivateChat = 4 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 22c54dae8..ad4413675 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -878,6 +878,10 @@ func (d *DataBases) GetUserFriendWorkMoments(showNumber, pageNumber int32, userI return workMomentList, err } +func (d *DataBases) CreateSuperGroup() { + +} + func generateTagID(tagName, userID string) string { return utils.Md5(tagName + userID + strconv.Itoa(rand.Int()) + time.Now().String()) } From b55e13dbeb1870eac4b48ff4c6904d2f4119cdd3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 18:40:24 +0800 Subject: [PATCH 002/256] superGroup --- internal/rpc/group/group.go | 470 ++++++++++++++++++++---------------- pkg/common/db/mongoModel.go | 46 +++- 2 files changed, 313 insertions(+), 203 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index f42b6d30d..8c550684f 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -107,19 +107,15 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } var okUserIDList []string - - if req.GroupInfo.GroupType == constant.NormalGroup { - groupMember := db.GroupMember{} - us := &db.User{} - if req.OwnerUserID == "" { - goto initMemberList - } + resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} + groupMember := db.GroupMember{} + us := &db.User{} + if req.OwnerUserID != "" { us, err = imdb.GetUserByUserID(req.OwnerUserID) if err != nil { log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - //to group member groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} utils.CopyStructFields(&groupMember, us) @@ -128,8 +124,8 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) } - - initMemberList: + } + if req.GroupInfo.GroupType != constant.SuperGroup { var okUserIDList []string //to group member for _, user := range req.InitMemberList { @@ -151,7 +147,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } okUserIDList = append(okUserIDList, user.UserID) } - resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}} group, err := imdb.GetGroupInfoByGroupID(groupId) if err != nil { log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId) @@ -171,12 +166,16 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR resp.GroupInfo.OwnerUserID = req.OwnerUserID okUserIDList = append(okUserIDList, req.OwnerUserID) } - } else if req.GroupInfo.GroupType == constant.SuperGroup { + } else { for _, v := range req.InitMemberList { okUserIDList = append(okUserIDList, v.UserID) } - //memberCount := len(okUserIDList) - + if err := db.DB.CreateSuperGroup(groupId, okUserIDList, len(okUserIDList)); err != nil { + log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = err.Error() + ": CreateSuperGroup failed" + return resp, nil + } } if len(okUserIDList) != 0 { @@ -198,7 +197,9 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String()) - chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) + if req.GroupInfo.GroupType != constant.SuperGroup { + chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) + } return resp, nil } else { log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String()) @@ -261,93 +262,104 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite // //from User: invite: applicant //to user: invite: invited - var resp pbGroup.InviteUserToGroupResp var okUserIDList []string - for _, v := range req.InvitedUserIDList { - var resultNode pbGroup.Id2Result - resultNode.UserID = v - resultNode.Result = 0 - toUserInfo, err := imdb.GetUserByUserID(v) - if err != nil { - log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), v) - resultNode.Result = -1 - resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) - continue - } + if groupInfo.GroupType != constant.SuperGroup { + var resp pbGroup.InviteUserToGroupResp + for _, v := range req.InvitedUserIDList { + var resultNode pbGroup.Id2Result + resultNode.UserID = v + resultNode.Result = 0 + toUserInfo, err := imdb.GetUserByUserID(v) + if err != nil { + log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), v) + resultNode.Result = -1 + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + continue + } - if imdb.IsExistGroupMember(req.GroupID, v) { - log.NewError(req.OperationID, "IsExistGroupMember ", req.GroupID, v) - resultNode.Result = -1 + if imdb.IsExistGroupMember(req.GroupID, v) { + log.NewError(req.OperationID, "IsExistGroupMember ", req.GroupID, v) + resultNode.Result = -1 + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + continue + } + var toInsertInfo db.GroupMember + utils.CopyStructFields(&toInsertInfo, toUserInfo) + toInsertInfo.GroupID = req.GroupID + toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers + toInsertInfo.OperatorUserID = req.OpUserID + err = imdb.InsertIntoGroupMember(toInsertInfo) + if err != nil { + log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL) + resultNode.Result = -1 + resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) + continue + } + okUserIDList = append(okUserIDList, v) + err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID) + if err != nil { + log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), req.GroupID, toUserInfo.UserID) + } resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) - continue } - var toInsertInfo db.GroupMember - utils.CopyStructFields(&toInsertInfo, toUserInfo) - toInsertInfo.GroupID = req.GroupID - toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers - toInsertInfo.OperatorUserID = req.OpUserID - err = imdb.InsertIntoGroupMember(toInsertInfo) + var haveConUserID []string + conversations, err := imdb.GetConversationsByConversationIDMultipleOwner(okUserIDList, utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType)) if err != nil { - log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL) - resultNode.Result = -1 - resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) - continue + log.NewError(req.OperationID, "GetConversationsByConversationIDMultipleOwner failed ", err.Error(), req.GroupID, constant.GroupChatType) } - okUserIDList = append(okUserIDList, v) - err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID) - if err != nil { - log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), req.GroupID, toUserInfo.UserID) + for _, v := range conversations { + haveConUserID = append(haveConUserID, v.OwnerUserID) } - resp.Id2ResultList = append(resp.Id2ResultList, &resultNode) - } - var haveConUserID []string - conversations, err := imdb.GetConversationsByConversationIDMultipleOwner(okUserIDList, utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType)) - for _, v := range conversations { - haveConUserID = append(haveConUserID, v.OwnerUserID) - } - var reqPb pbUser.SetConversationReq - var c pbUser.Conversation - for _, v := range conversations { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v.OwnerUserID - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.RecvMsgOpt = v.RecvMsgOpt - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsPinned = v.IsPinned - c.AttachedInfo = v.AttachedInfo - c.IsPrivateChat = v.IsPrivateChat - c.GroupAtType = v.GroupAtType - c.IsNotInGroup = false - c.Ex = v.Ex - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.OwnerUserID) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.OwnerUserID) + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + for _, v := range conversations { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v.OwnerUserID + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.RecvMsgOpt = v.RecvMsgOpt + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsPinned = v.IsPinned + c.AttachedInfo = v.AttachedInfo + c.IsPrivateChat = v.IsPrivateChat + c.GroupAtType = v.GroupAtType + c.IsNotInGroup = false + c.Ex = v.Ex + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.OwnerUserID) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.OwnerUserID) + } } - } - for _, v := range utils.DifferenceString(haveConUserID, okUserIDList) { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsNotInGroup = false - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) + for _, v := range utils.DifferenceString(haveConUserID, okUserIDList) { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = false + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) + } + } + } else { + okUserIDList = req.InvitedUserIDList + if err := db.DB.AddUserToSuperGroup(req.GroupID, req.InvitedUserIDList); err != nil { + log.NewError(req.OperationID, "AddUserToSuperGroup failed ", req.GroupID, err) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}, nil } - } + } addGroupMemberToCacheReq := &pbCache.AddGroupMemberToCacheReq{ UserIDList: okUserIDList, GroupID: req.GroupID, @@ -365,31 +377,56 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil } - chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) - resp.ErrCode = 0 - log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp.String()) - return &resp, nil + if groupInfo.GroupType != constant.SuperGroup { + chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) + } + + log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") + return &pbGroup.InviteUserToGroupResp{}, nil } 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 - memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) + groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) resp.ErrCode = constant.ErrDB.ErrCode resp.ErrMsg = constant.ErrDB.ErrMsg - log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) return &resp, nil } + if groupInfo.GroupType != constant.SuperGroup { + memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) + if err != nil { + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = constant.ErrDB.ErrMsg + log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) + return &resp, nil + } - for _, v := range memberList { - //log.Debug(req.OperationID, v) - var node open_im_sdk.GroupMemberFullInfo - cp.GroupMemberDBCopyOpenIM(&node, &v) - //log.Debug(req.OperationID, "db value:", v.MuteEndTime, "seconds: ", v.MuteEndTime.Unix()) - //log.Debug(req.OperationID, "cp value: ", node) - resp.MemberList = append(resp.MemberList, &node) + for _, v := range memberList { + //log.Debug(req.OperationID, v) + var node open_im_sdk.GroupMemberFullInfo + cp.GroupMemberDBCopyOpenIM(&node, &v) + //log.Debug(req.OperationID, "db value:", v.MuteEndTime, "seconds: ", v.MuteEndTime.Unix()) + //log.Debug(req.OperationID, "cp value: ", node) + resp.MemberList = append(resp.MemberList, &node) + } + } else { + groupInfo, err := db.DB.GetSuperGroup(req.GroupID) + if err != nil { + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = constant.ErrDB.ErrMsg + log.NewError(req.OperationID, "GetSuperGroup failed,", err.Error(), req.GroupID) + return &resp, nil + } + for _, userID := range groupInfo.MemberIDList { + var node open_im_sdk.GroupMemberFullInfo + node.UserID = userID + resp.MemberList = append(resp.MemberList, &node) + } } + log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String()) return &resp, nil } @@ -424,88 +461,104 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) { log.NewInfo(req.OperationID, "KickGroupMember args ", req.String()) - ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID) + groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupInfoByGroupID", req.GroupID, err.Error()) return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil } - //op is group owner? - var flag = 0 - for _, v := range ownerList { - if v.UserID == req.OpUserID { - flag = 1 - log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID) - break + var okUserIDList []string + var resp pbGroup.KickGroupMemberResp + if groupInfo.GroupType != constant.SuperGroup { + ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID) + if err != nil { + log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil + } + //op is group owner? + var flag = 0 + for _, v := range ownerList { + if v.UserID == req.OpUserID { + flag = 1 + log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID) + break + } } - } - //op is app manager - if flag != 1 { - if token_verify.IsManagerUserID(req.OpUserID) { - flag = 1 - log.NewDebug(req.OperationID, "is app manager ", req.OpUserID) + //op is app manager + if flag != 1 { + if token_verify.IsManagerUserID(req.OpUserID) { + flag = 1 + log.NewDebug(req.OperationID, "is app manager ", req.OpUserID) + } } - } - if flag != 1 { - log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID) - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil - } + if flag != 1 { + log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil + } - if len(req.KickedUserIDList) == 0 { - log.NewError(req.OperationID, "failed, kick list 0") - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil - } + if len(req.KickedUserIDList) == 0 { + log.NewError(req.OperationID, "failed, kick list 0") + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil + } - groupOwnerUserID := "" - for _, v := range ownerList { - if v.RoleLevel == constant.GroupOwner { - groupOwnerUserID = v.UserID + groupOwnerUserID := "" + for _, v := range ownerList { + if v.RoleLevel == constant.GroupOwner { + groupOwnerUserID = v.UserID + } } - } - var okUserIDList []string - //remove - var resp pbGroup.KickGroupMemberResp - for _, v := range req.KickedUserIDList { - //owner can‘t kicked - if v == groupOwnerUserID { - log.NewError(req.OperationID, "failed, can't kick owner ", v) - resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) - continue + var okUserIDList []string + //remove + for _, v := range req.KickedUserIDList { + //owner can‘t kicked + if v == groupOwnerUserID { + log.NewError(req.OperationID, "failed, can't kick owner ", v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + continue + } + err := imdb.RemoveGroupMember(req.GroupID, v) + if err != nil { + log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + } else { + log.NewDebug(req.OperationID, "kicked ", v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0}) + okUserIDList = append(okUserIDList, v) + } + + //err = db.DB.DelGroupMember(req.GroupID, v) + //if err != nil { + // log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v) + //} } - err := imdb.RemoveGroupMember(req.GroupID, v) - if err != nil { - log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v) - resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) - } else { - log.NewDebug(req.OperationID, "kicked ", v) - resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0}) - okUserIDList = append(okUserIDList, v) + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + for _, v := range okUserIDList { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = true + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) + } } - - //err = db.DB.DelGroupMember(req.GroupID, v) - //if err != nil { - // log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v) - //} - } - var reqPb pbUser.SetConversationReq - var c pbUser.Conversation - for _, v := range okUserIDList { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsNotInGroup = true - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v) + } else { + okUserIDList = req.KickedUserIDList + if err := db.DB.RemoverUserFromSuperGroup(req.GroupID, okUserIDList); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, req.KickedUserIDList, err.Error()) + resp.ErrCode = constant.ErrDB.ErrCode + resp.ErrMsg = constant.ErrDB.ErrMsg + return &resp, nil } } @@ -525,8 +578,9 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou log.NewError(req.OperationID, "ReduceGroupMemberFromCache rpc logic call failed ", cacheResp.String()) return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil } - - chat.MemberKickedNotification(req, okUserIDList) + if groupInfo.GroupType != constant.SuperGroup { + chat.MemberKickedNotification(req, okUserIDList) + } log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String()) return &resp, nil } @@ -1265,38 +1319,50 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou log.NewError(req.OperationID, "OperateGroupStatus failed ", req.GroupID, constant.GroupStatusDismissed) return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) + groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - //modify quitter conversation info - var reqPb pbUser.SetConversationReq - var c pbUser.Conversation - for _, v := range memberList { - reqPb.OperationID = req.OperationID - c.OwnerUserID = v.UserID - c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) - c.ConversationType = constant.GroupChatType - c.GroupID = req.GroupID - c.IsNotInGroup = true - reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) - client := pbUser.NewUserClient(etcdConn) - respPb, err := client.SetConversation(context.Background(), &reqPb) + if groupInfo.GroupType != constant.SuperGroup { + memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.UserID) - } else { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.UserID) + log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID) } - } - chat.GroupDismissedNotification(req) - err = imdb.DeleteGroupMemberByGroupID(req.GroupID) - if err != nil { - log.NewError(req.OperationID, "DeleteGroupMemberByGroupID failed ", req.GroupID) - return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + //modify quitter conversation info + var reqPb pbUser.SetConversationReq + var c pbUser.Conversation + for _, v := range memberList { + reqPb.OperationID = req.OperationID + c.OwnerUserID = v.UserID + c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) + c.ConversationType = constant.GroupChatType + c.GroupID = req.GroupID + c.IsNotInGroup = true + reqPb.Conversation = &c + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := pbUser.NewUserClient(etcdConn) + respPb, err := client.SetConversation(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.UserID) + } else { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.UserID) + } + } + err = imdb.DeleteGroupMemberByGroupID(req.GroupID) + if err != nil { + log.NewError(req.OperationID, "DeleteGroupMemberByGroupID failed ", req.GroupID) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + chat.GroupDismissedNotification(req) + } else { + err = db.DB.DeleteSuperGroup(req.GroupID) + if err != nil { + log.NewError(req.OperationID, "DeleteGroupMemberByGroupID failed ", req.GroupID) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}) return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index ad4413675..2f727c159 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -29,6 +29,7 @@ const cTag = "tag" const cSendLog = "send_log" const cWorkMoment = "work_moment" const cCommentMsg = "comment_msg" +const cSuperGroup = "super_group" const singleGocMsgNum = 5000 func GetSingleGocMsgNum() int { @@ -878,8 +879,51 @@ func (d *DataBases) GetUserFriendWorkMoments(showNumber, pageNumber int32, userI return workMomentList, err } -func (d *DataBases) CreateSuperGroup() { +type SuperGroup struct { + GroupID string `bson:"group_id"` + MemberNumCount int `bson:"member_num_count"` + MemberIDList []string `bson:"member_id_list"` +} + +func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, memberNumCount int) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + superGroup := SuperGroup{ + GroupID: groupID, + MemberNumCount: memberNumCount, + MemberIDList: initMemberIDList, + } + _, err := c.InsertOne(ctx, superGroup) + return err +} +func (d *DataBases) GetSuperGroup(groupID string) (SuperGroup, error) { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + superGroup := SuperGroup{} + err := c.FindOne(ctx, bson.M{"group_id": groupID}).Decode(&superGroup) + return superGroup, err +} + +func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": userIDList}}) + return err +} + +func (d *DataBases) RemoverUserFromSuperGroup(groupID string, userIDList []string) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + return err +} + +func (d *DataBases) DeleteSuperGroup(groupID string) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + _, err := c.DeleteOne(ctx, bson.M{"group_id": groupID}) + return err } func generateTagID(tagName, userID string) string { From cc6d8d28b55bccb07502838597281539ef0fc401 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 18:53:47 +0800 Subject: [PATCH 003/256] superGroup --- internal/rpc/group/group.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 8c550684f..87fd76a69 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -126,7 +126,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } } if req.GroupInfo.GroupType != constant.SuperGroup { - var okUserIDList []string //to group member for _, user := range req.InitMemberList { us, err := imdb.GetUserByUserID(user.UserID) @@ -174,7 +173,6 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId) resp.ErrCode = constant.ErrDB.ErrCode resp.ErrMsg = err.Error() + ": CreateSuperGroup failed" - return resp, nil } } From 8cdcd7105adf379f50503ec8a913f4ed62530a66 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 18:57:04 +0800 Subject: [PATCH 004/256] superGroup --- internal/rpc/group/group.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 87fd76a69..2fe567b4e 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -506,8 +506,6 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou groupOwnerUserID = v.UserID } } - - var okUserIDList []string //remove for _, v := range req.KickedUserIDList { //owner can‘t kicked From b3ba06aecb2225f0243c60b4e95dfdd1838c375b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 27 May 2022 19:16:47 +0800 Subject: [PATCH 005/256] superGroup --- pkg/common/db/mongoModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 2f727c159..fb87df4e0 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -908,7 +908,7 @@ func (d *DataBases) GetSuperGroup(groupID string) (SuperGroup, error) { func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": userIDList}}) + _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": bson.M{"$each": userIDList}}}) return err } From 1bfefbd08336e8fa4c12458c07e5d1a392fd2de5 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Fri, 27 May 2022 20:29:39 +0800 Subject: [PATCH 006/256] super group --- pkg/proto/auto_proto.sh | 6 +- pkg/proto/sdk_ws/ws.pb.go | 824 +++++++++++++++++++++++--------------- pkg/proto/sdk_ws/ws.proto | 33 +- 3 files changed, 534 insertions(+), 329 deletions(-) diff --git a/pkg/proto/auto_proto.sh b/pkg/proto/auto_proto.sh index 25408d46e..7ecece08e 100644 --- a/pkg/proto/auto_proto.sh +++ b/pkg/proto/auto_proto.sh @@ -4,10 +4,14 @@ source ./proto_dir.cfg for ((i = 0; i < ${#all_proto[*]}; i++)); do proto=${all_proto[$i]} - protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto + + protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto s=`echo $proto | sed 's/ //g'` v=${s//proto/pb.go} protoc-go-inject-tag -input=./$v echo "protoc --go_out=plugins=grpc:." $proto done echo "proto file generate success..." + +find ./ -type f -path "*.pb.go"|xargs sed -i 's/\".\/sdk_ws\"/\"Open_IM\/pkg\/proto\/sdk_ws\"/g' + diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 204cdfa50..8ed8e4a1c 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,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_e8e186fa2bf7c43d, []int{0} + return fileDescriptor_ws_b2b8932ad953b270, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,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_e8e186fa2bf7c43d, []int{1} + return fileDescriptor_ws_b2b8932ad953b270, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,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_e8e186fa2bf7c43d, []int{2} + return fileDescriptor_ws_b2b8932ad953b270, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,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_e8e186fa2bf7c43d, []int{3} + return fileDescriptor_ws_b2b8932ad953b270, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,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_e8e186fa2bf7c43d, []int{4} + return fileDescriptor_ws_b2b8932ad953b270, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,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_e8e186fa2bf7c43d, []int{5} + return fileDescriptor_ws_b2b8932ad953b270, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,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_e8e186fa2bf7c43d, []int{6} + return fileDescriptor_ws_b2b8932ad953b270, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,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_e8e186fa2bf7c43d, []int{7} + return fileDescriptor_ws_b2b8932ad953b270, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,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_e8e186fa2bf7c43d, []int{8} + return fileDescriptor_ws_b2b8932ad953b270, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,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_e8e186fa2bf7c43d, []int{9} + return fileDescriptor_ws_b2b8932ad953b270, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,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_e8e186fa2bf7c43d, []int{10} + return fileDescriptor_ws_b2b8932ad953b270, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,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_e8e186fa2bf7c43d, []int{11} + return fileDescriptor_ws_b2b8932ad953b270, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,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_e8e186fa2bf7c43d, []int{12} + return fileDescriptor_ws_b2b8932ad953b270, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1264,20 +1264,160 @@ func (m *UserInDepartment) GetDepartmentMemberList() []*DepartmentMember { return nil } -type PullMessageBySeqListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` +// /////////////////////////////////base end///////////////////////////////////// +type PullMessageBySeqListReq struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` + SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + GroupSeqList map[string]*SeqList `protobuf:"bytes,4,rep,name=groupSeqList" json:"groupSeqList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +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_b2b8932ad953b270, []int{13} +} +func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) +} +func (m *PullMessageBySeqListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PullMessageBySeqListReq.Marshal(b, m, deterministic) +} +func (dst *PullMessageBySeqListReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_PullMessageBySeqListReq.Merge(dst, src) +} +func (m *PullMessageBySeqListReq) XXX_Size() int { + return xxx_messageInfo_PullMessageBySeqListReq.Size(m) +} +func (m *PullMessageBySeqListReq) XXX_DiscardUnknown() { + xxx_messageInfo_PullMessageBySeqListReq.DiscardUnknown(m) +} + +var xxx_messageInfo_PullMessageBySeqListReq proto.InternalMessageInfo + +func (m *PullMessageBySeqListReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *PullMessageBySeqListReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + +func (m *PullMessageBySeqListReq) GetGroupSeqList() map[string]*SeqList { + if m != nil { + return m.GroupSeqList + } + return nil +} + +type SeqList struct { + SeqList []uint32 `protobuf:"varint,1,rep,packed,name=seqList" json:"seqList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +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_b2b8932ad953b270, []int{14} +} +func (m *SeqList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SeqList.Unmarshal(m, b) +} +func (m *SeqList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SeqList.Marshal(b, m, deterministic) +} +func (dst *SeqList) XXX_Merge(src proto.Message) { + xxx_messageInfo_SeqList.Merge(dst, src) +} +func (m *SeqList) XXX_Size() int { + return xxx_messageInfo_SeqList.Size(m) +} +func (m *SeqList) XXX_DiscardUnknown() { + xxx_messageInfo_SeqList.DiscardUnknown(m) +} + +var xxx_messageInfo_SeqList proto.InternalMessageInfo + +func (m *SeqList) GetSeqList() []uint32 { + if m != nil { + return m.SeqList + } + return nil +} + +type MsgDataList struct { + MsgDataList []*MsgData `protobuf:"bytes,1,rep,name=msgDataList" json:"msgDataList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } +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_b2b8932ad953b270, []int{15} +} +func (m *MsgDataList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgDataList.Unmarshal(m, b) +} +func (m *MsgDataList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgDataList.Marshal(b, m, deterministic) +} +func (dst *MsgDataList) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDataList.Merge(dst, src) +} +func (m *MsgDataList) XXX_Size() int { + return xxx_messageInfo_MsgDataList.Size(m) +} +func (m *MsgDataList) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDataList.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDataList proto.InternalMessageInfo + +func (m *MsgDataList) GetMsgDataList() []*MsgData { + if m != nil { + return m.MsgDataList + } + return nil +} + +type PullMessageBySeqListResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` + GroupMsgDataList map[string]*MsgDataList `protobuf:"bytes,4,rep,name=groupMsgDataList" json:"groupMsgDataList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e8e186fa2bf7c43d, []int{13} + return fileDescriptor_ws_b2b8932ad953b270, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1318,61 +1458,16 @@ func (m *PullMessageBySeqListResp) GetList() []*MsgData { return nil } -type PullMessageBySeqListReq struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_e8e186fa2bf7c43d, []int{14} -} -func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) -} -func (m *PullMessageBySeqListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListReq.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListReq.Merge(dst, src) -} -func (m *PullMessageBySeqListReq) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListReq.Size(m) -} -func (m *PullMessageBySeqListReq) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListReq proto.InternalMessageInfo - -func (m *PullMessageBySeqListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { +func (m *PullMessageBySeqListResp) GetGroupMsgDataList() map[string]*MsgDataList { if m != nil { - return m.SeqList + return m.GroupMsgDataList } return nil } type GetMaxAndMinSeqReq struct { + GroupIDList []string `protobuf:"bytes,1,rep,name=groupIDList" json:"groupIDList,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1382,7 +1477,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_e8e186fa2bf7c43d, []int{15} + return fileDescriptor_ws_b2b8932ad953b270, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1402,7 +1497,21 @@ func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo -type GetMaxAndMinSeqResp struct { +func (m *GetMaxAndMinSeqReq) GetGroupIDList() []string { + if m != nil { + return m.GroupIDList + } + return nil +} + +func (m *GetMaxAndMinSeqReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +type MaxAndMinSeq struct { MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1410,11 +1519,58 @@ type GetMaxAndMinSeqResp struct { XXX_sizecache int32 `json:"-"` } +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_b2b8932ad953b270, []int{18} +} +func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) +} +func (m *MaxAndMinSeq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MaxAndMinSeq.Marshal(b, m, deterministic) +} +func (dst *MaxAndMinSeq) XXX_Merge(src proto.Message) { + xxx_messageInfo_MaxAndMinSeq.Merge(dst, src) +} +func (m *MaxAndMinSeq) XXX_Size() int { + return xxx_messageInfo_MaxAndMinSeq.Size(m) +} +func (m *MaxAndMinSeq) XXX_DiscardUnknown() { + xxx_messageInfo_MaxAndMinSeq.DiscardUnknown(m) +} + +var xxx_messageInfo_MaxAndMinSeq proto.InternalMessageInfo + +func (m *MaxAndMinSeq) GetMaxSeq() uint32 { + if m != nil { + return m.MaxSeq + } + return 0 +} + +func (m *MaxAndMinSeq) GetMinSeq() uint32 { + if m != nil { + return m.MinSeq + } + return 0 +} + +type GetMaxAndMinSeqResp struct { + MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` + MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` + GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,3,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + 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_e8e186fa2bf7c43d, []int{16} + return fileDescriptor_ws_b2b8932ad953b270, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1448,6 +1604,13 @@ func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { return 0 } +func (m *GetMaxAndMinSeqResp) GetGroupMaxAndMinSeq() map[string]*MaxAndMinSeq { + if m != nil { + return m.GroupMaxAndMinSeq + } + return nil +} + type UserSendMsgResp struct { ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID" json:"serverMsgID,omitempty"` ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` @@ -1461,7 +1624,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_e8e186fa2bf7c43d, []int{17} + return fileDescriptor_ws_b2b8932ad953b270, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1531,7 +1694,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_e8e186fa2bf7c43d, []int{18} + return fileDescriptor_ws_b2b8932ad953b270, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1699,7 +1862,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_e8e186fa2bf7c43d, []int{19} + return fileDescriptor_ws_b2b8932ad953b270, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1767,7 +1930,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_e8e186fa2bf7c43d, []int{20} + return fileDescriptor_ws_b2b8932ad953b270, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1824,7 +1987,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_e8e186fa2bf7c43d, []int{21} + return fileDescriptor_ws_b2b8932ad953b270, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1893,7 +2056,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_e8e186fa2bf7c43d, []int{22} + return fileDescriptor_ws_b2b8932ad953b270, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1948,7 +2111,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_e8e186fa2bf7c43d, []int{23} + return fileDescriptor_ws_b2b8932ad953b270, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2004,7 +2167,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_e8e186fa2bf7c43d, []int{24} + return fileDescriptor_ws_b2b8932ad953b270, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2059,7 +2222,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_e8e186fa2bf7c43d, []int{25} + return fileDescriptor_ws_b2b8932ad953b270, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2114,7 +2277,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_e8e186fa2bf7c43d, []int{26} + return fileDescriptor_ws_b2b8932ad953b270, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2170,7 +2333,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_e8e186fa2bf7c43d, []int{27} + return fileDescriptor_ws_b2b8932ad953b270, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2233,7 +2396,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_e8e186fa2bf7c43d, []int{28} + return fileDescriptor_ws_b2b8932ad953b270, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2296,7 +2459,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_e8e186fa2bf7c43d, []int{29} + return fileDescriptor_ws_b2b8932ad953b270, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2358,7 +2521,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_e8e186fa2bf7c43d, []int{30} + return fileDescriptor_ws_b2b8932ad953b270, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2412,7 +2575,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_e8e186fa2bf7c43d, []int{31} + return fileDescriptor_ws_b2b8932ad953b270, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2468,7 +2631,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_e8e186fa2bf7c43d, []int{32} + return fileDescriptor_ws_b2b8932ad953b270, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2537,7 +2700,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_e8e186fa2bf7c43d, []int{33} + return fileDescriptor_ws_b2b8932ad953b270, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2598,7 +2761,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_e8e186fa2bf7c43d, []int{34} + return fileDescriptor_ws_b2b8932ad953b270, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2652,7 +2815,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_e8e186fa2bf7c43d, []int{35} + return fileDescriptor_ws_b2b8932ad953b270, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2707,7 +2870,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_e8e186fa2bf7c43d, []int{36} + return fileDescriptor_ws_b2b8932ad953b270, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2767,7 +2930,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_e8e186fa2bf7c43d, []int{37} + return fileDescriptor_ws_b2b8932ad953b270, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2814,7 +2977,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_e8e186fa2bf7c43d, []int{38} + return fileDescriptor_ws_b2b8932ad953b270, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2867,7 +3030,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_e8e186fa2bf7c43d, []int{39} + return fileDescriptor_ws_b2b8932ad953b270, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2913,7 +3076,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_e8e186fa2bf7c43d, []int{40} + return fileDescriptor_ws_b2b8932ad953b270, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2953,7 +3116,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_e8e186fa2bf7c43d, []int{41} + return fileDescriptor_ws_b2b8932ad953b270, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3000,7 +3163,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_e8e186fa2bf7c43d, []int{42} + return fileDescriptor_ws_b2b8932ad953b270, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3048,7 +3211,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_e8e186fa2bf7c43d, []int{43} + return fileDescriptor_ws_b2b8932ad953b270, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3101,7 +3264,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_e8e186fa2bf7c43d, []int{44} + return fileDescriptor_ws_b2b8932ad953b270, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3139,7 +3302,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_e8e186fa2bf7c43d, []int{45} + return fileDescriptor_ws_b2b8932ad953b270, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3177,7 +3340,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_e8e186fa2bf7c43d, []int{46} + return fileDescriptor_ws_b2b8932ad953b270, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3215,7 +3378,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_e8e186fa2bf7c43d, []int{47} + return fileDescriptor_ws_b2b8932ad953b270, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3254,7 +3417,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_e8e186fa2bf7c43d, []int{48} + return fileDescriptor_ws_b2b8932ad953b270, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3293,7 +3456,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_e8e186fa2bf7c43d, []int{49} + return fileDescriptor_ws_b2b8932ad953b270, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3333,7 +3496,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_e8e186fa2bf7c43d, []int{50} + return fileDescriptor_ws_b2b8932ad953b270, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3388,7 +3551,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_e8e186fa2bf7c43d, []int{51} + return fileDescriptor_ws_b2b8932ad953b270, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3442,7 +3605,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_e8e186fa2bf7c43d, []int{52} + return fileDescriptor_ws_b2b8932ad953b270, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3488,7 +3651,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_e8e186fa2bf7c43d, []int{53} + return fileDescriptor_ws_b2b8932ad953b270, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3541,7 +3704,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_e8e186fa2bf7c43d, []int{54} + return fileDescriptor_ws_b2b8932ad953b270, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3808,7 +3971,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_e8e186fa2bf7c43d, []int{55} + return fileDescriptor_ws_b2b8932ad953b270, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4076,7 +4239,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_e8e186fa2bf7c43d, []int{56} + return fileDescriptor_ws_b2b8932ad953b270, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4172,7 +4335,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_e8e186fa2bf7c43d, []int{57} + return fileDescriptor_ws_b2b8932ad953b270, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4227,7 +4390,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_e8e186fa2bf7c43d, []int{58} + return fileDescriptor_ws_b2b8932ad953b270, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4288,7 +4451,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_e8e186fa2bf7c43d, []int{59} + return fileDescriptor_ws_b2b8932ad953b270, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4343,7 +4506,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_e8e186fa2bf7c43d, []int{60} + return fileDescriptor_ws_b2b8932ad953b270, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4404,7 +4567,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_e8e186fa2bf7c43d, []int{61} + return fileDescriptor_ws_b2b8932ad953b270, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4459,7 +4622,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_e8e186fa2bf7c43d, []int{62} + return fileDescriptor_ws_b2b8932ad953b270, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4517,7 +4680,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_e8e186fa2bf7c43d, []int{63} + return fileDescriptor_ws_b2b8932ad953b270, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4552,7 +4715,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_e8e186fa2bf7c43d, []int{64} + return fileDescriptor_ws_b2b8932ad953b270, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4620,7 +4783,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_e8e186fa2bf7c43d, []int{65} + return fileDescriptor_ws_b2b8932ad953b270, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4674,7 +4837,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_e8e186fa2bf7c43d, []int{66} + return fileDescriptor_ws_b2b8932ad953b270, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4725,7 +4888,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_e8e186fa2bf7c43d, []int{67} + return fileDescriptor_ws_b2b8932ad953b270, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4760,7 +4923,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_e8e186fa2bf7c43d, []int{68} + return fileDescriptor_ws_b2b8932ad953b270, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4825,7 +4988,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_e8e186fa2bf7c43d, []int{69} + return fileDescriptor_ws_b2b8932ad953b270, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -4859,7 +5022,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_e8e186fa2bf7c43d, []int{70} + return fileDescriptor_ws_b2b8932ad953b270, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -4919,7 +5082,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_e8e186fa2bf7c43d, []int{71} + return fileDescriptor_ws_b2b8932ad953b270, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -4967,10 +5130,16 @@ func init() { proto.RegisterType((*DepartmentMember)(nil), "server_api_params.DepartmentMember") proto.RegisterType((*UserDepartmentMember)(nil), "server_api_params.UserDepartmentMember") proto.RegisterType((*UserInDepartment)(nil), "server_api_params.UserInDepartment") - proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") + proto.RegisterMapType((map[string]*SeqList)(nil), "server_api_params.PullMessageBySeqListReq.GroupSeqListEntry") + proto.RegisterType((*SeqList)(nil), "server_api_params.seqList") + proto.RegisterType((*MsgDataList)(nil), "server_api_params.MsgDataList") + proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") + proto.RegisterMapType((map[string]*MsgDataList)(nil), "server_api_params.PullMessageBySeqListResp.GroupMsgDataListEntry") proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") + proto.RegisterType((*MaxAndMinSeq)(nil), "server_api_params.MaxAndMinSeq") proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") + proto.RegisterMapType((map[string]*MaxAndMinSeq)(nil), "server_api_params.GetMaxAndMinSeqResp.GroupMaxAndMinSeqEntry") proto.RegisterType((*UserSendMsgResp)(nil), "server_api_params.UserSendMsgResp") proto.RegisterType((*MsgData)(nil), "server_api_params.MsgData") proto.RegisterMapType((map[string]bool)(nil), "server_api_params.MsgData.OptionsEntry") @@ -5029,200 +5198,211 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_e8e186fa2bf7c43d) } - -var fileDescriptor_ws_e8e186fa2bf7c43d = []byte{ - // 3059 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0xcd, 0x6f, 0x24, 0x57, - 0xf1, 0xbf, 0xee, 0xf1, 0x8c, 0x3d, 0x35, 0xfe, 0xec, 0xdd, 0x9f, 0x33, 0x98, 0xcd, 0x62, 0x1a, - 0x2b, 0x84, 0x00, 0x1b, 0x94, 0x08, 0x09, 0x12, 0x58, 0xb4, 0xb6, 0xf7, 0x2b, 0xac, 0xbd, 0x4e, - 0xcf, 0x2e, 0x41, 0x80, 0x14, 0xb5, 0xa7, 0x9f, 0xc7, 0x1d, 0xf7, 0xf4, 0xeb, 0xe9, 0x0f, 0xef, - 0x2e, 0x42, 0x42, 0x02, 0x09, 0x71, 0xe3, 0x04, 0x07, 0x2e, 0x48, 0x5c, 0x10, 0x28, 0x8a, 0x22, - 0x04, 0x12, 0x07, 0x84, 0x38, 0xf0, 0x0f, 0x70, 0x44, 0x5c, 0x10, 0x67, 0xae, 0x1c, 0x90, 0x90, - 0x40, 0xaf, 0xea, 0x75, 0xf7, 0x7b, 0xdd, 0x33, 0xf6, 0xac, 0x65, 0x65, 0x37, 0x5a, 0x6e, 0x53, - 0xd5, 0xaf, 0xea, 0xd5, 0xab, 0xaa, 0x57, 0x55, 0xef, 0xd5, 0x1b, 0x58, 0x4a, 0xbc, 0xa3, 0xb7, - 0x1f, 0x24, 0x2f, 0x3f, 0x48, 0xae, 0x44, 0x31, 0x4f, 0xb9, 0xb5, 0x92, 0xb0, 0xf8, 0x98, 0xc5, - 0x6f, 0xbb, 0x91, 0xff, 0x76, 0xe4, 0xc6, 0xee, 0x30, 0xb1, 0xff, 0x69, 0x42, 0xfb, 0x66, 0xcc, - 0xb3, 0xe8, 0x76, 0x78, 0xc0, 0xad, 0x2e, 0xcc, 0x0e, 0x10, 0xd8, 0xee, 0x1a, 0xeb, 0xc6, 0x8b, - 0x6d, 0x27, 0x07, 0xad, 0x4b, 0xd0, 0xc6, 0x9f, 0xbb, 0xee, 0x90, 0x75, 0x4d, 0xfc, 0x56, 0x22, - 0x2c, 0x1b, 0xe6, 0x43, 0x9e, 0xfa, 0x07, 0x7e, 0xdf, 0x4d, 0x7d, 0x1e, 0x76, 0x1b, 0x38, 0x40, - 0xc3, 0x89, 0x31, 0x7e, 0x98, 0xc6, 0xdc, 0xcb, 0xfa, 0x38, 0x66, 0x86, 0xc6, 0xa8, 0x38, 0x31, - 0xff, 0x81, 0xdb, 0x67, 0xf7, 0x9d, 0x3b, 0xdd, 0x26, 0xcd, 0x2f, 0x41, 0x6b, 0x1d, 0x3a, 0xfc, - 0x41, 0xc8, 0xe2, 0xfb, 0x09, 0x8b, 0x6f, 0x6f, 0x77, 0x5b, 0xf8, 0x55, 0x45, 0x59, 0x97, 0x01, - 0xfa, 0x31, 0x73, 0x53, 0x76, 0xcf, 0x1f, 0xb2, 0xee, 0xec, 0xba, 0xf1, 0xe2, 0x82, 0xa3, 0x60, - 0x04, 0x87, 0x21, 0x1b, 0xee, 0xb3, 0x78, 0x8b, 0x67, 0x61, 0xda, 0x9d, 0xc3, 0x01, 0x2a, 0xca, - 0x5a, 0x04, 0x93, 0x3d, 0xec, 0xb6, 0x91, 0xb5, 0xc9, 0x1e, 0x5a, 0xab, 0xd0, 0x4a, 0x52, 0x37, - 0xcd, 0x92, 0x2e, 0xac, 0x1b, 0x2f, 0x36, 0x1d, 0x09, 0x59, 0x1b, 0xb0, 0x80, 0x7c, 0x79, 0x2e, - 0x4d, 0x07, 0x49, 0x74, 0x64, 0xa1, 0xb1, 0x7b, 0x8f, 0x22, 0xd6, 0x9d, 0x47, 0x06, 0x25, 0xc2, - 0xfe, 0x8b, 0x09, 0x17, 0x50, 0xef, 0x3b, 0x28, 0xc0, 0x8d, 0x2c, 0x08, 0x4e, 0xb1, 0xc0, 0x2a, - 0xb4, 0x32, 0x9a, 0x8e, 0xd4, 0x2f, 0x21, 0x31, 0x4f, 0xcc, 0x03, 0x76, 0x87, 0x1d, 0xb3, 0x00, - 0x15, 0xdf, 0x74, 0x4a, 0x84, 0xb5, 0x06, 0x73, 0xef, 0x70, 0x3f, 0x44, 0x9d, 0xcc, 0xe0, 0xc7, - 0x02, 0x16, 0xdf, 0x42, 0xbf, 0x7f, 0x14, 0x0a, 0x93, 0x92, 0xba, 0x0b, 0x58, 0xb5, 0x44, 0x4b, - 0xb7, 0xc4, 0x0b, 0xb0, 0xe8, 0x46, 0xd1, 0x8e, 0x1b, 0x0e, 0x58, 0x4c, 0x93, 0xce, 0x22, 0xdf, - 0x0a, 0x56, 0xd8, 0x43, 0xcc, 0xd4, 0xe3, 0x59, 0xdc, 0x67, 0xa8, 0xee, 0xa6, 0xa3, 0x60, 0x04, - 0x1f, 0x1e, 0xb1, 0x58, 0x51, 0x23, 0x69, 0xbe, 0x82, 0x95, 0x56, 0x81, 0xc2, 0x2a, 0xc2, 0x8e, - 0x59, 0xca, 0xae, 0x87, 0x1e, 0x2e, 0xaa, 0x23, 0xed, 0x58, 0xa2, 0xec, 0x1f, 0x18, 0xb0, 0xb8, - 0x97, 0xed, 0x07, 0x7e, 0x1f, 0x59, 0x08, 0xb5, 0x96, 0xca, 0x33, 0x34, 0xe5, 0xa9, 0x2a, 0x30, - 0x27, 0xab, 0xa0, 0xa1, 0xab, 0x60, 0x15, 0x5a, 0x03, 0x16, 0x7a, 0x2c, 0x96, 0x2a, 0x95, 0x90, - 0x14, 0xb5, 0x99, 0x8b, 0x6a, 0xff, 0xc4, 0x84, 0xb9, 0x0f, 0x58, 0x84, 0x75, 0xe8, 0x44, 0x87, - 0x3c, 0x64, 0xbb, 0x99, 0x70, 0x2b, 0x29, 0x8b, 0x8a, 0xb2, 0x2e, 0x42, 0x73, 0xdf, 0x8f, 0xd3, - 0x43, 0xb4, 0xeb, 0x82, 0x43, 0x80, 0xc0, 0xb2, 0xa1, 0xeb, 0x93, 0x31, 0xdb, 0x0e, 0x01, 0x72, - 0x41, 0x73, 0x85, 0xee, 0xf5, 0x3d, 0xd6, 0xae, 0xed, 0xb1, 0xba, 0x6f, 0xc0, 0x38, 0xdf, 0xb0, - 0xff, 0x65, 0x00, 0xdc, 0x88, 0x7d, 0x16, 0x7a, 0xa8, 0x9a, 0xca, 0xe6, 0x36, 0xea, 0x9b, 0x7b, - 0x15, 0x5a, 0x31, 0x1b, 0xba, 0xf1, 0x51, 0xee, 0xfc, 0x04, 0x55, 0x04, 0x6a, 0xd4, 0x04, 0x7a, - 0x1d, 0xe0, 0x00, 0xe7, 0x11, 0x7c, 0x50, 0x55, 0x9d, 0x57, 0x3e, 0x7a, 0xa5, 0x16, 0x06, 0xaf, - 0xe4, 0x56, 0x72, 0x94, 0xe1, 0x62, 0x67, 0xb9, 0x9e, 0x27, 0x1d, 0xb8, 0x49, 0x3b, 0xab, 0x40, - 0x8c, 0xf1, 0xdf, 0xd6, 0x09, 0xfe, 0x3b, 0x5b, 0x38, 0xc5, 0x3f, 0x0c, 0x68, 0x6f, 0x06, 0x6e, - 0xff, 0x68, 0xca, 0xa5, 0xeb, 0x4b, 0x34, 0x6b, 0x4b, 0xbc, 0x09, 0x0b, 0xfb, 0x82, 0x5d, 0xbe, - 0x04, 0xd4, 0x42, 0xe7, 0x95, 0x8f, 0x8f, 0x59, 0xa5, 0xbe, 0x29, 0x1c, 0x9d, 0x4e, 0x5f, 0xee, - 0xcc, 0xe9, 0xcb, 0x6d, 0x9e, 0xb0, 0xdc, 0x56, 0xb1, 0xdc, 0x3f, 0x9b, 0x30, 0x8f, 0x81, 0xce, - 0x61, 0xa3, 0x8c, 0x25, 0xa9, 0xf5, 0x65, 0x98, 0xcb, 0x72, 0x51, 0x8d, 0x69, 0x45, 0x2d, 0x48, - 0xac, 0xd7, 0x64, 0x58, 0x45, 0x7a, 0x13, 0xe9, 0x2f, 0x8d, 0xa1, 0x2f, 0x72, 0x9a, 0x53, 0x0e, - 0x17, 0x29, 0xe8, 0xd0, 0x0d, 0xbd, 0x80, 0x39, 0x2c, 0xc9, 0x82, 0x54, 0x46, 0x4b, 0x0d, 0x47, - 0x9e, 0x36, 0xda, 0x49, 0x06, 0x32, 0x41, 0x49, 0x48, 0x68, 0x87, 0xc6, 0x89, 0x4f, 0xb4, 0xf4, - 0x12, 0x21, 0x36, 0x6a, 0xcc, 0x46, 0x68, 0x21, 0xda, 0x56, 0x39, 0x58, 0xce, 0x29, 0xb5, 0x46, - 0x8e, 0xa0, 0xe1, 0x84, 0x89, 0x09, 0x46, 0x06, 0x94, 0x99, 0x14, 0x4c, 0x35, 0x31, 0xd9, 0x7f, - 0x6d, 0xc0, 0x02, 0x6d, 0x9f, 0x5c, 0xa9, 0x97, 0x85, 0x9f, 0xf3, 0xa1, 0xe6, 0x45, 0x0a, 0x46, - 0x48, 0x21, 0xa0, 0x5d, 0x3d, 0xd0, 0x68, 0x38, 0xe1, 0x8a, 0x02, 0xbe, 0xa1, 0x05, 0x1c, 0x15, - 0x95, 0xcf, 0x72, 0x53, 0x0d, 0x3c, 0x0a, 0x46, 0x84, 0xb2, 0x94, 0x6b, 0xde, 0x51, 0xc0, 0x82, - 0x36, 0xe5, 0xc5, 0xfc, 0xe4, 0x1f, 0x0a, 0x46, 0xe8, 0x37, 0xe5, 0xf9, 0xdc, 0xa4, 0xa4, 0x12, - 0x41, 0x9c, 0xe5, 0xbc, 0x94, 0x4a, 0x0a, 0xb8, 0x66, 0xd5, 0xf6, 0x89, 0x56, 0x05, 0xcd, 0xaa, - 0xfa, 0xe6, 0xea, 0xd4, 0x36, 0xd7, 0x06, 0x2c, 0x10, 0x9f, 0xdc, 0xe9, 0xe7, 0x29, 0xd5, 0x6b, - 0x48, 0xdd, 0x37, 0x16, 0xaa, 0xbe, 0xa1, 0x5b, 0x77, 0x71, 0x82, 0x75, 0x97, 0x0a, 0xeb, 0xfe, - 0xda, 0x04, 0xd8, 0x66, 0x91, 0x1b, 0xa7, 0x43, 0x16, 0xa6, 0x62, 0x79, 0x5e, 0x01, 0x15, 0xc6, - 0xd5, 0x70, 0x6a, 0x9e, 0x30, 0xf5, 0x3c, 0x61, 0xc1, 0x0c, 0x2a, 0x9c, 0xac, 0x89, 0xbf, 0x85, - 0x32, 0x23, 0x37, 0x26, 0x6e, 0xe4, 0xe4, 0x05, 0x2c, 0xf2, 0x00, 0x8f, 0x3d, 0x99, 0x39, 0x9a, - 0x0e, 0x01, 0x62, 0xf3, 0x97, 0xf3, 0x61, 0x41, 0xd3, 0xa2, 0xb8, 0xae, 0x63, 0x4f, 0xad, 0xc1, - 0x5e, 0x82, 0xe5, 0x24, 0xdb, 0x2f, 0x17, 0xb7, 0x9b, 0x0d, 0xa5, 0xbb, 0xd7, 0xf0, 0x42, 0xa9, - 0x54, 0x9c, 0x89, 0x41, 0x94, 0x6a, 0x4a, 0x44, 0xb5, 0x2a, 0xb0, 0xdf, 0x35, 0x61, 0xf9, 0x6e, - 0x3c, 0x70, 0x43, 0xff, 0xdb, 0x58, 0x6e, 0x62, 0x00, 0x3f, 0x4b, 0xca, 0x5d, 0x87, 0x0e, 0x0b, - 0x07, 0x81, 0x9f, 0x1c, 0xee, 0x96, 0x7a, 0x53, 0x51, 0xaa, 0xb2, 0x67, 0x26, 0x25, 0xe5, 0xa6, - 0x96, 0x94, 0x57, 0xa1, 0x35, 0xe4, 0xfb, 0x7e, 0x90, 0xfb, 0xbd, 0x84, 0xd0, 0xe7, 0x59, 0xc0, - 0x30, 0x3b, 0x17, 0x3e, 0x9f, 0x23, 0xca, 0x44, 0x3d, 0x37, 0x36, 0x51, 0xb7, 0xd5, 0x44, 0xad, - 0x2b, 0x1e, 0x6a, 0x8a, 0x27, 0x75, 0x75, 0x0a, 0x75, 0xfd, 0xd1, 0x80, 0xe5, 0x52, 0xdd, 0x54, - 0x83, 0x4e, 0x54, 0x57, 0xd5, 0x03, 0xcd, 0x31, 0x1e, 0x58, 0xf8, 0x4d, 0x43, 0xf5, 0x1b, 0xe1, - 0x69, 0x3c, 0xf1, 0x95, 0x7a, 0xbf, 0x80, 0xc5, 0x6c, 0x01, 0x73, 0x15, 0x65, 0x11, 0xa4, 0x54, - 0xdd, 0x2d, 0xad, 0xea, 0xae, 0xe6, 0xd1, 0xdf, 0x19, 0x70, 0x51, 0x58, 0xb9, 0xb6, 0x8c, 0xbb, - 0xb0, 0xcc, 0x2b, 0x9e, 0x20, 0x13, 0xcd, 0x27, 0xc6, 0x24, 0x8a, 0xaa, 0xd3, 0x38, 0x35, 0x62, - 0xc1, 0xd0, 0xab, 0x4c, 0x22, 0x33, 0xcf, 0x38, 0x86, 0x55, 0x79, 0x9c, 0x1a, 0xb1, 0xfd, 0x7b, - 0x03, 0x96, 0x29, 0xb5, 0x29, 0xfb, 0xfc, 0xdc, 0xc5, 0x7e, 0x0b, 0x2e, 0x56, 0x67, 0xbe, 0xe3, - 0x27, 0x69, 0xd7, 0x5c, 0x6f, 0x4c, 0x2b, 0xfa, 0x58, 0x06, 0xf6, 0x77, 0xa0, 0xbb, 0x97, 0x05, - 0xc1, 0x0e, 0x4b, 0x12, 0x77, 0xc0, 0x36, 0x1f, 0xf5, 0xd8, 0x48, 0xe0, 0x1d, 0x96, 0x44, 0x62, - 0x73, 0xb0, 0x38, 0xde, 0xe2, 0x1e, 0x43, 0xe1, 0x9b, 0x4e, 0x0e, 0x0a, 0xbb, 0xb2, 0x38, 0x16, - 0x11, 0x52, 0x96, 0x70, 0x04, 0x59, 0x57, 0x60, 0x26, 0x10, 0x62, 0x35, 0x50, 0xac, 0xb5, 0x31, - 0x62, 0xed, 0x24, 0x83, 0x6d, 0x37, 0x75, 0x1d, 0x1c, 0x67, 0x0f, 0xe1, 0xb9, 0xf1, 0xb3, 0x8f, - 0x26, 0x3a, 0xb0, 0x28, 0xb2, 0xb0, 0x4a, 0xf1, 0x79, 0x58, 0xf8, 0xaf, 0x8a, 0x12, 0x62, 0x27, - 0xc4, 0x07, 0xe5, 0x58, 0x70, 0x72, 0xd0, 0xbe, 0x08, 0xd6, 0x4d, 0x96, 0xee, 0xb8, 0x0f, 0xaf, - 0x85, 0xde, 0x8e, 0x1f, 0xf6, 0xd8, 0xc8, 0x61, 0x23, 0xfb, 0x3a, 0x5c, 0xa8, 0x61, 0x93, 0x08, - 0x37, 0xba, 0xfb, 0xb0, 0xc7, 0x46, 0x28, 0xc0, 0x82, 0x23, 0x21, 0xc4, 0xe3, 0x28, 0x59, 0xbf, - 0x49, 0xc8, 0x1e, 0xc1, 0x92, 0x30, 0x55, 0x8f, 0x85, 0xde, 0x4e, 0x32, 0x40, 0x16, 0xeb, 0xd0, - 0x21, 0x0d, 0xec, 0x24, 0x83, 0xb2, 0x20, 0x54, 0x50, 0x62, 0x44, 0x3f, 0xf0, 0x85, 0x49, 0x70, - 0x84, 0x5c, 0x8d, 0x82, 0x12, 0xdb, 0x2e, 0x61, 0xf2, 0x7c, 0x24, 0xf6, 0x63, 0xc3, 0x29, 0x60, - 0xfb, 0x6f, 0x4d, 0x98, 0x95, 0x0a, 0xc5, 0xad, 0x26, 0x6a, 0xf0, 0x42, 0x5f, 0x04, 0x51, 0xb6, - 0xec, 0x1f, 0x97, 0x47, 0x4d, 0x82, 0xd4, 0xc3, 0x69, 0x43, 0x3f, 0x9c, 0x56, 0x64, 0x9a, 0xa9, - 0xcb, 0x54, 0x59, 0x57, 0xb3, 0xbe, 0x2e, 0x91, 0x1c, 0x30, 0x5e, 0xee, 0x05, 0x6e, 0x7a, 0xc0, - 0xe3, 0xa1, 0x2c, 0xa9, 0x9b, 0x4e, 0x0d, 0x2f, 0x12, 0x12, 0xe1, 0x8a, 0x8a, 0x82, 0x02, 0x43, - 0x05, 0x2b, 0xf2, 0x37, 0x61, 0xf2, 0xca, 0x82, 0xce, 0x32, 0x3a, 0x92, 0x64, 0x4b, 0x12, 0x9f, - 0x87, 0x98, 0xdb, 0xa8, 0x80, 0x50, 0x51, 0x62, 0xe5, 0xc3, 0x64, 0x70, 0x23, 0xe6, 0x43, 0x79, - 0xa2, 0xc9, 0x41, 0x5c, 0x39, 0x0f, 0xd3, 0x3c, 0x2f, 0x76, 0x88, 0x56, 0x41, 0x09, 0x5a, 0x09, - 0x62, 0xf5, 0x30, 0xef, 0xe4, 0xa0, 0xb5, 0x0c, 0x8d, 0x84, 0x8d, 0x64, 0x49, 0x20, 0x7e, 0x6a, - 0x96, 0x5b, 0xd2, 0x2d, 0x57, 0x89, 0xf1, 0xcb, 0xf8, 0x55, 0x8d, 0xf1, 0x65, 0xe0, 0x5c, 0xd1, - 0x02, 0xe7, 0x35, 0x98, 0xe5, 0x91, 0xf0, 0xf3, 0xa4, 0x6b, 0xe1, 0x1e, 0xfb, 0xe4, 0xe4, 0x3d, - 0x76, 0xe5, 0x2e, 0x8d, 0xbc, 0x1e, 0xa6, 0xf1, 0x23, 0x27, 0xa7, 0xb3, 0xee, 0xc0, 0x12, 0x3f, - 0x38, 0x08, 0xfc, 0x90, 0xed, 0x65, 0xc9, 0x21, 0x96, 0xde, 0x17, 0x30, 0x34, 0xd9, 0xe3, 0x42, - 0x93, 0x3e, 0xd2, 0xa9, 0x92, 0x8a, 0x7c, 0xe2, 0xa6, 0x54, 0x3a, 0xe1, 0x8e, 0xbb, 0xb8, 0xde, - 0x10, 0xf9, 0x44, 0xc5, 0xad, 0xbd, 0x06, 0xf3, 0xaa, 0x28, 0x42, 0x55, 0x47, 0xec, 0x91, 0xf4, - 0x53, 0xf1, 0x53, 0x64, 0x9c, 0x63, 0x37, 0xc8, 0x28, 0x83, 0xcf, 0x39, 0x04, 0xbc, 0x66, 0x7e, - 0xc1, 0xb0, 0x7f, 0x6c, 0xc0, 0x52, 0x45, 0x08, 0x31, 0x3a, 0xf5, 0xd3, 0x80, 0x49, 0x0e, 0x04, - 0x88, 0xea, 0xc8, 0x63, 0x49, 0x5f, 0xba, 0x39, 0xfe, 0x96, 0x79, 0xa6, 0x51, 0x9c, 0x79, 0x6d, - 0x98, 0xf7, 0xef, 0xf6, 0x04, 0xa3, 0x1e, 0xcf, 0x42, 0xaf, 0xb8, 0xb7, 0x52, 0x70, 0xc2, 0xcd, - 0xfc, 0xbb, 0xbd, 0x4d, 0xd7, 0x1b, 0x30, 0xba, 0x5d, 0x6a, 0xa2, 0x4c, 0x3a, 0xd2, 0xf6, 0x60, - 0xee, 0x9e, 0x1f, 0x25, 0x5b, 0x7c, 0x38, 0x14, 0xc6, 0xf2, 0x58, 0x2a, 0xf2, 0xb8, 0x81, 0x3e, - 0x21, 0x21, 0xe1, 0x4e, 0x1e, 0x3b, 0x70, 0xb3, 0x20, 0x15, 0x43, 0xf3, 0xcd, 0xad, 0xa0, 0xf0, - 0x5e, 0x25, 0xe1, 0xe1, 0x36, 0x51, 0x93, 0x9c, 0x0a, 0xc6, 0xfe, 0x93, 0x09, 0xcb, 0x78, 0xfa, - 0xd9, 0x42, 0xd7, 0xf0, 0x90, 0xe8, 0x15, 0x68, 0xe2, 0x56, 0x95, 0x19, 0xe5, 0xe4, 0x13, 0x13, - 0x0d, 0xb5, 0xae, 0x42, 0x8b, 0x47, 0x98, 0x86, 0x28, 0xd9, 0xbd, 0x30, 0x89, 0x48, 0xbf, 0xc2, - 0x72, 0x24, 0x95, 0x75, 0x03, 0x60, 0x58, 0x66, 0x1d, 0x0a, 0xef, 0xd3, 0xf2, 0x50, 0x28, 0x85, - 0x72, 0x8b, 0x50, 0x5d, 0xdc, 0x63, 0x35, 0x1c, 0x1d, 0x69, 0xed, 0xc2, 0x22, 0x8a, 0x7d, 0x37, - 0x3f, 0x3a, 0xa3, 0x0d, 0xa6, 0x9f, 0xb1, 0x42, 0x6d, 0xff, 0xdc, 0x90, 0x6a, 0x14, 0x5f, 0x7b, - 0x8c, 0x74, 0x5f, 0xaa, 0xc4, 0x38, 0x93, 0x4a, 0xd6, 0x60, 0x6e, 0x98, 0x29, 0x27, 0xf9, 0x86, - 0x53, 0xc0, 0xa5, 0x89, 0x1a, 0x53, 0x9b, 0xc8, 0xfe, 0x85, 0x01, 0xdd, 0x37, 0xb8, 0x1f, 0xe2, - 0x87, 0x6b, 0x51, 0x14, 0xc8, 0xcb, 0xd6, 0x33, 0xdb, 0xfc, 0x2b, 0xd0, 0x76, 0x89, 0x4d, 0x98, - 0x4a, 0xb3, 0x4f, 0x71, 0x3a, 0x2f, 0x69, 0x94, 0x83, 0x56, 0x43, 0x3d, 0x68, 0xd9, 0xef, 0x19, - 0xb0, 0x48, 0x4a, 0x79, 0x33, 0xf3, 0xd3, 0x33, 0xcb, 0xb7, 0x09, 0x73, 0xa3, 0xcc, 0x4f, 0xcf, - 0xe0, 0x95, 0x05, 0x5d, 0xdd, 0x9f, 0x1a, 0x63, 0xfc, 0xc9, 0x7e, 0xdf, 0x80, 0x4b, 0x55, 0xb5, - 0x5e, 0xeb, 0xf7, 0x59, 0xf4, 0x24, 0xb7, 0x94, 0x76, 0xd0, 0x9c, 0xa9, 0x1c, 0x34, 0xc7, 0x8a, - 0xec, 0xb0, 0x77, 0x58, 0xff, 0xe9, 0x15, 0xf9, 0xfb, 0x26, 0x7c, 0xe4, 0x66, 0xb1, 0xf1, 0xee, - 0xc5, 0x6e, 0x98, 0x1c, 0xb0, 0x38, 0x7e, 0x82, 0xf2, 0xde, 0x81, 0x85, 0x90, 0x3d, 0x28, 0x65, - 0x92, 0xdb, 0x71, 0x5a, 0x36, 0x3a, 0xf1, 0x74, 0xb1, 0xcb, 0xfe, 0xb7, 0x01, 0xcb, 0xc4, 0xe7, - 0xab, 0x7e, 0xff, 0xe8, 0x09, 0x2e, 0x7e, 0x17, 0x16, 0x8f, 0x50, 0x02, 0x01, 0x9d, 0x21, 0x6c, - 0x57, 0xa8, 0xa7, 0x5c, 0xfe, 0x7f, 0x0c, 0x58, 0x21, 0x46, 0xb7, 0xc3, 0x63, 0xff, 0x49, 0x3a, - 0xeb, 0x1e, 0x2c, 0xf9, 0x24, 0xc2, 0x19, 0x15, 0x50, 0x25, 0x9f, 0x52, 0x03, 0xbf, 0x35, 0x60, - 0x89, 0x38, 0x5d, 0x0f, 0x53, 0x16, 0x9f, 0x79, 0xfd, 0xb7, 0xa0, 0xc3, 0xc2, 0x34, 0x76, 0xc3, - 0xb3, 0x44, 0x48, 0x95, 0x74, 0xca, 0x20, 0xf9, 0x9e, 0x01, 0x16, 0xb2, 0xda, 0xf6, 0x93, 0xa1, - 0x9f, 0x24, 0x4f, 0xd0, 0x74, 0xd3, 0x09, 0xfc, 0x53, 0x13, 0x2e, 0x2a, 0x5c, 0x76, 0xb2, 0xf4, - 0x69, 0x17, 0xd9, 0xda, 0x86, 0xb6, 0xa8, 0x11, 0xd4, 0x0e, 0xc6, 0xb4, 0x13, 0x95, 0x84, 0xa2, - 0x8a, 0x45, 0xa0, 0xc7, 0xfa, 0x3c, 0xf4, 0x12, 0x2c, 0x8e, 0x16, 0x1c, 0x0d, 0x27, 0xc2, 0xd0, - 0x9a, 0xc2, 0x66, 0xcb, 0x0d, 0xfb, 0x2c, 0x78, 0x66, 0x54, 0x64, 0xff, 0xca, 0x80, 0x45, 0x1a, - 0xf2, 0xf4, 0x2f, 0x59, 0xe4, 0x7a, 0x72, 0xe4, 0x0f, 0x8d, 0x95, 0x84, 0x7b, 0xad, 0x2a, 0x5c, - 0xd4, 0xba, 0xfa, 0xe9, 0x75, 0xad, 0x5b, 0xd0, 0xe9, 0x1f, 0xba, 0xe1, 0xe0, 0x4c, 0xce, 0xa5, - 0x92, 0xda, 0x29, 0x3c, 0xa7, 0x5e, 0xda, 0x6d, 0xd1, 0x27, 0x5c, 0xfe, 0xab, 0x95, 0xa5, 0x9c, - 0xd8, 0xa1, 0x7c, 0x3c, 0xa5, 0x1f, 0xc1, 0x0a, 0x75, 0x8a, 0x94, 0x9a, 0xd0, 0xea, 0xc2, 0xac, - 0xeb, 0xd1, 0x25, 0x83, 0x81, 0x44, 0x39, 0xa8, 0xf7, 0x00, 0xe5, 0x33, 0x8f, 0xb2, 0x07, 0x78, - 0x19, 0xc0, 0xf5, 0xbc, 0xb7, 0x78, 0xec, 0xf9, 0x61, 0x5e, 0xe0, 0x2b, 0x18, 0xfb, 0x0d, 0x98, - 0xbf, 0x11, 0xf3, 0xe1, 0x3d, 0xa5, 0xe7, 0x73, 0x62, 0x57, 0x4a, 0xed, 0x17, 0x99, 0x7a, 0xbf, - 0xc8, 0xfe, 0x16, 0xfc, 0x7f, 0x4d, 0x70, 0x54, 0xd6, 0x16, 0xb5, 0xb2, 0xf2, 0x49, 0xa4, 0xcb, - 0x7c, 0x6c, 0x8c, 0xca, 0x54, 0x59, 0x1c, 0x8d, 0xc8, 0xfe, 0x9e, 0x01, 0xcf, 0xd7, 0xd8, 0x5f, - 0x8b, 0xa2, 0x98, 0x1f, 0x4b, 0x9b, 0x9c, 0xc7, 0x34, 0x7a, 0xf1, 0x6b, 0x56, 0x8b, 0xdf, 0xb1, - 0x42, 0x68, 0x05, 0xfb, 0x07, 0x20, 0xc4, 0x2f, 0x0d, 0x58, 0x92, 0x42, 0x78, 0x9e, 0x9c, 0xf6, - 0xf3, 0xd0, 0xa2, 0x36, 0xb8, 0x9c, 0xf0, 0xf9, 0xb1, 0x13, 0xe6, 0xed, 0x7b, 0x47, 0x0e, 0xae, - 0x7b, 0xa4, 0x39, 0x6e, 0x47, 0x7d, 0xb1, 0x70, 0xf6, 0xa9, 0x1b, 0xd5, 0x92, 0xc0, 0xfe, 0x7a, - 0xee, 0xcc, 0xdb, 0x2c, 0x60, 0xe7, 0xa9, 0x23, 0xfb, 0x3e, 0x2c, 0x62, 0x4f, 0xbe, 0xd4, 0xc1, - 0xb9, 0xb0, 0x7d, 0x0b, 0x96, 0x91, 0xed, 0xb9, 0xcb, 0x5b, 0xec, 0x0e, 0xa1, 0x1f, 0x35, 0x94, - 0x9c, 0x0b, 0xf7, 0xcf, 0xc2, 0x85, 0x5c, 0xf7, 0xf7, 0x23, 0xaf, 0xb8, 0x44, 0x9a, 0x70, 0xbd, - 0x6e, 0x7f, 0x0e, 0x56, 0xb7, 0x78, 0x78, 0xcc, 0xe2, 0x84, 0x9a, 0x0f, 0x48, 0x92, 0x53, 0x68, - 0x9b, 0x5f, 0x42, 0xf6, 0x3b, 0xb0, 0xa6, 0x52, 0xf4, 0x58, 0xba, 0x17, 0xfb, 0xc7, 0x0a, 0x95, - 0xbc, 0x7e, 0x36, 0xb4, 0xeb, 0xe7, 0xf2, 0xba, 0xda, 0xd4, 0xae, 0xab, 0x2f, 0x41, 0xdb, 0x4f, - 0x24, 0x03, 0x74, 0xaa, 0x39, 0xa7, 0x44, 0xd8, 0x2e, 0xac, 0x90, 0xfa, 0x65, 0xc7, 0x00, 0xa7, - 0x58, 0x83, 0x39, 0xf2, 0xa9, 0x62, 0x92, 0x02, 0x9e, 0xf8, 0xd0, 0x6a, 0x72, 0x8f, 0xa0, 0x07, - 0x2b, 0xb2, 0x11, 0xbf, 0xe7, 0x0e, 0xfc, 0x90, 0x82, 0xec, 0x65, 0x80, 0xc8, 0x1d, 0xe4, 0x0f, - 0x71, 0xa8, 0x19, 0xa2, 0x60, 0xc4, 0xf7, 0xe4, 0x90, 0x3f, 0x90, 0xdf, 0x4d, 0xfa, 0x5e, 0x62, - 0xec, 0xaf, 0x81, 0xe5, 0xb0, 0x24, 0xe2, 0x61, 0xc2, 0x14, 0xae, 0xeb, 0xd0, 0xd9, 0xca, 0xe2, - 0x98, 0x85, 0x62, 0xaa, 0xfc, 0x55, 0x8a, 0x8a, 0x12, 0x7c, 0x7b, 0x25, 0x5f, 0xba, 0x40, 0x57, - 0x30, 0xf6, 0xcf, 0x1a, 0xd0, 0xee, 0xf9, 0x83, 0xd0, 0x0d, 0x1c, 0x36, 0xb2, 0xbe, 0x04, 0x2d, - 0x3a, 0xb2, 0x48, 0x4f, 0x19, 0x77, 0xa1, 0x4b, 0xa3, 0xe9, 0x6c, 0xe6, 0xb0, 0xd1, 0xad, 0xff, - 0x73, 0x24, 0x8d, 0xf5, 0x26, 0x2c, 0xd0, 0xaf, 0xdb, 0x74, 0x05, 0x25, 0xf3, 0xd7, 0xa7, 0x4e, - 0x61, 0x22, 0x47, 0x13, 0x2f, 0x9d, 0x83, 0x10, 0xa8, 0x8f, 0x25, 0x8d, 0x0c, 0x0f, 0x93, 0x05, - 0xa2, 0xca, 0x47, 0x0a, 0x44, 0x34, 0x82, 0xda, 0xc5, 0x4b, 0x1a, 0x99, 0xa9, 0x27, 0x53, 0xd3, - 0x5d, 0x8e, 0xa4, 0x26, 0x1a, 0x41, 0x7d, 0x98, 0x85, 0x83, 0xfb, 0x91, 0xbc, 0x3b, 0x9c, 0x4c, - 0x7d, 0x0b, 0x87, 0x49, 0x6a, 0xa2, 0x11, 0xd4, 0x31, 0x06, 0x6f, 0x54, 0xfa, 0x49, 0xd4, 0x14, - 0xe3, 0x25, 0x35, 0xd1, 0x6c, 0xb6, 0x61, 0x36, 0x72, 0x1f, 0x05, 0xdc, 0xf5, 0xec, 0x77, 0x1b, - 0x00, 0xf9, 0xc0, 0x04, 0x0b, 0x1d, 0xcd, 0x44, 0x1b, 0xa7, 0x9a, 0x28, 0x0a, 0x1e, 0x29, 0x46, - 0xea, 0x8d, 0x37, 0xd2, 0xa7, 0xa7, 0x35, 0x12, 0x71, 0xab, 0x98, 0xe9, 0x6a, 0xc5, 0x4c, 0x1b, - 0xa7, 0x9a, 0x49, 0x0a, 0x25, 0x0d, 0x75, 0xb5, 0x62, 0xa8, 0x8d, 0x53, 0x0d, 0x25, 0xe9, 0xa5, - 0xa9, 0xae, 0x56, 0x4c, 0xb5, 0x71, 0xaa, 0xa9, 0x24, 0xbd, 0x34, 0xd6, 0xd5, 0x8a, 0xb1, 0x36, - 0x4e, 0x35, 0x96, 0xa4, 0xaf, 0x9b, 0xeb, 0x7d, 0x13, 0x16, 0x51, 0x65, 0xd4, 0x4c, 0x0c, 0x0f, - 0x38, 0xf6, 0x03, 0x50, 0x5d, 0xfa, 0xbb, 0x2e, 0x1d, 0x69, 0x7d, 0x06, 0x56, 0x08, 0xc1, 0x94, - 0x66, 0x88, 0x89, 0xcd, 0x90, 0xfa, 0x07, 0x6c, 0xff, 0x64, 0x49, 0xca, 0x87, 0xdb, 0x6e, 0xea, - 0xe6, 0xc5, 0x57, 0x89, 0x51, 0x9b, 0x73, 0x33, 0xb5, 0x97, 0xa3, 0x31, 0xe7, 0xc3, 0xa2, 0xeb, - 0x26, 0x21, 0x41, 0x91, 0xfa, 0x43, 0xc6, 0xb3, 0x54, 0x86, 0x89, 0x1c, 0xa4, 0xb7, 0x17, 0x9e, - 0xef, 0x62, 0x4b, 0x4b, 0x3e, 0x4c, 0x28, 0x10, 0x18, 0xd9, 0xca, 0x16, 0x9d, 0x7c, 0xd9, 0x59, - 0x62, 0x4e, 0x6f, 0xa7, 0xd9, 0x7f, 0x37, 0xe0, 0xc2, 0x9e, 0x1b, 0xa7, 0x7e, 0xdf, 0x8f, 0xdc, - 0x30, 0xdd, 0x61, 0xa9, 0x8b, 0x6b, 0xd0, 0x1e, 0x77, 0x19, 0x8f, 0xf7, 0xb8, 0x6b, 0x0f, 0x96, - 0x06, 0xfa, 0xe9, 0xe2, 0x31, 0x0f, 0x06, 0x55, 0x72, 0xed, 0xa5, 0x5a, 0xe3, 0xb1, 0x5f, 0xaa, - 0xd9, 0x3f, 0x34, 0x61, 0xa9, 0x12, 0x3a, 0x4f, 0xcc, 0x3b, 0xd7, 0x00, 0xfc, 0xc2, 0x8d, 0x4e, - 0xb8, 0x7c, 0xd7, 0x7d, 0xcd, 0x51, 0x88, 0xc6, 0xf5, 0xe9, 0x1a, 0x67, 0xef, 0xd3, 0xdd, 0x82, - 0x4e, 0x54, 0x1a, 0xe9, 0x84, 0xb3, 0xcf, 0x18, 0x53, 0x3a, 0x2a, 0xa9, 0xfd, 0x4d, 0x58, 0xa9, - 0x45, 0x28, 0x6c, 0xc9, 0xf1, 0x23, 0x16, 0x16, 0x2d, 0x39, 0x01, 0x28, 0xce, 0x6a, 0x56, 0x9d, - 0x35, 0xf0, 0x8f, 0xd5, 0xa7, 0xb0, 0x12, 0xb4, 0x7f, 0x64, 0xc2, 0xea, 0xf8, 0xec, 0xf2, 0xac, - 0xaa, 0x7b, 0x1f, 0xba, 0x93, 0x22, 0xf9, 0xb9, 0x69, 0xbd, 0xf4, 0xee, 0x22, 0x0f, 0x3f, 0xab, - 0xea, 0xbe, 0x90, 0x7b, 0xb7, 0x92, 0xea, 0xec, 0xdf, 0x14, 0xfa, 0x29, 0x2a, 0x8d, 0x67, 0x54, - 0x3f, 0xd6, 0x4b, 0xb0, 0x4c, 0xcb, 0x54, 0x1e, 0x76, 0x50, 0xe1, 0x5a, 0xc3, 0x97, 0x91, 0x42, - 0x49, 0xfb, 0xe7, 0xe6, 0xb3, 0x7f, 0x30, 0x72, 0x9b, 0x14, 0xf5, 0xdb, 0x87, 0xca, 0x26, 0xa5, - 0xa7, 0x29, 0x45, 0x8d, 0xe2, 0x69, 0x45, 0x5d, 0xf9, 0x3f, 0x4f, 0x3b, 0xdd, 0xd3, 0x0a, 0x5d, - 0x2a, 0x05, 0x9e, 0xfd, 0x5d, 0x58, 0xd8, 0x66, 0xc1, 0x4e, 0x32, 0xc8, 0x9f, 0x94, 0x9d, 0xeb, - 0x41, 0xb1, 0xfa, 0x10, 0x6d, 0xa6, 0xf6, 0x10, 0xcd, 0xde, 0x84, 0x45, 0x55, 0x80, 0xb3, 0xbc, - 0xa8, 0xdb, 0xbc, 0xf4, 0x8d, 0xb5, 0x2b, 0x2f, 0xd3, 0x7f, 0xbf, 0x5e, 0xaf, 0x29, 0x71, 0xbf, - 0x85, 0xff, 0x05, 0x7b, 0xf5, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x11, 0x1c, 0x36, 0x1e, - 0x36, 0x00, 0x00, +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_b2b8932ad953b270) } + +var fileDescriptor_ws_b2b8932ad953b270 = []byte{ + // 3238 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x24, 0x57, + 0x11, 0xa7, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x3f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, + 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x1f, 0x8b, 0xfc, 0x91, 0xfd, 0x48, 0xd6, 0x5e, 0xa7, + 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc3, 0xbb, + 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x48, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, + 0x90, 0x38, 0x20, 0xc4, 0x81, 0x3f, 0x00, 0x8e, 0x88, 0x0b, 0xe2, 0xcc, 0x95, 0x03, 0x12, 0x12, + 0xe8, 0x55, 0xbd, 0xee, 0x7e, 0xaf, 0xbb, 0xc7, 0x9e, 0x1d, 0x59, 0xd9, 0x8d, 0x96, 0x9b, 0xab, + 0xe6, 0x55, 0xbd, 0x7a, 0xf5, 0xab, 0x57, 0x55, 0xfd, 0xde, 0x33, 0x2c, 0xc4, 0xce, 0xe1, 0x7b, + 0x77, 0xe3, 0xe7, 0xef, 0xc6, 0x97, 0xc2, 0x28, 0x48, 0x02, 0x63, 0x29, 0x66, 0xd1, 0x31, 0x8b, + 0xde, 0xb3, 0x43, 0xf7, 0xbd, 0xd0, 0x8e, 0xec, 0x61, 0x6c, 0xfe, 0x4b, 0x87, 0xf6, 0xd5, 0x28, + 0x48, 0xc3, 0xeb, 0xfe, 0x7e, 0x60, 0x74, 0x61, 0x7a, 0x80, 0xc4, 0x56, 0x57, 0x5b, 0xd5, 0x9e, + 0x6d, 0x5b, 0x19, 0x69, 0x5c, 0x80, 0x36, 0xfe, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0xdf, 0x0a, + 0x86, 0x61, 0xc2, 0xac, 0x1f, 0x24, 0xee, 0xbe, 0xdb, 0xb7, 0x13, 0x37, 0xf0, 0xbb, 0x0d, 0x1c, + 0xa0, 0xf0, 0xf8, 0x18, 0xd7, 0x4f, 0xa2, 0xc0, 0x49, 0xfb, 0x38, 0x66, 0x8a, 0xc6, 0xc8, 0x3c, + 0x3e, 0xff, 0xbe, 0xdd, 0x67, 0xb7, 0xad, 0x1b, 0xdd, 0x26, 0xcd, 0x2f, 0x48, 0x63, 0x15, 0x3a, + 0xc1, 0x5d, 0x9f, 0x45, 0xb7, 0x63, 0x16, 0x5d, 0xdf, 0xea, 0xb6, 0xf0, 0x57, 0x99, 0x65, 0x5c, + 0x04, 0xe8, 0x47, 0xcc, 0x4e, 0xd8, 0x2d, 0x77, 0xc8, 0xba, 0xd3, 0xab, 0xda, 0xb3, 0x73, 0x96, + 0xc4, 0xe1, 0x1a, 0x86, 0x6c, 0xb8, 0xc7, 0xa2, 0xcd, 0x20, 0xf5, 0x93, 0xee, 0x0c, 0x0e, 0x90, + 0x59, 0xc6, 0x3c, 0xe8, 0xec, 0x5e, 0xb7, 0x8d, 0xaa, 0x75, 0x76, 0xcf, 0x58, 0x86, 0x56, 0x9c, + 0xd8, 0x49, 0x1a, 0x77, 0x61, 0x55, 0x7b, 0xb6, 0x69, 0x09, 0xca, 0x58, 0x83, 0x39, 0xd4, 0x1b, + 0x64, 0xd6, 0x74, 0x50, 0x44, 0x65, 0xe6, 0x1e, 0xbb, 0x75, 0x3f, 0x64, 0xdd, 0x59, 0x54, 0x50, + 0x30, 0xcc, 0xbf, 0xea, 0x70, 0x0e, 0xfd, 0xbe, 0x8d, 0x06, 0x5c, 0x49, 0x3d, 0xef, 0x14, 0x04, + 0x96, 0xa1, 0x95, 0xd2, 0x74, 0xe4, 0x7e, 0x41, 0xf1, 0x79, 0xa2, 0xc0, 0x63, 0x37, 0xd8, 0x31, + 0xf3, 0xd0, 0xf1, 0x4d, 0xab, 0x60, 0x18, 0x2b, 0x30, 0x73, 0x27, 0x70, 0x7d, 0xf4, 0xc9, 0x14, + 0xfe, 0x98, 0xd3, 0xfc, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, + 0xb4, 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0x9a, 0x74, 0x1a, + 0xf5, 0x96, 0xb8, 0x1c, 0x0f, 0x3e, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, + 0xc3, 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, + 0x1c, 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0xb8, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, + 0x7e, 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, + 0xa0, 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, + 0x28, 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, + 0x0f, 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, + 0x4a, 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, + 0x62, 0x41, 0x33, 0xb9, 0xef, 0xd5, 0x3d, 0xd6, 0xae, 0xec, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, + 0x98, 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x73, 0x6b, 0xd5, 0xcd, + 0xbd, 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, + 0xbd, 0x0a, 0xb0, 0x8f, 0xf3, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x49, 0x83, + 0x97, 0x32, 0x94, 0x2c, 0x69, 0x38, 0xdf, 0x59, 0xb6, 0xe3, 0x88, 0x00, 0x6e, 0xd2, 0xce, 0xca, + 0x19, 0x35, 0xf1, 0xdb, 0x3a, 0x21, 0x7e, 0xa7, 0xf3, 0xa0, 0xf8, 0xa7, 0x06, 0xed, 0x0d, 0xcf, + 0xee, 0x1f, 0x8e, 0xb9, 0x74, 0x75, 0x89, 0x7a, 0x65, 0x89, 0x57, 0x61, 0x6e, 0x8f, 0xab, 0xcb, + 0x96, 0x80, 0x5e, 0xe8, 0xbc, 0xf8, 0x99, 0x9a, 0x55, 0xaa, 0x9b, 0xc2, 0x52, 0xe5, 0xd4, 0xe5, + 0x4e, 0x9d, 0xbe, 0xdc, 0xe6, 0x09, 0xcb, 0x6d, 0xe5, 0xcb, 0xfd, 0x8b, 0x0e, 0xb3, 0x98, 0xe8, + 0x2c, 0x76, 0x94, 0xb2, 0x38, 0x31, 0x5e, 0x87, 0x99, 0x34, 0x33, 0x55, 0x1b, 0xd7, 0xd4, 0x5c, + 0xc4, 0x78, 0x45, 0xa4, 0x55, 0x94, 0xd7, 0x51, 0xfe, 0x42, 0x8d, 0x7c, 0x5e, 0xd3, 0xac, 0x62, + 0x38, 0x2f, 0x41, 0x07, 0xb6, 0xef, 0x78, 0xcc, 0x62, 0x71, 0xea, 0x25, 0x22, 0x5b, 0x2a, 0x3c, + 0x8a, 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x0a, 0x94, 0xa0, 0xb8, 0x77, 0x68, 0x1c, 0xff, 0x89, 0x96, + 0x5e, 0x30, 0xf8, 0x46, 0x8d, 0xd8, 0x11, 0x22, 0x44, 0xdb, 0x2a, 0x23, 0x8b, 0x39, 0x85, 0xd7, + 0x28, 0x10, 0x14, 0x1e, 0x87, 0x98, 0x68, 0x54, 0x40, 0x95, 0x49, 0xe2, 0x94, 0x0b, 0x93, 0xf9, + 0xb7, 0x06, 0xcc, 0xd1, 0xf6, 0xc9, 0x9c, 0x7a, 0x91, 0xc7, 0x79, 0x30, 0x54, 0xa2, 0x48, 0xe2, + 0x70, 0x2b, 0x38, 0xb5, 0xa3, 0x26, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x84, 0x23, + 0xb3, 0xb2, 0x59, 0xae, 0xca, 0x89, 0x47, 0xe2, 0xf0, 0x54, 0x96, 0x04, 0x4a, 0x74, 0xe4, 0x34, + 0x97, 0x4d, 0x82, 0x7c, 0x7e, 0x8a, 0x0f, 0x89, 0xc3, 0xfd, 0x9b, 0x04, 0xd9, 0xdc, 0xe4, 0xa4, + 0x82, 0x41, 0x9a, 0xc5, 0xbc, 0x54, 0x4a, 0x72, 0xba, 0x82, 0x6a, 0xfb, 0x44, 0x54, 0x41, 0x41, + 0x55, 0xdd, 0x5c, 0x9d, 0xca, 0xe6, 0x5a, 0x83, 0x39, 0xd2, 0x93, 0x05, 0xfd, 0x2c, 0x95, 0x7a, + 0x85, 0xa9, 0xc6, 0xc6, 0x5c, 0x39, 0x36, 0x54, 0x74, 0xe7, 0x47, 0xa0, 0xbb, 0x90, 0xa3, 0xfb, + 0x6b, 0x1d, 0x60, 0x8b, 0x85, 0x76, 0x94, 0x0c, 0x99, 0x9f, 0xf0, 0xe5, 0x39, 0x39, 0x95, 0x83, + 0xab, 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x74, 0x38, 0xa1, 0x89, 0x7f, 0x73, + 0x67, 0x86, 0x76, 0x44, 0xda, 0x28, 0xc8, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, + 0x5a, 0x44, 0xf0, 0xcd, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf2, 0xba, 0xca, 0x3d, 0xb5, 0x07, + 0x7b, 0x0e, 0x16, 0xe3, 0x74, 0xaf, 0x58, 0xdc, 0x4e, 0x3a, 0x14, 0xe1, 0x5e, 0xe1, 0x73, 0xa7, + 0x52, 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, + 0xd1, 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x09, 0x7c, 0x92, 0x92, 0xbb, 0x0a, 0x1d, 0xe6, + 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x2a, 0xca, 0x4d, + 0xa5, 0x28, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, + 0xc3, 0xea, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x0a, 0xf5, 0x4c, 0x6d, 0xa1, 0x6e, 0xcb, 0x85, 0x5a, + 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0xa3, 0x06, 0x8b, 0x85, 0xbb, 0xa9, + 0x07, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, + 0x69, 0x41, 0xec, 0x4a, 0xfd, 0x7e, 0x4e, 0xf3, 0xd9, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xea, + 0xba, 0x5b, 0x4a, 0xd7, 0x5d, 0xae, 0xa3, 0xbf, 0xd3, 0xe0, 0x3c, 0x47, 0xb9, 0xb2, 0x8c, 0x9b, + 0xb0, 0x18, 0x94, 0x22, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, + 0x57, 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, + 0x83, 0x45, 0x2a, 0x6d, 0xd2, 0x3e, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, + 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xef, 0xb5, 0x27, 0x77, 0x53, 0xcf, + 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, + 0x0c, 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x10, 0x92, 0x59, 0x7c, 0x5b, 0xc5, 0xa4, + 0xa7, 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, + 0x9d, 0xc2, 0x05, 0xbc, 0x56, 0xdb, 0x35, 0xd4, 0x5a, 0x45, 0xdd, 0x80, 0xa0, 0xdf, 0xf0, 0x93, + 0xe8, 0xbe, 0xa5, 0x68, 0x5c, 0x79, 0x17, 0x96, 0x2a, 0x43, 0x8c, 0x45, 0x68, 0x1c, 0xb2, 0xfb, + 0x62, 0x1d, 0xfc, 0x4f, 0xe3, 0x05, 0x68, 0x1e, 0xdb, 0x5e, 0xca, 0x04, 0xfa, 0x2b, 0x35, 0x16, + 0x08, 0x9b, 0x2d, 0x1a, 0xf8, 0x8a, 0xfe, 0x65, 0xcd, 0x7c, 0x3a, 0x5f, 0x98, 0xbc, 0x46, 0x4d, + 0x59, 0xa3, 0xf9, 0x16, 0x74, 0xb6, 0xe3, 0xc1, 0x96, 0x9d, 0xd8, 0x38, 0xf0, 0x35, 0xe8, 0x0c, + 0x0b, 0x12, 0x07, 0xd7, 0xcf, 0x27, 0x84, 0x2c, 0x79, 0xb8, 0xf9, 0x67, 0x1d, 0xba, 0xf5, 0xae, + 0x88, 0x43, 0x6e, 0x03, 0x8b, 0xa2, 0xcd, 0xc0, 0x61, 0xb8, 0xb4, 0xa6, 0x95, 0x91, 0x1c, 0x3b, + 0x16, 0x45, 0xbc, 0x86, 0x89, 0x26, 0x9b, 0x28, 0xe3, 0x12, 0x4c, 0x79, 0x19, 0x2c, 0x27, 0x5b, + 0x81, 0xe3, 0x8c, 0x21, 0x2c, 0xa2, 0x77, 0xa5, 0x05, 0x09, 0xcc, 0xd6, 0xc7, 0xc6, 0x2c, 0x0e, + 0x09, 0x34, 0x49, 0x07, 0x01, 0x57, 0x51, 0xbd, 0xd2, 0x87, 0x27, 0x6a, 0x87, 0xd6, 0x00, 0xf8, + 0x25, 0x15, 0xc0, 0x8b, 0xa3, 0x97, 0x52, 0x06, 0x71, 0x07, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, + 0xad, 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xcf, 0xf3, 0x1c, + 0xa6, 0xb6, 0x25, 0xb3, 0x46, 0x7d, 0xb5, 0x9b, 0x97, 0x61, 0x56, 0x56, 0x86, 0x25, 0xc2, 0xbe, + 0xd7, 0x63, 0x47, 0x68, 0xee, 0x9c, 0x25, 0x28, 0xe4, 0xe3, 0x08, 0xd1, 0xf9, 0x0b, 0xca, 0xfc, + 0x89, 0x0e, 0xe7, 0x2a, 0x06, 0xc5, 0xe1, 0x83, 0xea, 0x31, 0x0e, 0x61, 0x89, 0x1c, 0x2a, 0x29, + 0x12, 0x40, 0xbf, 0x5e, 0xd7, 0x56, 0x57, 0xa7, 0x14, 0x38, 0x49, 0x5c, 0x02, 0xaa, 0xaa, 0x77, + 0x85, 0xc1, 0x72, 0xfd, 0xe0, 0x1a, 0xa8, 0x5e, 0x56, 0xa1, 0xfa, 0x74, 0x1d, 0x54, 0xb2, 0x25, + 0x12, 0x56, 0x47, 0xb0, 0xc0, 0x13, 0x60, 0x8f, 0xf9, 0xce, 0x76, 0x3c, 0x40, 0xb7, 0xac, 0x42, + 0x87, 0xe4, 0xb7, 0xe3, 0x41, 0xf1, 0x99, 0x25, 0xb1, 0xf8, 0x88, 0xbe, 0xe7, 0xf2, 0x44, 0x87, + 0x23, 0x44, 0x82, 0x92, 0x58, 0xbc, 0x98, 0xc5, 0x4c, 0x9c, 0x3a, 0xf0, 0x2a, 0xd7, 0xb0, 0x72, + 0xda, 0xfc, 0x7b, 0x13, 0xa6, 0x45, 0xe4, 0x60, 0x01, 0xe3, 0x5f, 0xb6, 0x79, 0x0a, 0x24, 0x8a, + 0x7a, 0xd0, 0xfe, 0x71, 0x11, 0x0a, 0x44, 0xc9, 0x47, 0x3e, 0x0d, 0xf5, 0xc8, 0xa7, 0x64, 0xd3, + 0x54, 0xd5, 0xa6, 0xd2, 0xba, 0x9a, 0xd5, 0x75, 0xf1, 0x96, 0x0b, 0xbb, 0x90, 0x5d, 0xcf, 0x4e, + 0xf6, 0x83, 0x68, 0x28, 0x3e, 0x54, 0x9b, 0x56, 0x85, 0xcf, 0xdb, 0x3c, 0xe2, 0xe5, 0x7d, 0x3a, + 0x95, 0xdb, 0x12, 0x97, 0x77, 0xc5, 0xc4, 0xc9, 0xfa, 0x75, 0x3a, 0x21, 0x50, 0x99, 0x64, 0x5b, + 0x1c, 0xbb, 0x81, 0x8f, 0x1d, 0x23, 0xb5, 0xe5, 0x32, 0x8b, 0xaf, 0x7c, 0x18, 0x0f, 0xae, 0x44, + 0xc1, 0x50, 0x9c, 0x13, 0x64, 0x24, 0xae, 0x3c, 0xf0, 0x93, 0xac, 0xdb, 0xec, 0x90, 0xac, 0xc4, + 0xe2, 0xb2, 0x82, 0xc4, 0x9e, 0x7c, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0x8d, 0x36, + 0xff, 0x53, 0x41, 0x6e, 0x41, 0x45, 0xae, 0xd4, 0x39, 0x2d, 0xe2, 0xaf, 0x72, 0xe7, 0x54, 0xb4, + 0x23, 0x4b, 0x4a, 0x3b, 0xb2, 0x0e, 0xd3, 0x41, 0xc8, 0x4b, 0x57, 0xdc, 0x35, 0x70, 0xbb, 0x7c, + 0x76, 0x74, 0x32, 0xb9, 0x74, 0x93, 0x46, 0xd2, 0xc6, 0xc8, 0xe4, 0x8c, 0x1b, 0xb0, 0x10, 0xec, + 0xef, 0x7b, 0xae, 0xcf, 0x76, 0xd3, 0xf8, 0x00, 0x3f, 0x68, 0xcf, 0x61, 0xb0, 0x9b, 0x75, 0x05, + 0x5f, 0x1d, 0x69, 0x95, 0x45, 0x79, 0x97, 0x66, 0x27, 0xf4, 0x41, 0x82, 0xc9, 0xe8, 0x3c, 0x26, + 0x23, 0x85, 0xb7, 0xf2, 0x0a, 0xcc, 0xca, 0xa6, 0xd4, 0x6c, 0xbb, 0xf3, 0xf2, 0xb6, 0x9b, 0x91, + 0x77, 0xd5, 0x8f, 0x34, 0x58, 0x28, 0x19, 0xc1, 0x47, 0x27, 0x6e, 0xe2, 0x31, 0xa1, 0x81, 0x08, + 0xfe, 0xcd, 0xe1, 0xb0, 0xb8, 0x2f, 0xc2, 0x1c, 0xff, 0x16, 0xdd, 0x5b, 0x23, 0x3f, 0x49, 0x32, + 0x61, 0xd6, 0xbd, 0xd9, 0xe3, 0x8a, 0x7a, 0x41, 0xea, 0x3b, 0xf9, 0x69, 0xb0, 0xc4, 0xe3, 0x61, + 0xe6, 0xde, 0xec, 0x6d, 0xd8, 0xce, 0x80, 0xd1, 0x99, 0x6d, 0x13, 0x6d, 0x52, 0x99, 0xa6, 0x03, + 0x33, 0xb7, 0xdc, 0x30, 0xde, 0x0c, 0x86, 0x43, 0x0e, 0x96, 0xc3, 0x12, 0xde, 0x1d, 0x6b, 0x18, + 0x13, 0x82, 0xe2, 0xe1, 0xe4, 0xb0, 0x7d, 0x3b, 0xf5, 0x12, 0x3e, 0x34, 0xdb, 0xdc, 0x12, 0x0b, + 0x4f, 0x2b, 0xe3, 0xc0, 0xdf, 0x22, 0x69, 0xb2, 0x53, 0xe2, 0x98, 0x7f, 0xd2, 0x61, 0x11, 0x73, + 0xd7, 0x26, 0x86, 0x86, 0x83, 0x42, 0x2f, 0x42, 0x13, 0xb7, 0xaa, 0xe8, 0xd3, 0x4e, 0x3e, 0x87, + 0xa0, 0xa1, 0xc6, 0x65, 0x68, 0x05, 0x21, 0x36, 0x77, 0x94, 0xd8, 0x9e, 0x19, 0x25, 0xa4, 0x1e, + 0x0c, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0x7a, 0x39, 0xca, 0xd4, 0xe3, 0xea, 0x90, 0x24, + 0xb9, 0x73, 0xf3, 0xee, 0x2b, 0x3f, 0x1d, 0x6e, 0x58, 0x2a, 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, + 0x66, 0x76, 0x20, 0x85, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, 0xfc, 0xb9, 0x26, 0xdc, 0xc8, 0x7f, + 0xed, 0x31, 0xf2, 0x7d, 0xe1, 0x12, 0x6d, 0x22, 0x97, 0xac, 0xc0, 0xcc, 0x30, 0x95, 0xce, 0xc7, + 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, + 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x57, 0x18, 0x13, 0x63, 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, + 0x4f, 0x04, 0xec, 0x63, 0x9c, 0x79, 0x15, 0x32, 0xd2, 0xf1, 0x45, 0x43, 0x3e, 0xbe, 0x30, 0x3f, + 0xd0, 0x60, 0x9e, 0x9c, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, + 0x4c, 0x10, 0x95, 0xb9, 0x5c, 0x35, 0x9e, 0x1a, 0x35, 0xf1, 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0xb2, + 0x5b, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x2d, 0xa5, 0x1c, 0xdf, 0x4c, 0x95, 0x8e, 0x6f, 0x6a, + 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, 0x0e, 0x9f, 0xbc, 0x9a, 0x6f, 0xbc, + 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, + 0x9b, 0xc4, 0x76, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0x5e, 0xee, 0x32, 0xff, 0xa3, 0xc1, 0x22, 0xe9, + 0x79, 0xcb, 0xed, 0x1f, 0x3e, 0xc4, 0xc5, 0xef, 0xc0, 0xfc, 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xd2, + 0x76, 0x49, 0x7a, 0xcc, 0xe5, 0xff, 0x57, 0x83, 0x25, 0x52, 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, + 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0xe8, 0x80, 0xb2, 0xf8, 0x98, 0x1e, 0xf8, 0xad, 0x06, + 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xeb, 0xbf, 0x06, 0x1d, 0xe6, 0x27, 0x91, 0xed, + 0x4f, 0x92, 0x21, 0x65, 0xd1, 0x31, 0x93, 0xe4, 0x07, 0x1a, 0x18, 0xa8, 0x6a, 0xcb, 0x8d, 0x87, + 0x6e, 0x1c, 0x3f, 0x44, 0xe8, 0xc6, 0x33, 0xf8, 0xa7, 0x3a, 0x9c, 0x97, 0xb4, 0x6c, 0xa7, 0xc9, + 0xa3, 0x6e, 0xb2, 0xb1, 0x05, 0x6d, 0xde, 0x23, 0xc8, 0xf7, 0x82, 0xe3, 0x4e, 0x54, 0x08, 0xf2, + 0x2e, 0x16, 0x89, 0x1e, 0xeb, 0x07, 0xbe, 0x13, 0x63, 0x73, 0x34, 0x67, 0x29, 0x3c, 0x9e, 0x86, + 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0xd3, + 0x90, 0x47, 0x7f, 0xc9, 0xbc, 0xd6, 0x53, 0x20, 0x7f, 0x6c, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, + 0x91, 0xfb, 0xea, 0x47, 0x37, 0xb4, 0xae, 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, + 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x0a, 0xdf, 0xa4, 0x9f, 0x70, 0xf9, 0x2f, 0x95, 0x96, 0x72, + 0xe2, 0xbd, 0xff, 0x83, 0x39, 0xfd, 0x10, 0x96, 0xe8, 0xfe, 0x55, 0xea, 0x09, 0x8d, 0x2e, 0x4c, + 0xdb, 0x0e, 0x1d, 0x32, 0x68, 0x28, 0x94, 0x91, 0xea, 0xcd, 0xba, 0x78, 0x3c, 0x55, 0xdc, 0xac, + 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, + 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x26, 0xf5, 0xc4, 0xbb, 0x5e, 0xf9, 0x16, 0x56, 0x57, + 0x6f, 0x61, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x41, 0x9c, 0x4d, 0x22, + 0x42, 0xa6, 0xee, 0xd4, 0x4d, 0xb6, 0xc5, 0x52, 0x84, 0xcc, 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, + 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, + 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, + 0x97, 0xa1, 0x45, 0x8f, 0x4b, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, 0x98, 0x3d, 0x8a, 0xb1, 0xc4, 0xe0, + 0x6a, 0x44, 0xea, 0x75, 0x3b, 0xea, 0x2b, 0x79, 0xb0, 0x8f, 0xfd, 0xfc, 0x43, 0x08, 0x98, 0x5f, + 0xcf, 0x82, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x7d, 0x64, 0xde, 0x86, 0x79, 0x7c, 0xe9, 0x52, 0xf8, + 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, 0xcd, 0x77, 0x07, 0xf7, 0x8f, 0x9c, + 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, + 0x31, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0x57, 0x7a, 0x28, 0x92, 0x49, + 0x28, 0x9b, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, + 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, + 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xea, 0x06, + 0xa7, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0x7c, 0x92, 0x9c, 0x1e, 0xf9, 0x7c, 0x71, 0xe4, 0xb5, 0x9f, + 0xd9, 0x83, 0x25, 0xf1, 0xbc, 0x65, 0xd7, 0x1e, 0xb8, 0x3e, 0x25, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, + 0xc8, 0x9e, 0xb7, 0xd1, 0x05, 0x96, 0xc4, 0xe1, 0xbf, 0xc7, 0x07, 0xc1, 0x5d, 0xf1, 0xbb, 0x4e, + 0xbf, 0x17, 0x1c, 0xf3, 0x6b, 0x60, 0x58, 0x2c, 0x0e, 0x03, 0x3f, 0x66, 0x92, 0xd6, 0x55, 0xe8, + 0x6c, 0xa6, 0x51, 0xc4, 0x7c, 0x3e, 0x55, 0xf6, 0xd6, 0x4b, 0x66, 0x71, 0xbd, 0xbd, 0x42, 0x2f, + 0x1d, 0xa0, 0x4b, 0x1c, 0xf3, 0x67, 0x0d, 0x68, 0xf7, 0xdc, 0x81, 0x6f, 0x7b, 0x16, 0x3b, 0x32, + 0x5e, 0x83, 0x16, 0x7d, 0xb2, 0x88, 0x48, 0xa9, 0x3b, 0xd0, 0xa5, 0xd1, 0xf4, 0x6d, 0x66, 0xb1, + 0xa3, 0x6b, 0x9f, 0xb0, 0x84, 0x8c, 0xf1, 0x36, 0xcc, 0xd1, 0x5f, 0xd7, 0xe9, 0x08, 0x4a, 0xd4, + 0xaf, 0xcf, 0x9d, 0xa2, 0x44, 0x8c, 0x26, 0x5d, 0xaa, 0x06, 0x6e, 0x50, 0x1f, 0x5b, 0x1a, 0x91, + 0x1e, 0x46, 0x1b, 0x44, 0x9d, 0x8f, 0x30, 0x88, 0x64, 0xb8, 0xb4, 0x8d, 0x87, 0x34, 0xa2, 0x52, + 0x8f, 0x96, 0xa6, 0xb3, 0x1c, 0x21, 0x4d, 0x32, 0x5c, 0xfa, 0x20, 0xf5, 0x07, 0xb7, 0x43, 0x71, + 0x76, 0x38, 0x5a, 0xfa, 0x1a, 0x0e, 0x13, 0xd2, 0x24, 0xc3, 0xa5, 0x23, 0x4c, 0xde, 0xe8, 0xf4, + 0x93, 0xa4, 0x29, 0xc7, 0x0b, 0x69, 0x92, 0xd9, 0x68, 0xc3, 0x74, 0x68, 0xdf, 0xf7, 0x02, 0xdb, + 0x31, 0xdf, 0x6f, 0x00, 0x64, 0x03, 0x63, 0x6c, 0x74, 0x14, 0x88, 0xd6, 0x4e, 0x85, 0x28, 0xf4, + 0xee, 0x4b, 0x20, 0xf5, 0xea, 0x41, 0xfa, 0xfc, 0xb8, 0x20, 0x91, 0xb6, 0x12, 0x4c, 0x97, 0x4b, + 0x30, 0xad, 0x9d, 0x0a, 0x93, 0x30, 0x4a, 0x00, 0x75, 0xb9, 0x04, 0xd4, 0xda, 0xa9, 0x40, 0x09, + 0x79, 0x01, 0xd5, 0xe5, 0x12, 0x54, 0x6b, 0xa7, 0x42, 0x25, 0xe4, 0x05, 0x58, 0x97, 0x4b, 0x60, + 0xad, 0x9d, 0x0a, 0x96, 0x90, 0xaf, 0xc2, 0xf5, 0xa1, 0x0e, 0xf3, 0xe8, 0x32, 0x7a, 0x1f, 0xe0, + 0xef, 0x07, 0x78, 0x1f, 0x80, 0xee, 0x52, 0x5f, 0x4b, 0xaa, 0x4c, 0xe3, 0x0b, 0xb0, 0x44, 0x0c, + 0x26, 0x5d, 0x86, 0xe8, 0x78, 0x19, 0x52, 0xfd, 0x01, 0xaf, 0x7f, 0xd2, 0x38, 0x09, 0x86, 0x5b, + 0x76, 0x62, 0x67, 0xcd, 0x57, 0xc1, 0x91, 0x2f, 0xe7, 0xa6, 0x2a, 0xef, 0xb1, 0xa3, 0x20, 0x18, + 0xe6, 0xb7, 0x6e, 0x82, 0xe2, 0x12, 0x89, 0x3b, 0x64, 0x41, 0x9a, 0x88, 0x34, 0x91, 0x91, 0xf4, + 0xa2, 0xc9, 0x71, 0x6d, 0xbc, 0xd2, 0x12, 0xcf, 0x7d, 0x72, 0x06, 0x66, 0xb6, 0xe2, 0x8a, 0x4e, + 0xbc, 0x97, 0x2e, 0x38, 0xa7, 0x5f, 0xa7, 0x99, 0xff, 0xd0, 0xe0, 0xdc, 0xae, 0x1d, 0x25, 0x6e, + 0xdf, 0x0d, 0x6d, 0x3f, 0xd9, 0x66, 0x89, 0x8d, 0x6b, 0x50, 0x9e, 0x4c, 0x6a, 0x0f, 0xf6, 0x64, + 0x72, 0x17, 0x16, 0x06, 0xea, 0xd7, 0xc5, 0x03, 0x7e, 0x18, 0x94, 0xc5, 0x95, 0xf7, 0x9f, 0x8d, + 0x07, 0x7e, 0xff, 0x69, 0xfe, 0x40, 0x87, 0x85, 0x52, 0xea, 0x3c, 0xb1, 0xee, 0xac, 0x03, 0xb8, + 0x79, 0x18, 0x9d, 0x70, 0xf8, 0xae, 0xc6, 0x9a, 0x25, 0x09, 0xd5, 0xdd, 0xd3, 0x35, 0x26, 0xbf, + 0xa7, 0xbb, 0x06, 0x9d, 0xb0, 0x00, 0xe9, 0x84, 0x6f, 0x9f, 0x1a, 0x28, 0x2d, 0x59, 0xd4, 0x7c, + 0x17, 0x96, 0x2a, 0x19, 0x0a, 0xaf, 0xe4, 0x82, 0x43, 0xe6, 0xe7, 0x57, 0x72, 0x9c, 0x90, 0x82, + 0x55, 0x2f, 0x07, 0xab, 0xe7, 0x1e, 0xcb, 0x0f, 0xcc, 0x05, 0x69, 0xfe, 0x50, 0x87, 0xe5, 0xfa, + 0xea, 0xf2, 0xb8, 0xba, 0x7b, 0x0f, 0xba, 0xa3, 0x32, 0xf9, 0x99, 0x79, 0xbd, 0x88, 0xee, 0xbc, + 0x0e, 0x3f, 0xae, 0xee, 0x3e, 0x97, 0x45, 0xb7, 0x54, 0xea, 0xcc, 0xdf, 0xe4, 0xfe, 0xc9, 0x3b, + 0x8d, 0xc7, 0xd4, 0x3f, 0xc6, 0x73, 0xb0, 0x48, 0xcb, 0x94, 0x1e, 0x76, 0x50, 0xe3, 0x5a, 0xe1, + 0x17, 0x99, 0x42, 0x2a, 0xfb, 0x67, 0x16, 0xb3, 0x7f, 0xd0, 0x32, 0x4c, 0xf2, 0xfe, 0xed, 0x63, + 0x85, 0x49, 0x11, 0x69, 0x52, 0x53, 0x23, 0x45, 0x5a, 0xde, 0x57, 0xfe, 0x3f, 0xd2, 0x4e, 0x8f, + 0xb4, 0xdc, 0x97, 0x52, 0x83, 0x67, 0x7e, 0x07, 0xe6, 0xb6, 0x98, 0xb7, 0x1d, 0x0f, 0xb2, 0x57, + 0xa2, 0x67, 0xfa, 0xa1, 0x58, 0x7e, 0x5b, 0x3a, 0x55, 0x79, 0x5b, 0x6a, 0x6e, 0xc0, 0xbc, 0x6c, + 0xc0, 0x24, 0xaf, 0x20, 0x37, 0x2e, 0x7c, 0x63, 0xe5, 0xd2, 0xf3, 0xf4, 0x1f, 0x95, 0xaf, 0x56, + 0x9c, 0xb8, 0xd7, 0xc2, 0xff, 0xb0, 0x7c, 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x96, + 0xc4, 0xbf, 0x74, 0x39, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 8d9e04fc5..43112b919 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -170,30 +170,51 @@ message UserInDepartment { ///////////////////////////////////base end///////////////////////////////////// +message PullMessageBySeqListReq{ + string userID = 1; + string operationID = 2; + repeated uint32 seqList = 3; + map groupSeqList = 4; +} + +message seqList { + repeated uint32 seqList = 1; +} + + +message MsgDataList { + repeated MsgData msgDataList = 1; +} message PullMessageBySeqListResp { int32 errCode = 1; string errMsg = 2; repeated MsgData list = 3; + map groupMsgDataList = 4; } -message PullMessageBySeqListReq{ - string userID = 1; - string operationID = 2; - repeated uint32 seqList = 3; -} + + + message GetMaxAndMinSeqReq { + repeated string groupIDList = 1; + string userID = 2; +} +message MaxAndMinSeq{ + uint32 maxSeq = 1; + uint32 minSeq = 2; } message GetMaxAndMinSeqResp { uint32 maxSeq = 1; uint32 minSeq = 2; + map groupMaxAndMinSeq = 3; } message UserSendMsgResp { string serverMsgID = 1; string clientMsgID = 2; int64 sendTime = 3; - } + message MsgData { string sendID = 1; string recvID = 2; From e9bf26e0caa7ce9856665d516df7c9d0fe645b1e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 28 May 2022 17:22:19 +0800 Subject: [PATCH 007/256] pb file --- pkg/proto/chat/chat.pb.go | 98 +++---- pkg/proto/chat/chat.proto | 2 +- pkg/proto/sdk_ws/ws.pb.go | 587 ++++++++++++++++++++------------------ pkg/proto/sdk_ws/ws.proto | 5 +- 4 files changed, 360 insertions(+), 332 deletions(-) diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index cf1c6ba50..092fff9ca 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -37,7 +37,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{0} + return fileDescriptor_chat_732204f30d7bcb33, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{1} + return fileDescriptor_chat_732204f30d7bcb33, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{2} + return fileDescriptor_chat_732204f30d7bcb33, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -210,7 +210,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_chat_83f286704599d5b1, []int{3} + return fileDescriptor_chat_732204f30d7bcb33, []int{3} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -258,7 +258,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_chat_83f286704599d5b1, []int{4} + return fileDescriptor_chat_732204f30d7bcb33, []int{4} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -319,7 +319,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{5} + return fileDescriptor_chat_732204f30d7bcb33, []int{5} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_83f286704599d5b1, []int{6} + return fileDescriptor_chat_732204f30d7bcb33, []int{6} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -451,7 +451,7 @@ const _ = grpc.SupportPackageIsVersion4 // Client API for Chat service type ChatClient interface { - GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*GetMaxAndMinSeqResp, error) + GetMaxAndMinSeq(ctx context.Context, in *sdk_ws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdk_ws.GetMaxAndMinSeqResp, error) PullMessageBySeqList(ctx context.Context, in *sdk_ws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, opts ...grpc.CallOption) (*sdk_ws.DelMsgListResp, error) @@ -465,8 +465,8 @@ func NewChatClient(cc *grpc.ClientConn) ChatClient { return &chatClient{cc} } -func (c *chatClient) GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*GetMaxAndMinSeqResp, error) { - out := new(GetMaxAndMinSeqResp) +func (c *chatClient) GetMaxAndMinSeq(ctx context.Context, in *sdk_ws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdk_ws.GetMaxAndMinSeqResp, error) { + out := new(sdk_ws.GetMaxAndMinSeqResp) err := grpc.Invoke(ctx, "/pbChat.Chat/GetMaxAndMinSeq", in, out, c.cc, opts...) if err != nil { return nil, err @@ -504,7 +504,7 @@ func (c *chatClient) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, o // Server API for Chat service type ChatServer interface { - GetMaxAndMinSeq(context.Context, *GetMaxAndMinSeqReq) (*GetMaxAndMinSeqResp, error) + GetMaxAndMinSeq(context.Context, *sdk_ws.GetMaxAndMinSeqReq) (*sdk_ws.GetMaxAndMinSeqResp, error) PullMessageBySeqList(context.Context, *sdk_ws.PullMessageBySeqListReq) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error) DelMsgList(context.Context, *sdk_ws.DelMsgListReq) (*sdk_ws.DelMsgListResp, error) @@ -515,7 +515,7 @@ func RegisterChatServer(s *grpc.Server, srv ChatServer) { } func _Chat_GetMaxAndMinSeq_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMaxAndMinSeqReq) + in := new(sdk_ws.GetMaxAndMinSeqReq) if err := dec(in); err != nil { return nil, err } @@ -527,7 +527,7 @@ func _Chat_GetMaxAndMinSeq_Handler(srv interface{}, ctx context.Context, dec fun FullMethod: "/pbChat.Chat/GetMaxAndMinSeq", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ChatServer).GetMaxAndMinSeq(ctx, req.(*GetMaxAndMinSeqReq)) + return srv.(ChatServer).GetMaxAndMinSeq(ctx, req.(*sdk_ws.GetMaxAndMinSeqReq)) } return interceptor(ctx, in, info, handler) } @@ -611,40 +611,40 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_83f286704599d5b1) } - -var fileDescriptor_chat_83f286704599d5b1 = []byte{ - // 507 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcd, 0x6e, 0xda, 0x40, - 0x10, 0x96, 0x49, 0x80, 0x32, 0x34, 0x42, 0xda, 0x44, 0x95, 0xe5, 0x5e, 0x1c, 0x9f, 0x50, 0x2b, - 0x19, 0x89, 0xf6, 0xd6, 0x53, 0x89, 0xa3, 0x8a, 0xaa, 0xdb, 0x24, 0x86, 0x5e, 0x7a, 0x41, 0x9b, - 0x30, 0x32, 0x16, 0x60, 0x2f, 0x3b, 0xa6, 0xa4, 0xed, 0x33, 0xf4, 0x19, 0xfa, 0x3e, 0x7d, 0xaa, - 0xca, 0xbb, 0x26, 0x98, 0x40, 0x15, 0x4e, 0xbd, 0x58, 0x9a, 0x6f, 0x3e, 0x7f, 0x3f, 0xeb, 0x1f, - 0x68, 0xdd, 0x4d, 0x44, 0xd6, 0xc9, 0x2f, 0xbe, 0x54, 0x69, 0x96, 0xb2, 0x9a, 0xbc, 0xbd, 0x98, - 0x88, 0xcc, 0x39, 0xbf, 0x92, 0x98, 0x8c, 0xfa, 0xbc, 0x23, 0xa7, 0x51, 0x47, 0xaf, 0x3a, 0x34, - 0x9e, 0x8e, 0x56, 0xd4, 0x59, 0x91, 0xa1, 0x7a, 0x3f, 0xa1, 0xc9, 0x29, 0x0a, 0x44, 0x26, 0x86, - 0x29, 0xbf, 0x61, 0x67, 0x50, 0xcd, 0xd2, 0x29, 0x26, 0xb6, 0xe5, 0x5a, 0xed, 0x46, 0x68, 0x06, - 0xe6, 0x42, 0x33, 0x95, 0xa8, 0x44, 0x16, 0xa7, 0x49, 0x3f, 0xb0, 0x2b, 0x7a, 0x57, 0x86, 0xd8, - 0x5b, 0xa8, 0xcf, 0x8d, 0x8c, 0x7d, 0xe4, 0x5a, 0xed, 0x66, 0xd7, 0xf1, 0x09, 0xd5, 0x37, 0x54, - 0x23, 0x21, 0xe3, 0x91, 0x14, 0x4a, 0xcc, 0xc9, 0x2f, 0x8c, 0xc2, 0x35, 0xd5, 0xc3, 0x92, 0x79, - 0xd0, 0x2b, 0x8b, 0x58, 0x07, 0x8b, 0x3c, 0x1d, 0xce, 0xfb, 0x65, 0x41, 0xeb, 0x7a, 0x49, 0x93, - 0x72, 0x51, 0x17, 0x9a, 0x57, 0xa5, 0xbb, 0x4c, 0xdd, 0x32, 0x54, 0x4e, 0x53, 0x39, 0x3c, 0x8d, - 0x07, 0xcf, 0xe5, 0x92, 0x26, 0xc3, 0xf4, 0x0b, 0xa1, 0xea, 0x07, 0xfa, 0x34, 0x1a, 0xe1, 0x16, - 0xe6, 0x7d, 0x06, 0xf6, 0x01, 0x33, 0x2e, 0xee, 0xdf, 0x27, 0x63, 0x1e, 0x27, 0x03, 0x5c, 0x84, - 0xb8, 0x60, 0x2f, 0xa0, 0x56, 0xdc, 0x63, 0xc2, 0x14, 0xd3, 0xe3, 0xa4, 0x95, 0x9d, 0xa4, 0xde, - 0x0a, 0x4e, 0x77, 0xf4, 0x48, 0x32, 0x1b, 0xea, 0x97, 0x4a, 0x5d, 0xa4, 0x63, 0xd4, 0x8a, 0xd5, - 0x70, 0x3d, 0xe6, 0x56, 0x97, 0x4a, 0x71, 0x8a, 0x0a, 0xb5, 0x62, 0xca, 0x71, 0x2e, 0xee, 0x07, - 0xb8, 0xd0, 0xb1, 0x4f, 0xc2, 0x62, 0xd2, 0xb8, 0xd6, 0xb5, 0x8f, 0x0b, 0x5c, 0x4f, 0xde, 0x0f, - 0x80, 0x01, 0x26, 0x63, 0x4e, 0x51, 0x5e, 0xe0, 0xff, 0xbe, 0x3b, 0xbf, 0x2d, 0x68, 0x3e, 0x98, - 0x9b, 0xb6, 0xb8, 0xdd, 0x16, 0x37, 0x6d, 0x71, 0xab, 0xad, 0x99, 0xf2, 0x64, 0xc6, 0x87, 0x53, - 0xd4, 0x0f, 0x74, 0xb5, 0x46, 0x58, 0x86, 0x72, 0xc6, 0xdd, 0x2c, 0xc6, 0x24, 0x33, 0x8c, 0xaa, - 0x61, 0x94, 0x20, 0xe6, 0xc0, 0x33, 0xc2, 0x64, 0x3c, 0x8c, 0xe7, 0x68, 0xd7, 0x5c, 0xab, 0x7d, - 0x14, 0x3e, 0xcc, 0xdd, 0x3f, 0x15, 0x38, 0xce, 0x3f, 0x43, 0xf6, 0x11, 0x5a, 0x8f, 0x9e, 0x0f, - 0x73, 0x7c, 0xf3, 0x89, 0xfa, 0xbb, 0x2f, 0x82, 0xf3, 0xf2, 0x9f, 0x3b, 0x92, 0x2c, 0x85, 0xb3, - 0xeb, 0xe5, 0x6c, 0xc6, 0x91, 0x48, 0x44, 0xd8, 0xfb, 0x3e, 0xc0, 0xc5, 0xa7, 0x98, 0x32, 0xf6, - 0x6a, 0xcf, 0x99, 0xed, 0x23, 0xe6, 0x06, 0xaf, 0x0f, 0xe6, 0x92, 0x64, 0x5d, 0xa8, 0x17, 0xc7, - 0xcc, 0xd8, 0x3a, 0xd8, 0xe6, 0xa1, 0x3b, 0xa7, 0x3b, 0x18, 0x49, 0x76, 0x03, 0x10, 0xe0, 0x8c, - 0x53, 0xa4, 0xa3, 0xb9, 0x7b, 0xec, 0x36, 0xeb, 0x5c, 0xe4, 0xfc, 0x09, 0x06, 0xc9, 0x5e, 0xeb, - 0xeb, 0x89, 0xaf, 0x7f, 0x71, 0xef, 0x8c, 0xdf, 0x6d, 0x4d, 0xff, 0xbf, 0xde, 0xfc, 0x0d, 0x00, - 0x00, 0xff, 0xff, 0x6f, 0x9d, 0x6f, 0xa0, 0xfd, 0x04, 0x00, 0x00, +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_732204f30d7bcb33) } + +var fileDescriptor_chat_732204f30d7bcb33 = []byte{ + // 508 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xdd, 0x6e, 0xda, 0x30, + 0x14, 0x56, 0x68, 0x0b, 0xe3, 0xb0, 0x0a, 0xc9, 0xad, 0xa6, 0x88, 0xab, 0x34, 0xd2, 0x26, 0xb4, + 0x49, 0x89, 0xc4, 0x76, 0xb7, 0xab, 0xd1, 0x54, 0x13, 0xd2, 0xbc, 0xb6, 0x81, 0xdd, 0xec, 0x86, + 0xb9, 0xcd, 0x51, 0x88, 0x80, 0xc4, 0xf8, 0x84, 0xd1, 0x6d, 0xcf, 0xb0, 0x67, 0xd8, 0xab, 0xed, + 0x51, 0xa6, 0xd8, 0x69, 0x09, 0x05, 0xa9, 0x5c, 0xed, 0x06, 0xe9, 0x7c, 0xfe, 0xfc, 0xfd, 0x18, + 0xc7, 0xd0, 0xbe, 0x9d, 0x88, 0xdc, 0x2f, 0x7e, 0x3c, 0xa9, 0xb2, 0x3c, 0x63, 0x75, 0x79, 0x73, + 0x3e, 0x11, 0x79, 0xe7, 0xec, 0x52, 0x62, 0x3a, 0x1e, 0x70, 0x5f, 0x4e, 0x63, 0x5f, 0x2f, 0xf9, + 0x14, 0x4d, 0xc7, 0x2b, 0xf2, 0x57, 0x64, 0xa8, 0xee, 0x2f, 0x68, 0x71, 0x8a, 0x03, 0x91, 0x8b, + 0x51, 0xc6, 0xaf, 0xd9, 0x29, 0x1c, 0xe5, 0xd9, 0x14, 0x53, 0xdb, 0x72, 0xac, 0x6e, 0x33, 0x34, + 0x03, 0x73, 0xa0, 0x95, 0x49, 0x54, 0x22, 0x4f, 0xb2, 0x74, 0x10, 0xd8, 0x35, 0xbd, 0x56, 0x85, + 0xd8, 0x3b, 0x68, 0xcc, 0x8d, 0x8c, 0x7d, 0xe0, 0x58, 0xdd, 0x56, 0xaf, 0xe3, 0x11, 0xaa, 0xef, + 0xa8, 0xc6, 0x42, 0x26, 0x63, 0x29, 0x94, 0x98, 0x93, 0x57, 0x1a, 0x85, 0xf7, 0x54, 0x17, 0x2b, + 0xe6, 0x41, 0xbf, 0x2a, 0x62, 0xed, 0x2d, 0xf2, 0x74, 0x38, 0xf7, 0xb7, 0x05, 0xed, 0xab, 0x25, + 0x4d, 0xaa, 0x45, 0x1d, 0x68, 0x5d, 0x56, 0x76, 0x99, 0xba, 0x55, 0xa8, 0x9a, 0xa6, 0xb6, 0x7f, + 0x1a, 0x17, 0x9e, 0xcb, 0x25, 0x4d, 0x46, 0xd9, 0x17, 0x42, 0x35, 0x08, 0xf4, 0x69, 0x34, 0xc3, + 0x0d, 0xcc, 0xfd, 0x0c, 0xec, 0x23, 0xe6, 0x5c, 0xdc, 0x7d, 0x48, 0x23, 0x9e, 0xa4, 0x43, 0x5c, + 0x84, 0xb8, 0x60, 0x2f, 0xa0, 0x5e, 0xee, 0x31, 0x61, 0xca, 0xe9, 0x71, 0xd2, 0xda, 0x56, 0x52, + 0x77, 0x05, 0x27, 0x5b, 0x7a, 0x24, 0x99, 0x0d, 0x8d, 0x0b, 0xa5, 0xce, 0xb3, 0x08, 0xb5, 0xe2, + 0x51, 0x78, 0x3f, 0x16, 0x56, 0x17, 0x4a, 0x71, 0x8a, 0x4b, 0xb5, 0x72, 0x2a, 0x70, 0x2e, 0xee, + 0x86, 0xb8, 0xd0, 0xb1, 0x8f, 0xc3, 0x72, 0xd2, 0xb8, 0xd6, 0xb5, 0x0f, 0x4b, 0x5c, 0x4f, 0xee, + 0x4f, 0x80, 0x21, 0xa6, 0x11, 0xa7, 0xb8, 0x28, 0xf0, 0x7f, 0xef, 0xce, 0x1f, 0x0b, 0x5a, 0x0f, + 0xe6, 0xa6, 0x2d, 0x6e, 0xb6, 0xc5, 0x75, 0x5b, 0xdc, 0x68, 0x6b, 0xa6, 0x22, 0x99, 0xf1, 0xe1, + 0x14, 0x0f, 0x02, 0x5d, 0xad, 0x19, 0x56, 0xa1, 0x82, 0x71, 0x3b, 0x4b, 0x30, 0xcd, 0x0d, 0xe3, + 0xc8, 0x30, 0x2a, 0x10, 0xeb, 0xc0, 0x33, 0xc2, 0x34, 0x1a, 0x25, 0x73, 0xb4, 0xeb, 0x8e, 0xd5, + 0x3d, 0x08, 0x1f, 0xe6, 0xde, 0xdf, 0x1a, 0x1c, 0x16, 0x9f, 0x21, 0xfb, 0x06, 0xed, 0x47, 0xff, + 0x0f, 0x7b, 0xb9, 0xa3, 0xe2, 0xf6, 0x9d, 0xe8, 0xbc, 0xda, 0x87, 0x46, 0x92, 0x65, 0x70, 0x7a, + 0xb5, 0x9c, 0xcd, 0x38, 0x12, 0x89, 0x18, 0xfb, 0x3f, 0x86, 0xb8, 0xf8, 0x94, 0x50, 0xce, 0x5e, + 0xef, 0xd8, 0xbf, 0x8b, 0x58, 0x78, 0xbd, 0xd9, 0x9b, 0x4b, 0x92, 0xf5, 0xa0, 0x51, 0x1e, 0x3e, + 0x63, 0x9e, 0x79, 0x6d, 0xbc, 0xf5, 0x55, 0xe8, 0x9c, 0x6c, 0x61, 0x24, 0xd9, 0x35, 0x40, 0x80, + 0x33, 0x4e, 0xb1, 0x8e, 0xe6, 0xec, 0xb0, 0x5b, 0x2f, 0x17, 0x22, 0x67, 0x4f, 0x30, 0x48, 0xf6, + 0xdb, 0x5f, 0x8f, 0x3d, 0xfd, 0xf0, 0xbd, 0x37, 0x7e, 0x37, 0x75, 0xfd, 0xaa, 0xbd, 0xfd, 0x17, + 0x00, 0x00, 0xff, 0xff, 0x9f, 0xc6, 0xef, 0x8e, 0x13, 0x05, 0x00, 0x00, } diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index 146994f01..d30010db2 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -75,7 +75,7 @@ message SendMsgResp { service Chat { - rpc GetMaxAndMinSeq(GetMaxAndMinSeqReq) returns(GetMaxAndMinSeqResp); + rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc SendMsg(SendMsgReq) returns(SendMsgResp); rpc DelMsgList(server_api_params.DelMsgListReq) returns(server_api_params.DelMsgListResp); diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 8ed8e4a1c..6c768fcaa 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,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_b2b8932ad953b270, []int{0} + return fileDescriptor_ws_5ad487361de288a1, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,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_b2b8932ad953b270, []int{1} + return fileDescriptor_ws_5ad487361de288a1, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,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_b2b8932ad953b270, []int{2} + return fileDescriptor_ws_5ad487361de288a1, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,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_b2b8932ad953b270, []int{3} + return fileDescriptor_ws_5ad487361de288a1, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,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_b2b8932ad953b270, []int{4} + return fileDescriptor_ws_5ad487361de288a1, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,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_b2b8932ad953b270, []int{5} + return fileDescriptor_ws_5ad487361de288a1, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,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_b2b8932ad953b270, []int{6} + return fileDescriptor_ws_5ad487361de288a1, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,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_b2b8932ad953b270, []int{7} + return fileDescriptor_ws_5ad487361de288a1, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,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_b2b8932ad953b270, []int{8} + return fileDescriptor_ws_5ad487361de288a1, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,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_b2b8932ad953b270, []int{9} + return fileDescriptor_ws_5ad487361de288a1, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,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_b2b8932ad953b270, []int{10} + return fileDescriptor_ws_5ad487361de288a1, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,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_b2b8932ad953b270, []int{11} + return fileDescriptor_ws_5ad487361de288a1, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,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_b2b8932ad953b270, []int{12} + return fileDescriptor_ws_5ad487361de288a1, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1279,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_b2b8932ad953b270, []int{13} + return fileDescriptor_ws_5ad487361de288a1, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1338,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_b2b8932ad953b270, []int{14} + return fileDescriptor_ws_5ad487361de288a1, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1376,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_b2b8932ad953b270, []int{15} + return fileDescriptor_ws_5ad487361de288a1, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1417,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_b2b8932ad953b270, []int{16} + return fileDescriptor_ws_5ad487361de288a1, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1468,6 +1468,7 @@ func (m *PullMessageBySeqListResp) GetGroupMsgDataList() map[string]*MsgDataList type GetMaxAndMinSeqReq struct { GroupIDList []string `protobuf:"bytes,1,rep,name=groupIDList" json:"groupIDList,omitempty"` UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1477,7 +1478,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_b2b8932ad953b270, []int{17} + return fileDescriptor_ws_5ad487361de288a1, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1511,6 +1512,13 @@ func (m *GetMaxAndMinSeqReq) GetUserID() string { return "" } +func (m *GetMaxAndMinSeqReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + type MaxAndMinSeq struct { MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` @@ -1523,7 +1531,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_b2b8932ad953b270, []int{18} + return fileDescriptor_ws_5ad487361de288a1, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1560,7 +1568,9 @@ func (m *MaxAndMinSeq) GetMinSeq() uint32 { type GetMaxAndMinSeqResp struct { MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` - GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,3,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ErrCode int32 `protobuf:"varint,3,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,4,opt,name=errMsg" json:"errMsg,omitempty"` + GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,5,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1570,7 +1580,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_b2b8932ad953b270, []int{19} + return fileDescriptor_ws_5ad487361de288a1, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1604,6 +1614,20 @@ func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { return 0 } +func (m *GetMaxAndMinSeqResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *GetMaxAndMinSeqResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + func (m *GetMaxAndMinSeqResp) GetGroupMaxAndMinSeq() map[string]*MaxAndMinSeq { if m != nil { return m.GroupMaxAndMinSeq @@ -1624,7 +1648,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_b2b8932ad953b270, []int{20} + return fileDescriptor_ws_5ad487361de288a1, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1694,7 +1718,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_b2b8932ad953b270, []int{21} + return fileDescriptor_ws_5ad487361de288a1, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1862,7 +1886,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_b2b8932ad953b270, []int{22} + return fileDescriptor_ws_5ad487361de288a1, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1930,7 +1954,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_b2b8932ad953b270, []int{23} + return fileDescriptor_ws_5ad487361de288a1, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1987,7 +2011,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_b2b8932ad953b270, []int{24} + return fileDescriptor_ws_5ad487361de288a1, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2056,7 +2080,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_b2b8932ad953b270, []int{25} + return fileDescriptor_ws_5ad487361de288a1, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2111,7 +2135,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_b2b8932ad953b270, []int{26} + return fileDescriptor_ws_5ad487361de288a1, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2167,7 +2191,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_b2b8932ad953b270, []int{27} + return fileDescriptor_ws_5ad487361de288a1, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2222,7 +2246,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_b2b8932ad953b270, []int{28} + return fileDescriptor_ws_5ad487361de288a1, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2277,7 +2301,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_b2b8932ad953b270, []int{29} + return fileDescriptor_ws_5ad487361de288a1, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2333,7 +2357,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_b2b8932ad953b270, []int{30} + return fileDescriptor_ws_5ad487361de288a1, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2396,7 +2420,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_b2b8932ad953b270, []int{31} + return fileDescriptor_ws_5ad487361de288a1, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2459,7 +2483,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_b2b8932ad953b270, []int{32} + return fileDescriptor_ws_5ad487361de288a1, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2521,7 +2545,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_b2b8932ad953b270, []int{33} + return fileDescriptor_ws_5ad487361de288a1, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2575,7 +2599,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_b2b8932ad953b270, []int{34} + return fileDescriptor_ws_5ad487361de288a1, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2631,7 +2655,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_b2b8932ad953b270, []int{35} + return fileDescriptor_ws_5ad487361de288a1, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2700,7 +2724,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_b2b8932ad953b270, []int{36} + return fileDescriptor_ws_5ad487361de288a1, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2761,7 +2785,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_b2b8932ad953b270, []int{37} + return fileDescriptor_ws_5ad487361de288a1, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2815,7 +2839,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_b2b8932ad953b270, []int{38} + return fileDescriptor_ws_5ad487361de288a1, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2870,7 +2894,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_b2b8932ad953b270, []int{39} + return fileDescriptor_ws_5ad487361de288a1, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2930,7 +2954,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_b2b8932ad953b270, []int{40} + return fileDescriptor_ws_5ad487361de288a1, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -2977,7 +3001,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_b2b8932ad953b270, []int{41} + return fileDescriptor_ws_5ad487361de288a1, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3030,7 +3054,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_b2b8932ad953b270, []int{42} + return fileDescriptor_ws_5ad487361de288a1, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3076,7 +3100,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_b2b8932ad953b270, []int{43} + return fileDescriptor_ws_5ad487361de288a1, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3116,7 +3140,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_b2b8932ad953b270, []int{44} + return fileDescriptor_ws_5ad487361de288a1, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3163,7 +3187,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_b2b8932ad953b270, []int{45} + return fileDescriptor_ws_5ad487361de288a1, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3211,7 +3235,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_b2b8932ad953b270, []int{46} + return fileDescriptor_ws_5ad487361de288a1, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3264,7 +3288,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_b2b8932ad953b270, []int{47} + return fileDescriptor_ws_5ad487361de288a1, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3302,7 +3326,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_b2b8932ad953b270, []int{48} + return fileDescriptor_ws_5ad487361de288a1, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3340,7 +3364,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_b2b8932ad953b270, []int{49} + return fileDescriptor_ws_5ad487361de288a1, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3378,7 +3402,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_b2b8932ad953b270, []int{50} + return fileDescriptor_ws_5ad487361de288a1, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3417,7 +3441,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_b2b8932ad953b270, []int{51} + return fileDescriptor_ws_5ad487361de288a1, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3456,7 +3480,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_b2b8932ad953b270, []int{52} + return fileDescriptor_ws_5ad487361de288a1, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3496,7 +3520,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_b2b8932ad953b270, []int{53} + return fileDescriptor_ws_5ad487361de288a1, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3551,7 +3575,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_b2b8932ad953b270, []int{54} + return fileDescriptor_ws_5ad487361de288a1, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3605,7 +3629,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_b2b8932ad953b270, []int{55} + return fileDescriptor_ws_5ad487361de288a1, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3651,7 +3675,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_b2b8932ad953b270, []int{56} + return fileDescriptor_ws_5ad487361de288a1, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3704,7 +3728,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_b2b8932ad953b270, []int{57} + return fileDescriptor_ws_5ad487361de288a1, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3971,7 +3995,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_b2b8932ad953b270, []int{58} + return fileDescriptor_ws_5ad487361de288a1, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4239,7 +4263,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_b2b8932ad953b270, []int{59} + return fileDescriptor_ws_5ad487361de288a1, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4335,7 +4359,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_b2b8932ad953b270, []int{60} + return fileDescriptor_ws_5ad487361de288a1, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4390,7 +4414,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_b2b8932ad953b270, []int{61} + return fileDescriptor_ws_5ad487361de288a1, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4451,7 +4475,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_b2b8932ad953b270, []int{62} + return fileDescriptor_ws_5ad487361de288a1, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4506,7 +4530,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_b2b8932ad953b270, []int{63} + return fileDescriptor_ws_5ad487361de288a1, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4567,7 +4591,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_b2b8932ad953b270, []int{64} + return fileDescriptor_ws_5ad487361de288a1, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4622,7 +4646,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_b2b8932ad953b270, []int{65} + return fileDescriptor_ws_5ad487361de288a1, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4680,7 +4704,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_b2b8932ad953b270, []int{66} + return fileDescriptor_ws_5ad487361de288a1, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4715,7 +4739,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_b2b8932ad953b270, []int{67} + return fileDescriptor_ws_5ad487361de288a1, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4783,7 +4807,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_b2b8932ad953b270, []int{68} + return fileDescriptor_ws_5ad487361de288a1, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4837,7 +4861,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_b2b8932ad953b270, []int{69} + return fileDescriptor_ws_5ad487361de288a1, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4888,7 +4912,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_b2b8932ad953b270, []int{70} + return fileDescriptor_ws_5ad487361de288a1, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4923,7 +4947,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_b2b8932ad953b270, []int{71} + return fileDescriptor_ws_5ad487361de288a1, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4988,7 +5012,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_b2b8932ad953b270, []int{72} + return fileDescriptor_ws_5ad487361de288a1, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5022,7 +5046,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_b2b8932ad953b270, []int{73} + return fileDescriptor_ws_5ad487361de288a1, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5082,7 +5106,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_b2b8932ad953b270, []int{74} + return fileDescriptor_ws_5ad487361de288a1, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5198,211 +5222,212 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_b2b8932ad953b270) } - -var fileDescriptor_ws_b2b8932ad953b270 = []byte{ - // 3238 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x24, 0x57, - 0x11, 0xa7, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x3f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x1f, 0x8b, 0xfc, 0x91, 0xfd, 0x48, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc3, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x48, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, - 0x90, 0x38, 0x20, 0xc4, 0x81, 0x3f, 0x00, 0x8e, 0x88, 0x0b, 0xe2, 0xcc, 0x95, 0x03, 0x12, 0x12, - 0xe8, 0x55, 0xbd, 0xee, 0x7e, 0xaf, 0xbb, 0xc7, 0x9e, 0x1d, 0x59, 0xd9, 0x8d, 0x96, 0x9b, 0xab, - 0xe6, 0x55, 0xbd, 0x7a, 0xf5, 0xab, 0x57, 0x55, 0xfd, 0xde, 0x33, 0x2c, 0xc4, 0xce, 0xe1, 0x7b, - 0x77, 0xe3, 0xe7, 0xef, 0xc6, 0x97, 0xc2, 0x28, 0x48, 0x02, 0x63, 0x29, 0x66, 0xd1, 0x31, 0x8b, - 0xde, 0xb3, 0x43, 0xf7, 0xbd, 0xd0, 0x8e, 0xec, 0x61, 0x6c, 0xfe, 0x4b, 0x87, 0xf6, 0xd5, 0x28, - 0x48, 0xc3, 0xeb, 0xfe, 0x7e, 0x60, 0x74, 0x61, 0x7a, 0x80, 0xc4, 0x56, 0x57, 0x5b, 0xd5, 0x9e, - 0x6d, 0x5b, 0x19, 0x69, 0x5c, 0x80, 0x36, 0xfe, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0xdf, 0x0a, - 0x86, 0x61, 0xc2, 0xac, 0x1f, 0x24, 0xee, 0xbe, 0xdb, 0xb7, 0x13, 0x37, 0xf0, 0xbb, 0x0d, 0x1c, - 0xa0, 0xf0, 0xf8, 0x18, 0xd7, 0x4f, 0xa2, 0xc0, 0x49, 0xfb, 0x38, 0x66, 0x8a, 0xc6, 0xc8, 0x3c, - 0x3e, 0xff, 0xbe, 0xdd, 0x67, 0xb7, 0xad, 0x1b, 0xdd, 0x26, 0xcd, 0x2f, 0x48, 0x63, 0x15, 0x3a, - 0xc1, 0x5d, 0x9f, 0x45, 0xb7, 0x63, 0x16, 0x5d, 0xdf, 0xea, 0xb6, 0xf0, 0x57, 0x99, 0x65, 0x5c, - 0x04, 0xe8, 0x47, 0xcc, 0x4e, 0xd8, 0x2d, 0x77, 0xc8, 0xba, 0xd3, 0xab, 0xda, 0xb3, 0x73, 0x96, - 0xc4, 0xe1, 0x1a, 0x86, 0x6c, 0xb8, 0xc7, 0xa2, 0xcd, 0x20, 0xf5, 0x93, 0xee, 0x0c, 0x0e, 0x90, - 0x59, 0xc6, 0x3c, 0xe8, 0xec, 0x5e, 0xb7, 0x8d, 0xaa, 0x75, 0x76, 0xcf, 0x58, 0x86, 0x56, 0x9c, - 0xd8, 0x49, 0x1a, 0x77, 0x61, 0x55, 0x7b, 0xb6, 0x69, 0x09, 0xca, 0x58, 0x83, 0x39, 0xd4, 0x1b, - 0x64, 0xd6, 0x74, 0x50, 0x44, 0x65, 0xe6, 0x1e, 0xbb, 0x75, 0x3f, 0x64, 0xdd, 0x59, 0x54, 0x50, - 0x30, 0xcc, 0xbf, 0xea, 0x70, 0x0e, 0xfd, 0xbe, 0x8d, 0x06, 0x5c, 0x49, 0x3d, 0xef, 0x14, 0x04, - 0x96, 0xa1, 0x95, 0xd2, 0x74, 0xe4, 0x7e, 0x41, 0xf1, 0x79, 0xa2, 0xc0, 0x63, 0x37, 0xd8, 0x31, - 0xf3, 0xd0, 0xf1, 0x4d, 0xab, 0x60, 0x18, 0x2b, 0x30, 0x73, 0x27, 0x70, 0x7d, 0xf4, 0xc9, 0x14, - 0xfe, 0x98, 0xd3, 0xfc, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, - 0xb4, 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0x9a, 0x74, 0x1a, - 0xf5, 0x96, 0xb8, 0x1c, 0x0f, 0x3e, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, - 0xc3, 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, - 0x1c, 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0xb8, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, - 0x7e, 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, - 0xa0, 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, - 0x28, 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, - 0x0f, 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, - 0x4a, 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, - 0x62, 0x41, 0x33, 0xb9, 0xef, 0xd5, 0x3d, 0xd6, 0xae, 0xec, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, - 0x98, 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x73, 0x6b, 0xd5, 0xcd, - 0xbd, 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, - 0xbd, 0x0a, 0xb0, 0x8f, 0xf3, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x49, 0x83, - 0x97, 0x32, 0x94, 0x2c, 0x69, 0x38, 0xdf, 0x59, 0xb6, 0xe3, 0x88, 0x00, 0x6e, 0xd2, 0xce, 0xca, - 0x19, 0x35, 0xf1, 0xdb, 0x3a, 0x21, 0x7e, 0xa7, 0xf3, 0xa0, 0xf8, 0xa7, 0x06, 0xed, 0x0d, 0xcf, - 0xee, 0x1f, 0x8e, 0xb9, 0x74, 0x75, 0x89, 0x7a, 0x65, 0x89, 0x57, 0x61, 0x6e, 0x8f, 0xab, 0xcb, - 0x96, 0x80, 0x5e, 0xe8, 0xbc, 0xf8, 0x99, 0x9a, 0x55, 0xaa, 0x9b, 0xc2, 0x52, 0xe5, 0xd4, 0xe5, - 0x4e, 0x9d, 0xbe, 0xdc, 0xe6, 0x09, 0xcb, 0x6d, 0xe5, 0xcb, 0xfd, 0x8b, 0x0e, 0xb3, 0x98, 0xe8, - 0x2c, 0x76, 0x94, 0xb2, 0x38, 0x31, 0x5e, 0x87, 0x99, 0x34, 0x33, 0x55, 0x1b, 0xd7, 0xd4, 0x5c, - 0xc4, 0x78, 0x45, 0xa4, 0x55, 0x94, 0xd7, 0x51, 0xfe, 0x42, 0x8d, 0x7c, 0x5e, 0xd3, 0xac, 0x62, - 0x38, 0x2f, 0x41, 0x07, 0xb6, 0xef, 0x78, 0xcc, 0x62, 0x71, 0xea, 0x25, 0x22, 0x5b, 0x2a, 0x3c, - 0x8a, 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x0a, 0x94, 0xa0, 0xb8, 0x77, 0x68, 0x1c, 0xff, 0x89, 0x96, - 0x5e, 0x30, 0xf8, 0x46, 0x8d, 0xd8, 0x11, 0x22, 0x44, 0xdb, 0x2a, 0x23, 0x8b, 0x39, 0x85, 0xd7, - 0x28, 0x10, 0x14, 0x1e, 0x87, 0x98, 0x68, 0x54, 0x40, 0x95, 0x49, 0xe2, 0x94, 0x0b, 0x93, 0xf9, - 0xb7, 0x06, 0xcc, 0xd1, 0xf6, 0xc9, 0x9c, 0x7a, 0x91, 0xc7, 0x79, 0x30, 0x54, 0xa2, 0x48, 0xe2, - 0x70, 0x2b, 0x38, 0xb5, 0xa3, 0x26, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x84, 0x23, - 0xb3, 0xb2, 0x59, 0xae, 0xca, 0x89, 0x47, 0xe2, 0xf0, 0x54, 0x96, 0x04, 0x4a, 0x74, 0xe4, 0x34, - 0x97, 0x4d, 0x82, 0x7c, 0x7e, 0x8a, 0x0f, 0x89, 0xc3, 0xfd, 0x9b, 0x04, 0xd9, 0xdc, 0xe4, 0xa4, - 0x82, 0x41, 0x9a, 0xc5, 0xbc, 0x54, 0x4a, 0x72, 0xba, 0x82, 0x6a, 0xfb, 0x44, 0x54, 0x41, 0x41, - 0x55, 0xdd, 0x5c, 0x9d, 0xca, 0xe6, 0x5a, 0x83, 0x39, 0xd2, 0x93, 0x05, 0xfd, 0x2c, 0x95, 0x7a, - 0x85, 0xa9, 0xc6, 0xc6, 0x5c, 0x39, 0x36, 0x54, 0x74, 0xe7, 0x47, 0xa0, 0xbb, 0x90, 0xa3, 0xfb, - 0x6b, 0x1d, 0x60, 0x8b, 0x85, 0x76, 0x94, 0x0c, 0x99, 0x9f, 0xf0, 0xe5, 0x39, 0x39, 0x95, 0x83, - 0xab, 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x74, 0x38, 0xa1, 0x89, 0x7f, 0x73, - 0x67, 0x86, 0x76, 0x44, 0xda, 0x28, 0xc8, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, - 0x5a, 0x44, 0xf0, 0xcd, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf2, 0xba, 0xca, 0x3d, 0xb5, 0x07, - 0x7b, 0x0e, 0x16, 0xe3, 0x74, 0xaf, 0x58, 0xdc, 0x4e, 0x3a, 0x14, 0xe1, 0x5e, 0xe1, 0x73, 0xa7, - 0x52, 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, - 0xd1, 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x09, 0x7c, 0x92, 0x92, 0xbb, 0x0a, 0x1d, 0xe6, - 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x2a, 0xca, 0x4d, - 0xa5, 0x28, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, - 0xc3, 0xea, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x0a, 0xf5, 0x4c, 0x6d, 0xa1, 0x6e, 0xcb, 0x85, 0x5a, - 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0xa3, 0x06, 0x8b, 0x85, 0xbb, 0xa9, - 0x07, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, - 0x69, 0x41, 0xec, 0x4a, 0xfd, 0x7e, 0x4e, 0xf3, 0xd9, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xea, - 0xba, 0x5b, 0x4a, 0xd7, 0x5d, 0xae, 0xa3, 0xbf, 0xd3, 0xe0, 0x3c, 0x47, 0xb9, 0xb2, 0x8c, 0x9b, - 0xb0, 0x18, 0x94, 0x22, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, - 0x57, 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, - 0x83, 0x45, 0x2a, 0x6d, 0xd2, 0x3e, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, - 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xef, 0xb5, 0x27, 0x77, 0x53, 0xcf, - 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, - 0x0c, 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x10, 0x92, 0x59, 0x7c, 0x5b, 0xc5, 0xa4, - 0xa7, 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, - 0x9d, 0xc2, 0x05, 0xbc, 0x56, 0xdb, 0x35, 0xd4, 0x5a, 0x45, 0xdd, 0x80, 0xa0, 0xdf, 0xf0, 0x93, - 0xe8, 0xbe, 0xa5, 0x68, 0x5c, 0x79, 0x17, 0x96, 0x2a, 0x43, 0x8c, 0x45, 0x68, 0x1c, 0xb2, 0xfb, - 0x62, 0x1d, 0xfc, 0x4f, 0xe3, 0x05, 0x68, 0x1e, 0xdb, 0x5e, 0xca, 0x04, 0xfa, 0x2b, 0x35, 0x16, - 0x08, 0x9b, 0x2d, 0x1a, 0xf8, 0x8a, 0xfe, 0x65, 0xcd, 0x7c, 0x3a, 0x5f, 0x98, 0xbc, 0x46, 0x4d, - 0x59, 0xa3, 0xf9, 0x16, 0x74, 0xb6, 0xe3, 0xc1, 0x96, 0x9d, 0xd8, 0x38, 0xf0, 0x35, 0xe8, 0x0c, - 0x0b, 0x12, 0x07, 0xd7, 0xcf, 0x27, 0x84, 0x2c, 0x79, 0xb8, 0xf9, 0x67, 0x1d, 0xba, 0xf5, 0xae, - 0x88, 0x43, 0x6e, 0x03, 0x8b, 0xa2, 0xcd, 0xc0, 0x61, 0xb8, 0xb4, 0xa6, 0x95, 0x91, 0x1c, 0x3b, - 0x16, 0x45, 0xbc, 0x86, 0x89, 0x26, 0x9b, 0x28, 0xe3, 0x12, 0x4c, 0x79, 0x19, 0x2c, 0x27, 0x5b, - 0x81, 0xe3, 0x8c, 0x21, 0x2c, 0xa2, 0x77, 0xa5, 0x05, 0x09, 0xcc, 0xd6, 0xc7, 0xc6, 0x2c, 0x0e, - 0x09, 0x34, 0x49, 0x07, 0x01, 0x57, 0x51, 0xbd, 0xd2, 0x87, 0x27, 0x6a, 0x87, 0xd6, 0x00, 0xf8, - 0x25, 0x15, 0xc0, 0x8b, 0xa3, 0x97, 0x52, 0x06, 0x71, 0x07, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, - 0xad, 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xcf, 0xf3, 0x1c, - 0xa6, 0xb6, 0x25, 0xb3, 0x46, 0x7d, 0xb5, 0x9b, 0x97, 0x61, 0x56, 0x56, 0x86, 0x25, 0xc2, 0xbe, - 0xd7, 0x63, 0x47, 0x68, 0xee, 0x9c, 0x25, 0x28, 0xe4, 0xe3, 0x08, 0xd1, 0xf9, 0x0b, 0xca, 0xfc, - 0x89, 0x0e, 0xe7, 0x2a, 0x06, 0xc5, 0xe1, 0x83, 0xea, 0x31, 0x0e, 0x61, 0x89, 0x1c, 0x2a, 0x29, - 0x12, 0x40, 0xbf, 0x5e, 0xd7, 0x56, 0x57, 0xa7, 0x14, 0x38, 0x49, 0x5c, 0x02, 0xaa, 0xaa, 0x77, - 0x85, 0xc1, 0x72, 0xfd, 0xe0, 0x1a, 0xa8, 0x5e, 0x56, 0xa1, 0xfa, 0x74, 0x1d, 0x54, 0xb2, 0x25, - 0x12, 0x56, 0x47, 0xb0, 0xc0, 0x13, 0x60, 0x8f, 0xf9, 0xce, 0x76, 0x3c, 0x40, 0xb7, 0xac, 0x42, - 0x87, 0xe4, 0xb7, 0xe3, 0x41, 0xf1, 0x99, 0x25, 0xb1, 0xf8, 0x88, 0xbe, 0xe7, 0xf2, 0x44, 0x87, - 0x23, 0x44, 0x82, 0x92, 0x58, 0xbc, 0x98, 0xc5, 0x4c, 0x9c, 0x3a, 0xf0, 0x2a, 0xd7, 0xb0, 0x72, - 0xda, 0xfc, 0x7b, 0x13, 0xa6, 0x45, 0xe4, 0x60, 0x01, 0xe3, 0x5f, 0xb6, 0x79, 0x0a, 0x24, 0x8a, - 0x7a, 0xd0, 0xfe, 0x71, 0x11, 0x0a, 0x44, 0xc9, 0x47, 0x3e, 0x0d, 0xf5, 0xc8, 0xa7, 0x64, 0xd3, - 0x54, 0xd5, 0xa6, 0xd2, 0xba, 0x9a, 0xd5, 0x75, 0xf1, 0x96, 0x0b, 0xbb, 0x90, 0x5d, 0xcf, 0x4e, - 0xf6, 0x83, 0x68, 0x28, 0x3e, 0x54, 0x9b, 0x56, 0x85, 0xcf, 0xdb, 0x3c, 0xe2, 0xe5, 0x7d, 0x3a, - 0x95, 0xdb, 0x12, 0x97, 0x77, 0xc5, 0xc4, 0xc9, 0xfa, 0x75, 0x3a, 0x21, 0x50, 0x99, 0x64, 0x5b, - 0x1c, 0xbb, 0x81, 0x8f, 0x1d, 0x23, 0xb5, 0xe5, 0x32, 0x8b, 0xaf, 0x7c, 0x18, 0x0f, 0xae, 0x44, - 0xc1, 0x50, 0x9c, 0x13, 0x64, 0x24, 0xae, 0x3c, 0xf0, 0x93, 0xac, 0xdb, 0xec, 0x90, 0xac, 0xc4, - 0xe2, 0xb2, 0x82, 0xc4, 0x9e, 0x7c, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0x8d, 0x36, - 0xff, 0x53, 0x41, 0x6e, 0x41, 0x45, 0xae, 0xd4, 0x39, 0x2d, 0xe2, 0xaf, 0x72, 0xe7, 0x54, 0xb4, - 0x23, 0x4b, 0x4a, 0x3b, 0xb2, 0x0e, 0xd3, 0x41, 0xc8, 0x4b, 0x57, 0xdc, 0x35, 0x70, 0xbb, 0x7c, - 0x76, 0x74, 0x32, 0xb9, 0x74, 0x93, 0x46, 0xd2, 0xc6, 0xc8, 0xe4, 0x8c, 0x1b, 0xb0, 0x10, 0xec, - 0xef, 0x7b, 0xae, 0xcf, 0x76, 0xd3, 0xf8, 0x00, 0x3f, 0x68, 0xcf, 0x61, 0xb0, 0x9b, 0x75, 0x05, - 0x5f, 0x1d, 0x69, 0x95, 0x45, 0x79, 0x97, 0x66, 0x27, 0xf4, 0x41, 0x82, 0xc9, 0xe8, 0x3c, 0x26, - 0x23, 0x85, 0xb7, 0xf2, 0x0a, 0xcc, 0xca, 0xa6, 0xd4, 0x6c, 0xbb, 0xf3, 0xf2, 0xb6, 0x9b, 0x91, - 0x77, 0xd5, 0x8f, 0x34, 0x58, 0x28, 0x19, 0xc1, 0x47, 0x27, 0x6e, 0xe2, 0x31, 0xa1, 0x81, 0x08, - 0xfe, 0xcd, 0xe1, 0xb0, 0xb8, 0x2f, 0xc2, 0x1c, 0xff, 0x16, 0xdd, 0x5b, 0x23, 0x3f, 0x49, 0x32, - 0x61, 0xd6, 0xbd, 0xd9, 0xe3, 0x8a, 0x7a, 0x41, 0xea, 0x3b, 0xf9, 0x69, 0xb0, 0xc4, 0xe3, 0x61, - 0xe6, 0xde, 0xec, 0x6d, 0xd8, 0xce, 0x80, 0xd1, 0x99, 0x6d, 0x13, 0x6d, 0x52, 0x99, 0xa6, 0x03, - 0x33, 0xb7, 0xdc, 0x30, 0xde, 0x0c, 0x86, 0x43, 0x0e, 0x96, 0xc3, 0x12, 0xde, 0x1d, 0x6b, 0x18, - 0x13, 0x82, 0xe2, 0xe1, 0xe4, 0xb0, 0x7d, 0x3b, 0xf5, 0x12, 0x3e, 0x34, 0xdb, 0xdc, 0x12, 0x0b, - 0x4f, 0x2b, 0xe3, 0xc0, 0xdf, 0x22, 0x69, 0xb2, 0x53, 0xe2, 0x98, 0x7f, 0xd2, 0x61, 0x11, 0x73, - 0xd7, 0x26, 0x86, 0x86, 0x83, 0x42, 0x2f, 0x42, 0x13, 0xb7, 0xaa, 0xe8, 0xd3, 0x4e, 0x3e, 0x87, - 0xa0, 0xa1, 0xc6, 0x65, 0x68, 0x05, 0x21, 0x36, 0x77, 0x94, 0xd8, 0x9e, 0x19, 0x25, 0xa4, 0x1e, - 0x0c, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0x7a, 0x39, 0xca, 0xd4, 0xe3, 0xea, 0x90, 0x24, - 0xb9, 0x73, 0xf3, 0xee, 0x2b, 0x3f, 0x1d, 0x6e, 0x58, 0x2a, 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, - 0x66, 0x76, 0x20, 0x85, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, 0xfc, 0xb9, 0x26, 0xdc, 0xc8, 0x7f, - 0xed, 0x31, 0xf2, 0x7d, 0xe1, 0x12, 0x6d, 0x22, 0x97, 0xac, 0xc0, 0xcc, 0x30, 0x95, 0xce, 0xc7, - 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, - 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x57, 0x18, 0x13, 0x63, 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, - 0x4f, 0x04, 0xec, 0x63, 0x9c, 0x79, 0x15, 0x32, 0xd2, 0xf1, 0x45, 0x43, 0x3e, 0xbe, 0x30, 0x3f, - 0xd0, 0x60, 0x9e, 0x9c, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, - 0x4c, 0x10, 0x95, 0xb9, 0x5c, 0x35, 0x9e, 0x1a, 0x35, 0xf1, 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0xb2, - 0x5b, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x2d, 0xa5, 0x1c, 0xdf, 0x4c, 0x95, 0x8e, 0x6f, 0x6a, - 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, 0x0e, 0x9f, 0xbc, 0x9a, 0x6f, 0xbc, - 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, - 0x9b, 0xc4, 0x76, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0x5e, 0xee, 0x32, 0xff, 0xa3, 0xc1, 0x22, 0xe9, - 0x79, 0xcb, 0xed, 0x1f, 0x3e, 0xc4, 0xc5, 0xef, 0xc0, 0xfc, 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xd2, - 0x76, 0x49, 0x7a, 0xcc, 0xe5, 0xff, 0x57, 0x83, 0x25, 0x52, 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, - 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0xe8, 0x80, 0xb2, 0xf8, 0x98, 0x1e, 0xf8, 0xad, 0x06, - 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xeb, 0xbf, 0x06, 0x1d, 0xe6, 0x27, 0x91, 0xed, - 0x4f, 0x92, 0x21, 0x65, 0xd1, 0x31, 0x93, 0xe4, 0x07, 0x1a, 0x18, 0xa8, 0x6a, 0xcb, 0x8d, 0x87, - 0x6e, 0x1c, 0x3f, 0x44, 0xe8, 0xc6, 0x33, 0xf8, 0xa7, 0x3a, 0x9c, 0x97, 0xb4, 0x6c, 0xa7, 0xc9, - 0xa3, 0x6e, 0xb2, 0xb1, 0x05, 0x6d, 0xde, 0x23, 0xc8, 0xf7, 0x82, 0xe3, 0x4e, 0x54, 0x08, 0xf2, - 0x2e, 0x16, 0x89, 0x1e, 0xeb, 0x07, 0xbe, 0x13, 0x63, 0x73, 0x34, 0x67, 0x29, 0x3c, 0x9e, 0x86, - 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0xd3, - 0x90, 0x47, 0x7f, 0xc9, 0xbc, 0xd6, 0x53, 0x20, 0x7f, 0x6c, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, - 0x91, 0xfb, 0xea, 0x47, 0x37, 0xb4, 0xae, 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, - 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x0a, 0xdf, 0xa4, 0x9f, 0x70, 0xf9, 0x2f, 0x95, 0x96, 0x72, - 0xe2, 0xbd, 0xff, 0x83, 0x39, 0xfd, 0x10, 0x96, 0xe8, 0xfe, 0x55, 0xea, 0x09, 0x8d, 0x2e, 0x4c, - 0xdb, 0x0e, 0x1d, 0x32, 0x68, 0x28, 0x94, 0x91, 0xea, 0xcd, 0xba, 0x78, 0x3c, 0x55, 0xdc, 0xac, - 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, - 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x26, 0xf5, 0xc4, 0xbb, 0x5e, 0xf9, 0x16, 0x56, 0x57, - 0x6f, 0x61, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x41, 0x9c, 0x4d, 0x22, - 0x42, 0xa6, 0xee, 0xd4, 0x4d, 0xb6, 0xc5, 0x52, 0x84, 0xcc, 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, - 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, - 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, - 0x97, 0xa1, 0x45, 0x8f, 0x4b, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, 0x98, 0x3d, 0x8a, 0xb1, 0xc4, 0xe0, - 0x6a, 0x44, 0xea, 0x75, 0x3b, 0xea, 0x2b, 0x79, 0xb0, 0x8f, 0xfd, 0xfc, 0x43, 0x08, 0x98, 0x5f, - 0xcf, 0x82, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x7d, 0x64, 0xde, 0x86, 0x79, 0x7c, 0xe9, 0x52, 0xf8, - 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, 0xcd, 0x77, 0x07, 0xf7, 0x8f, 0x9c, +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_5ad487361de288a1) } + +var fileDescriptor_ws_5ad487361de288a1 = []byte{ + // 3252 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, + 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, + 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, + 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, + 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, 0x28, 0x8a, 0x10, + 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x1c, 0x11, 0x17, 0xc4, 0x99, 0x2b, 0x07, 0x24, 0x24, + 0xd0, 0xab, 0x7a, 0xdd, 0xfd, 0x5e, 0x77, 0x8f, 0x3d, 0x3b, 0xb2, 0xb2, 0x1b, 0x2d, 0xb7, 0xa9, + 0xea, 0x57, 0xf5, 0xea, 0xd5, 0x57, 0xef, 0x55, 0xbd, 0x9f, 0x81, 0x85, 0xd8, 0x39, 0x7c, 0xef, + 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, + 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, + 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, + 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x9f, 0x3b, 0xf6, 0x90, 0x75, 0x75, 0xfc, 0x56, 0x30, + 0x0c, 0x13, 0x66, 0xfd, 0x20, 0x71, 0xf7, 0xdd, 0xbe, 0x9d, 0xb8, 0x81, 0xdf, 0x6d, 0x60, 0x03, + 0x85, 0xc7, 0xdb, 0xb8, 0x7e, 0x12, 0x05, 0x4e, 0xda, 0xc7, 0x36, 0x53, 0xd4, 0x46, 0xe6, 0xf1, + 0xfe, 0xf7, 0xed, 0x3e, 0xbb, 0x6d, 0xdd, 0xe8, 0x36, 0xa9, 0x7f, 0x41, 0x1a, 0xab, 0xd0, 0x09, + 0xee, 0xfa, 0x2c, 0xba, 0x1d, 0xb3, 0xe8, 0xfa, 0x56, 0xb7, 0x85, 0x5f, 0x65, 0x96, 0x71, 0x11, + 0xa0, 0x1f, 0x31, 0x3b, 0x61, 0xb7, 0xdc, 0x21, 0xeb, 0x4e, 0xaf, 0x6a, 0xcf, 0xce, 0x59, 0x12, + 0x87, 0x6b, 0x18, 0xb2, 0xe1, 0x1e, 0x8b, 0x36, 0x83, 0xd4, 0x4f, 0xba, 0x33, 0xd8, 0x40, 0x66, + 0x19, 0xf3, 0xa0, 0xb3, 0x7b, 0xdd, 0x36, 0xaa, 0xd6, 0xd9, 0x3d, 0x63, 0x19, 0x5a, 0x71, 0x62, + 0x27, 0x69, 0xdc, 0x85, 0x55, 0xed, 0xd9, 0xa6, 0x25, 0x28, 0x63, 0x0d, 0xe6, 0x50, 0x6f, 0x90, + 0x59, 0xd3, 0x41, 0x11, 0x95, 0x99, 0x7b, 0xec, 0xd6, 0xfd, 0x90, 0x75, 0x67, 0x51, 0x41, 0xc1, + 0x30, 0xff, 0xaa, 0xc3, 0x39, 0xf4, 0xfb, 0x36, 0x1a, 0x70, 0x25, 0xf5, 0xbc, 0x53, 0x10, 0x58, + 0x86, 0x56, 0x4a, 0xdd, 0x91, 0xfb, 0x05, 0xc5, 0xfb, 0x89, 0x02, 0x8f, 0xdd, 0x60, 0xc7, 0xcc, + 0x43, 0xc7, 0x37, 0xad, 0x82, 0x61, 0xac, 0xc0, 0xcc, 0x9d, 0xc0, 0xf5, 0xd1, 0x27, 0x53, 0xf8, + 0x31, 0xa7, 0xf9, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, 0xb4, + 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0xea, 0x74, 0x1a, 0xf5, + 0x96, 0xb8, 0x1c, 0x0f, 0xde, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, 0xc3, + 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, 0x1c, + 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0x38, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, 0x7e, + 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, + 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, 0x28, + 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, 0x0f, + 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, 0x4a, + 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, 0x62, + 0x40, 0x33, 0xb9, 0xef, 0xd5, 0x39, 0xd6, 0xae, 0xcc, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, 0x98, + 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x72, 0x6b, 0xd5, 0xc9, 0xbd, + 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, 0xbd, + 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x59, 0x06, 0x2f, + 0x65, 0x28, 0x59, 0x52, 0x73, 0x3e, 0xb3, 0x6c, 0xc7, 0x11, 0x01, 0xdc, 0xa4, 0x99, 0x95, 0x33, + 0x6a, 0xe2, 0xb7, 0x75, 0x42, 0xfc, 0x4e, 0xe7, 0x41, 0xf1, 0x4f, 0x0d, 0xda, 0x1b, 0x9e, 0xdd, + 0x3f, 0x1c, 0x73, 0xe8, 0xea, 0x10, 0xf5, 0xca, 0x10, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0x0d, + 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x33, 0x35, 0xa3, 0x54, 0x27, 0x85, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, + 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, 0x87, 0xfb, 0x17, 0x1d, 0x66, 0x71, 0xa1, 0xb3, + 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, 0xd2, 0xcc, 0x54, 0x6d, 0x5c, 0x53, 0x73, 0x11, + 0xe3, 0x15, 0xb1, 0xac, 0xa2, 0xbc, 0x8e, 0xf2, 0x17, 0x6a, 0xe4, 0xf3, 0x9c, 0x66, 0x15, 0xcd, + 0x79, 0x0a, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, 0x8b, 0x53, 0x2f, 0x11, 0xab, 0xa5, 0xc2, 0xa3, + 0x48, 0x3b, 0xda, 0x8e, 0x07, 0x22, 0x41, 0x09, 0x8a, 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, + 0x82, 0xc1, 0x27, 0x6a, 0xc4, 0x8e, 0x10, 0x21, 0x9a, 0x56, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, + 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, 0x4c, 0x12, 0xa7, 0x9c, 0x98, 0xcc, 0xbf, + 0x35, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0x8b, 0x3c, 0xce, 0x83, 0xa1, 0x12, 0x45, 0x12, 0x87, + 0x5b, 0xc1, 0xa9, 0x1d, 0x75, 0xa1, 0x51, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x45, 0x59, 0x70, 0x64, + 0x56, 0xd6, 0xcb, 0x55, 0x79, 0xe1, 0x91, 0x38, 0x7c, 0x29, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, + 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, + 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x25, 0x39, 0x5d, 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, + 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0x52, 0xbd, + 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, 0xba, 0xf3, 0x23, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, + 0x95, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x86, 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, + 0x55, 0x78, 0x72, 0x9e, 0xd0, 0xd5, 0x3c, 0x61, 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, + 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, 0xe6, 0x79, 0x20, 0x88, 0x1c, 0x91, 0x39, 0x9a, + 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0x41, 0xd3, 0xa2, 0x75, 0x5d, 0xe5, 0x9e, 0x5a, 0x83, + 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x27, 0x1d, 0x8a, 0x70, 0xaf, 0xf0, 0xb9, 0x53, + 0xa9, 0x38, 0xe3, 0x8d, 0x28, 0xd5, 0x14, 0x8c, 0x72, 0x55, 0x60, 0xbe, 0xaf, 0xc3, 0xe2, 0xcd, + 0x68, 0x60, 0xfb, 0xee, 0xb7, 0xb1, 0xdc, 0xc4, 0x05, 0x7c, 0x92, 0x94, 0xbb, 0x0a, 0x1d, 0xe6, + 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x4a, 0xca, 0x4d, + 0x25, 0x29, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, + 0xc3, 0xec, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x12, 0xf5, 0x4c, 0x6d, 0xa2, 0x6e, 0xcb, 0x89, 0x5a, + 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0x83, 0x06, 0x8b, 0x85, 0xbb, 0xa9, + 0x06, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, + 0x69, 0x41, 0xec, 0x4a, 0xf5, 0x7e, 0x4e, 0xf3, 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, + 0xba, 0x5b, 0x4a, 0xd5, 0x5d, 0xce, 0xa3, 0xbf, 0xd5, 0xe0, 0x3c, 0x47, 0xb9, 0x32, 0x8c, 0x9b, + 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, + 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x4e, + 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x9e, 0x6f, 0xb8, + 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, + 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x1f, 0x2c, 0x76, 0x34, 0x32, + 0x86, 0x78, 0x9d, 0x83, 0x85, 0x82, 0x1b, 0xf8, 0x79, 0x08, 0xc9, 0x2c, 0x3e, 0xad, 0x62, 0xd2, + 0xd3, 0x6d, 0xac, 0x36, 0x78, 0x0a, 0x15, 0xa4, 0xf1, 0x2d, 0x98, 0xc5, 0x1c, 0x2e, 0xba, 0xe9, + 0x4e, 0xe1, 0x00, 0x5e, 0xab, 0xad, 0x1a, 0x6a, 0xad, 0xa2, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x49, + 0x74, 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x26, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, + 0x31, 0x0e, 0xfe, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, + 0xc2, 0x66, 0x8b, 0x1a, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x07, 0x26, 0x8f, 0x51, 0x53, + 0xc6, 0x68, 0xbe, 0x05, 0x9d, 0xed, 0x78, 0xb0, 0x65, 0x27, 0x36, 0x36, 0x7c, 0x0d, 0x3a, 0xc3, + 0x82, 0xc4, 0xc6, 0xf5, 0xfd, 0x09, 0x21, 0x4b, 0x6e, 0x6e, 0xfe, 0x59, 0x87, 0x6e, 0xbd, 0x2b, + 0xe2, 0x90, 0xdb, 0xc0, 0xa2, 0x68, 0x33, 0x70, 0x18, 0x0e, 0xad, 0x69, 0x65, 0x24, 0xc7, 0x8e, + 0x45, 0x11, 0xcf, 0x61, 0xa2, 0xc8, 0x26, 0xca, 0xb8, 0x04, 0x53, 0x5e, 0x06, 0xcb, 0xc9, 0x56, + 0x60, 0x3b, 0x63, 0x08, 0x8b, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xf5, 0xb1, 0x31, 0x8b, 0x43, + 0x02, 0x4d, 0xd2, 0x41, 0xc0, 0x55, 0x54, 0xaf, 0xf4, 0xe1, 0x89, 0xda, 0xa6, 0x35, 0x00, 0x7e, + 0x49, 0x05, 0xf0, 0xe2, 0xe8, 0xa1, 0x94, 0x41, 0x0c, 0xc1, 0xb8, 0xca, 0x92, 0x6d, 0xfb, 0xde, + 0xba, 0xef, 0x6c, 0xbb, 0x7e, 0x8f, 0x1d, 0xf1, 0x68, 0x5f, 0x85, 0x8e, 0xd8, 0x9e, 0xe7, 0x30, + 0xb5, 0x2d, 0x99, 0x35, 0x72, 0xd7, 0x5e, 0x9a, 0x0f, 0x8d, 0xca, 0x7c, 0x30, 0x2f, 0xc3, 0xac, + 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x5e, 0x8f, 0x1d, 0xe1, 0x80, 0xe6, 0x2c, 0x41, 0x21, 0x1f, 0x5b, + 0x88, 0xbd, 0x81, 0xa0, 0xcc, 0x3f, 0xe9, 0x70, 0xae, 0x62, 0x72, 0x1c, 0x3e, 0xa8, 0x1e, 0x39, + 0x5e, 0x1a, 0xa3, 0xe2, 0x65, 0x4a, 0x89, 0x97, 0x43, 0x58, 0x22, 0x90, 0xa4, 0xae, 0xbb, 0x4d, + 0x0c, 0x80, 0xd7, 0xeb, 0x4a, 0xf5, 0xaa, 0x91, 0x02, 0x7b, 0x89, 0x4b, 0xe0, 0x57, 0xf5, 0xae, + 0x30, 0x58, 0xae, 0x6f, 0x5c, 0x03, 0xff, 0xcb, 0x2a, 0xfc, 0x9f, 0xae, 0x83, 0x5f, 0xb6, 0x44, + 0xc2, 0xff, 0x08, 0x16, 0xf8, 0xa2, 0xda, 0x63, 0xbe, 0xb3, 0x1d, 0x0f, 0xd0, 0x91, 0xab, 0xd0, + 0x21, 0xf9, 0xed, 0x78, 0x50, 0x6c, 0xdd, 0x24, 0x16, 0x6f, 0xd1, 0xf7, 0x5c, 0xbe, 0x78, 0x62, + 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x9e, 0x20, 0x63, 0x26, 0x4e, 0x32, 0xb8, 0x77, 0x1b, 0x56, 0x4e, + 0x9b, 0x7f, 0x6f, 0xc2, 0xb4, 0x88, 0x46, 0x4c, 0x8a, 0x7c, 0xb7, 0x9c, 0x2f, 0xab, 0x44, 0x51, + 0x5d, 0xdb, 0x3f, 0x2e, 0xc2, 0x8b, 0x28, 0xf9, 0x18, 0xa9, 0xa1, 0x1e, 0x23, 0x95, 0x6c, 0x9a, + 0xaa, 0xda, 0x54, 0x1a, 0x57, 0xb3, 0x3a, 0x2e, 0x5e, 0xc6, 0x61, 0x65, 0xb3, 0xeb, 0xd9, 0xc9, + 0x7e, 0x10, 0x0d, 0xc5, 0xe6, 0xb7, 0x69, 0x55, 0xf8, 0xbc, 0x74, 0x24, 0x5e, 0x5e, 0xfb, 0x53, + 0x0a, 0x2f, 0x71, 0x79, 0xa5, 0x4d, 0x9c, 0x6c, 0x0f, 0x40, 0xa7, 0x0e, 0x2a, 0x93, 0x6c, 0x8b, + 0x63, 0x37, 0xf0, 0xb1, 0x0a, 0xa5, 0x52, 0x5f, 0x66, 0xf1, 0x91, 0x0f, 0xe3, 0xc1, 0x95, 0x28, + 0x18, 0x8a, 0xb3, 0x87, 0x8c, 0xc4, 0x91, 0x07, 0x7e, 0x92, 0x55, 0xb0, 0x1d, 0x92, 0x95, 0x58, + 0x5c, 0x56, 0x90, 0x58, 0xe7, 0xcf, 0x5a, 0x19, 0xc9, 0x63, 0x29, 0x66, 0x47, 0xa2, 0x78, 0xe7, + 0x3f, 0x15, 0xe4, 0x16, 0x54, 0xe4, 0x4a, 0xd5, 0xd8, 0x22, 0x7e, 0x95, 0xab, 0xb1, 0xa2, 0xc4, + 0x59, 0x52, 0x4a, 0x9c, 0x75, 0x98, 0x0e, 0x42, 0x3e, 0xfd, 0xe3, 0xae, 0x81, 0xd3, 0xe5, 0xb3, + 0xa3, 0x17, 0xa8, 0x4b, 0x37, 0xa9, 0x25, 0x4d, 0x8c, 0x4c, 0xce, 0xb8, 0x01, 0x0b, 0xc1, 0xfe, + 0xbe, 0xe7, 0xfa, 0x6c, 0x37, 0x8d, 0x0f, 0x70, 0x93, 0x7c, 0x0e, 0x83, 0xdd, 0xac, 0x2b, 0x22, + 0xd4, 0x96, 0x56, 0x59, 0x94, 0x57, 0x7e, 0x76, 0x42, 0x9b, 0x1c, 0x5c, 0xe0, 0xce, 0xe3, 0x02, + 0xa7, 0xf0, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0x94, 0x9a, 0x69, 0x77, 0x5e, 0x9e, 0x76, 0x33, 0xf2, + 0xac, 0xfa, 0x91, 0x06, 0x0b, 0x25, 0x23, 0x78, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, + 0xf7, 0x31, 0x0e, 0x8b, 0xfb, 0x22, 0xcc, 0xf1, 0xb7, 0xa8, 0x08, 0x1b, 0xf9, 0xe9, 0x94, 0x09, + 0xb3, 0xee, 0xcd, 0x1e, 0x57, 0xd4, 0x0b, 0x52, 0xdf, 0xc9, 0x4f, 0x98, 0x25, 0x1e, 0x0f, 0x33, + 0xf7, 0x66, 0x6f, 0xc3, 0x76, 0x06, 0x8c, 0xce, 0x81, 0x9b, 0x68, 0x93, 0xca, 0x34, 0x1d, 0x98, + 0xb9, 0xe5, 0x86, 0xf1, 0x66, 0x30, 0x1c, 0x72, 0xb0, 0x1c, 0x96, 0xf0, 0x8a, 0x5b, 0xc3, 0x98, + 0x10, 0x14, 0x0f, 0x27, 0x87, 0xed, 0xdb, 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xe4, 0x96, 0x58, 0x78, + 0x02, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, 0x9d, 0x12, 0xc7, 0xfc, 0xa3, 0x0e, 0x8b, 0xb8, 0x76, + 0x6d, 0x62, 0x68, 0x38, 0x28, 0xf4, 0x22, 0x34, 0x71, 0xaa, 0x8a, 0xda, 0xef, 0xe4, 0xb3, 0x0d, + 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, 0xc1, 0x48, 0x0b, 0xdb, 0x33, 0xa3, 0x84, 0xd4, 0xc3, + 0x66, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, 0x45, 0x7d, 0x48, 0x69, 0x7e, 0x5c, 0x1d, 0x92, 0x24, + 0x77, 0x6e, 0x9e, 0xc1, 0xf2, 0x13, 0xe7, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, + 0x66, 0x87, 0x5c, 0x88, 0xc1, 0xf8, 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x69, 0xc2, 0x8d, 0xfc, 0x6b, + 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0xe6, 0xd6, + 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, 0x36, 0x44, 0xe6, 0xcf, 0x35, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, + 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, 0x8b, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, + 0x11, 0xb0, 0x8f, 0x71, 0x8e, 0x56, 0xc8, 0x48, 0x47, 0x22, 0x0d, 0xf9, 0x48, 0xc4, 0xfc, 0x40, + 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, + 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0xa1, 0x06, 0x17, 0xca, 0x6e, + 0x5d, 0xef, 0xf7, 0x59, 0xf8, 0x30, 0xa7, 0x94, 0x72, 0x24, 0x34, 0x55, 0x3a, 0x12, 0xaa, 0x35, + 0xd9, 0x62, 0x77, 0x58, 0xff, 0xd1, 0x35, 0xf9, 0x7b, 0x3a, 0x7c, 0xf2, 0x6a, 0x3e, 0xf1, 0x6e, + 0x45, 0xb6, 0x1f, 0xef, 0xb3, 0x28, 0x7a, 0x88, 0xf6, 0xde, 0x80, 0x39, 0x9f, 0xdd, 0x2d, 0x6c, + 0x12, 0xd3, 0x71, 0x5c, 0x35, 0xaa, 0xf0, 0x78, 0x6b, 0x97, 0xf9, 0x1f, 0x0d, 0x16, 0x49, 0xcf, + 0x5b, 0x6e, 0xff, 0xf0, 0x21, 0x0e, 0x7e, 0x07, 0xe6, 0x0f, 0xd1, 0x02, 0x4e, 0x4d, 0xb0, 0x6c, + 0x97, 0xa4, 0xc7, 0x1c, 0xfe, 0x7f, 0x35, 0x58, 0x22, 0x45, 0xd7, 0xfd, 0x63, 0xf7, 0x61, 0x06, + 0xeb, 0x2e, 0x2c, 0xb8, 0x64, 0xc2, 0x84, 0x0e, 0x28, 0x8b, 0x8f, 0xe9, 0x81, 0xdf, 0x68, 0xb0, + 0x40, 0x9a, 0xde, 0xf0, 0x13, 0x16, 0x4d, 0x3c, 0xfe, 0x6b, 0xd0, 0x61, 0x7e, 0x12, 0xd9, 0xfe, + 0x24, 0x2b, 0xa4, 0x2c, 0x3a, 0xe6, 0x22, 0xf9, 0x81, 0x06, 0x06, 0xaa, 0xda, 0x72, 0xe3, 0xa1, + 0x1b, 0xc7, 0x0f, 0x11, 0xba, 0xf1, 0x0c, 0xfe, 0x89, 0x0e, 0xe7, 0x25, 0x2d, 0xdb, 0x69, 0xf2, + 0xa8, 0x9b, 0x6c, 0x6c, 0x41, 0x9b, 0xd7, 0x08, 0xf2, 0x5d, 0xe3, 0xb8, 0x1d, 0x15, 0x82, 0xbc, + 0x8a, 0x45, 0xa2, 0xc7, 0xfa, 0x81, 0xef, 0xc4, 0x58, 0x1c, 0xcd, 0x59, 0x0a, 0x8f, 0x2f, 0x43, + 0x2b, 0x92, 0x9a, 0x4d, 0xdb, 0xef, 0x33, 0xef, 0xb1, 0x71, 0x91, 0xf9, 0x4b, 0x0d, 0xe6, 0xa9, + 0xc9, 0xa3, 0x3f, 0x64, 0x9e, 0xeb, 0x29, 0x90, 0x3f, 0x36, 0x28, 0xf1, 0xf0, 0x5a, 0x96, 0xb4, + 0xc8, 0x75, 0xf5, 0xa3, 0x1b, 0x5a, 0xd7, 0xa0, 0xd3, 0x3f, 0xb0, 0xfd, 0xc1, 0x44, 0xc1, 0x25, + 0x8b, 0x9a, 0x09, 0x3c, 0x29, 0x1f, 0xaf, 0x6f, 0xd2, 0x27, 0x1c, 0xfe, 0x4b, 0xa5, 0xa1, 0x9c, + 0xf8, 0x96, 0xe0, 0xc1, 0x9c, 0x7e, 0x08, 0x4b, 0x74, 0xa7, 0x2b, 0xd5, 0x84, 0x46, 0x17, 0xa6, + 0x6d, 0x87, 0x0e, 0x19, 0x34, 0x14, 0xca, 0x48, 0xf5, 0xb6, 0x5e, 0x3c, 0xc8, 0x2a, 0x6e, 0xeb, + 0x2f, 0x02, 0xd8, 0x8e, 0xf3, 0x4e, 0x10, 0x39, 0xae, 0x9f, 0x15, 0xf8, 0x12, 0xc7, 0x7c, 0x13, + 0x66, 0xaf, 0x44, 0xc1, 0xf0, 0x96, 0x74, 0x3b, 0x7b, 0xe2, 0xfd, 0xb1, 0x7c, 0xb3, 0xab, 0xab, + 0x37, 0xbb, 0xe6, 0x37, 0xe1, 0x89, 0x8a, 0xe1, 0xe8, 0xac, 0x4d, 0xba, 0x74, 0xce, 0x3a, 0x11, + 0x21, 0x53, 0x77, 0xea, 0x26, 0xdb, 0x62, 0x29, 0x42, 0xe6, 0x77, 0x35, 0x78, 0xaa, 0xa2, 0x7e, + 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, + 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, 0x88, 0x5f, 0x68, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, + 0xcb, 0xd0, 0xa2, 0x07, 0x2b, 0xa2, 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x1e, 0xda, 0x58, 0xa2, 0x71, + 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x52, 0x22, 0x04, 0xcc, 0xaf, + 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0x9e, 0x29, 0x7c, + 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, - 0x31, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0x57, 0x7a, 0x28, 0x92, 0x49, - 0x28, 0x9b, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, + 0x85, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0xd7, 0x84, 0x28, 0x92, 0x49, + 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, - 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xea, 0x06, - 0xa7, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0x7c, 0x92, 0x9c, 0x1e, 0xf9, 0x7c, 0x71, 0xe4, 0xb5, 0x9f, - 0xd9, 0x83, 0x25, 0xf1, 0xbc, 0x65, 0xd7, 0x1e, 0xb8, 0x3e, 0x25, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, - 0xc8, 0x9e, 0xb7, 0xd1, 0x05, 0x96, 0xc4, 0xe1, 0xbf, 0xc7, 0x07, 0xc1, 0x5d, 0xf1, 0xbb, 0x4e, - 0xbf, 0x17, 0x1c, 0xf3, 0x6b, 0x60, 0x58, 0x2c, 0x0e, 0x03, 0x3f, 0x66, 0x92, 0xd6, 0x55, 0xe8, - 0x6c, 0xa6, 0x51, 0xc4, 0x7c, 0x3e, 0x55, 0xf6, 0xd6, 0x4b, 0x66, 0x71, 0xbd, 0xbd, 0x42, 0x2f, - 0x1d, 0xa0, 0x4b, 0x1c, 0xf3, 0x67, 0x0d, 0x68, 0xf7, 0xdc, 0x81, 0x6f, 0x7b, 0x16, 0x3b, 0x32, - 0x5e, 0x83, 0x16, 0x7d, 0xb2, 0x88, 0x48, 0xa9, 0x3b, 0xd0, 0xa5, 0xd1, 0xf4, 0x6d, 0x66, 0xb1, - 0xa3, 0x6b, 0x9f, 0xb0, 0x84, 0x8c, 0xf1, 0x36, 0xcc, 0xd1, 0x5f, 0xd7, 0xe9, 0x08, 0x4a, 0xd4, - 0xaf, 0xcf, 0x9d, 0xa2, 0x44, 0x8c, 0x26, 0x5d, 0xaa, 0x06, 0x6e, 0x50, 0x1f, 0x5b, 0x1a, 0x91, - 0x1e, 0x46, 0x1b, 0x44, 0x9d, 0x8f, 0x30, 0x88, 0x64, 0xb8, 0xb4, 0x8d, 0x87, 0x34, 0xa2, 0x52, - 0x8f, 0x96, 0xa6, 0xb3, 0x1c, 0x21, 0x4d, 0x32, 0x5c, 0xfa, 0x20, 0xf5, 0x07, 0xb7, 0x43, 0x71, - 0x76, 0x38, 0x5a, 0xfa, 0x1a, 0x0e, 0x13, 0xd2, 0x24, 0xc3, 0xa5, 0x23, 0x4c, 0xde, 0xe8, 0xf4, - 0x93, 0xa4, 0x29, 0xc7, 0x0b, 0x69, 0x92, 0xd9, 0x68, 0xc3, 0x74, 0x68, 0xdf, 0xf7, 0x02, 0xdb, - 0x31, 0xdf, 0x6f, 0x00, 0x64, 0x03, 0x63, 0x6c, 0x74, 0x14, 0x88, 0xd6, 0x4e, 0x85, 0x28, 0xf4, - 0xee, 0x4b, 0x20, 0xf5, 0xea, 0x41, 0xfa, 0xfc, 0xb8, 0x20, 0x91, 0xb6, 0x12, 0x4c, 0x97, 0x4b, - 0x30, 0xad, 0x9d, 0x0a, 0x93, 0x30, 0x4a, 0x00, 0x75, 0xb9, 0x04, 0xd4, 0xda, 0xa9, 0x40, 0x09, - 0x79, 0x01, 0xd5, 0xe5, 0x12, 0x54, 0x6b, 0xa7, 0x42, 0x25, 0xe4, 0x05, 0x58, 0x97, 0x4b, 0x60, - 0xad, 0x9d, 0x0a, 0x96, 0x90, 0xaf, 0xc2, 0xf5, 0xa1, 0x0e, 0xf3, 0xe8, 0x32, 0x7a, 0x1f, 0xe0, - 0xef, 0x07, 0x78, 0x1f, 0x80, 0xee, 0x52, 0x5f, 0x4b, 0xaa, 0x4c, 0xe3, 0x0b, 0xb0, 0x44, 0x0c, - 0x26, 0x5d, 0x86, 0xe8, 0x78, 0x19, 0x52, 0xfd, 0x01, 0xaf, 0x7f, 0xd2, 0x38, 0x09, 0x86, 0x5b, - 0x76, 0x62, 0x67, 0xcd, 0x57, 0xc1, 0x91, 0x2f, 0xe7, 0xa6, 0x2a, 0xef, 0xb1, 0xa3, 0x20, 0x18, - 0xe6, 0xb7, 0x6e, 0x82, 0xe2, 0x12, 0x89, 0x3b, 0x64, 0x41, 0x9a, 0x88, 0x34, 0x91, 0x91, 0xf4, - 0xa2, 0xc9, 0x71, 0x6d, 0xbc, 0xd2, 0x12, 0xcf, 0x7d, 0x72, 0x06, 0x66, 0xb6, 0xe2, 0x8a, 0x4e, - 0xbc, 0x97, 0x2e, 0x38, 0xa7, 0x5f, 0xa7, 0x99, 0xff, 0xd0, 0xe0, 0xdc, 0xae, 0x1d, 0x25, 0x6e, - 0xdf, 0x0d, 0x6d, 0x3f, 0xd9, 0x66, 0x89, 0x8d, 0x6b, 0x50, 0x9e, 0x4c, 0x6a, 0x0f, 0xf6, 0x64, - 0x72, 0x17, 0x16, 0x06, 0xea, 0xd7, 0xc5, 0x03, 0x7e, 0x18, 0x94, 0xc5, 0x95, 0xf7, 0x9f, 0x8d, - 0x07, 0x7e, 0xff, 0x69, 0xfe, 0x40, 0x87, 0x85, 0x52, 0xea, 0x3c, 0xb1, 0xee, 0xac, 0x03, 0xb8, - 0x79, 0x18, 0x9d, 0x70, 0xf8, 0xae, 0xc6, 0x9a, 0x25, 0x09, 0xd5, 0xdd, 0xd3, 0x35, 0x26, 0xbf, - 0xa7, 0xbb, 0x06, 0x9d, 0xb0, 0x00, 0xe9, 0x84, 0x6f, 0x9f, 0x1a, 0x28, 0x2d, 0x59, 0xd4, 0x7c, - 0x17, 0x96, 0x2a, 0x19, 0x0a, 0xaf, 0xe4, 0x82, 0x43, 0xe6, 0xe7, 0x57, 0x72, 0x9c, 0x90, 0x82, - 0x55, 0x2f, 0x07, 0xab, 0xe7, 0x1e, 0xcb, 0x0f, 0xcc, 0x05, 0x69, 0xfe, 0x50, 0x87, 0xe5, 0xfa, - 0xea, 0xf2, 0xb8, 0xba, 0x7b, 0x0f, 0xba, 0xa3, 0x32, 0xf9, 0x99, 0x79, 0xbd, 0x88, 0xee, 0xbc, - 0x0e, 0x3f, 0xae, 0xee, 0x3e, 0x97, 0x45, 0xb7, 0x54, 0xea, 0xcc, 0xdf, 0xe4, 0xfe, 0xc9, 0x3b, - 0x8d, 0xc7, 0xd4, 0x3f, 0xc6, 0x73, 0xb0, 0x48, 0xcb, 0x94, 0x1e, 0x76, 0x50, 0xe3, 0x5a, 0xe1, - 0x17, 0x99, 0x42, 0x2a, 0xfb, 0x67, 0x16, 0xb3, 0x7f, 0xd0, 0x32, 0x4c, 0xf2, 0xfe, 0xed, 0x63, - 0x85, 0x49, 0x11, 0x69, 0x52, 0x53, 0x23, 0x45, 0x5a, 0xde, 0x57, 0xfe, 0x3f, 0xd2, 0x4e, 0x8f, - 0xb4, 0xdc, 0x97, 0x52, 0x83, 0x67, 0x7e, 0x07, 0xe6, 0xb6, 0x98, 0xb7, 0x1d, 0x0f, 0xb2, 0x57, - 0xa2, 0x67, 0xfa, 0xa1, 0x58, 0x7e, 0x5b, 0x3a, 0x55, 0x79, 0x5b, 0x6a, 0x6e, 0xc0, 0xbc, 0x6c, - 0xc0, 0x24, 0xaf, 0x20, 0x37, 0x2e, 0x7c, 0x63, 0xe5, 0xd2, 0xf3, 0xf4, 0x1f, 0x95, 0xaf, 0x56, - 0x9c, 0xb8, 0xd7, 0xc2, 0xff, 0xb0, 0x7c, 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x96, - 0xc4, 0xbf, 0x74, 0x39, 0x00, 0x00, + 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0x3a, 0x08, + 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xb9, 0x32, 0xf2, 0x2a, 0xd1, + 0xec, 0xc1, 0x92, 0x78, 0x32, 0xb3, 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, + 0xc8, 0x9e, 0xcc, 0xd1, 0xa5, 0x98, 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, + 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, + 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, 0xde, 0x8f, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, + 0x03, 0x74, 0x89, 0x63, 0xfe, 0xb4, 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, + 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, 0xba, 0x03, 0x5d, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, + 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, + 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, + 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, + 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, + 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, + 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, + 0xe6, 0xfb, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, + 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, + 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, + 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, + 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd4, 0x61, 0x1e, 0x5d, 0x46, 0x77, 0xac, 0xfe, + 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x05, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, 0x60, + 0xd2, 0x65, 0x88, 0x8e, 0x97, 0x21, 0xd5, 0x0f, 0x78, 0xfd, 0x93, 0xc6, 0x49, 0x30, 0xdc, 0xb2, + 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x39, 0x37, 0x55, 0x79, 0xe3, 0x1d, 0x05, 0xc1, 0x30, + 0xbf, 0x75, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xaf, + 0xa4, 0x1c, 0xd7, 0xc6, 0x2b, 0x2d, 0xf1, 0x84, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xd1, 0x89, + 0x37, 0xd8, 0x05, 0xe7, 0xf4, 0xeb, 0x34, 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, + 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0x71, 0x0c, 0xca, 0x33, 0x4c, 0xed, 0xc1, 0x9e, 0x61, + 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x29, 0x6d, 0x3c, + 0xf0, 0x9b, 0x52, 0xf3, 0x07, 0x3a, 0x2c, 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, + 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, 0x59, 0x92, 0x50, 0xdd, 0x3d, 0x5d, 0x63, 0xf2, 0x7b, + 0xba, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, + 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, + 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x68, 0x5d, 0x90, 0xe6, 0x0f, 0x75, 0x58, 0xae, 0xcf, + 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, + 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xeb, 0xdc, 0x3f, 0x79, 0xa5, + 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xc3, 0x0e, 0x2a, 0x5c, 0x2b, 0xfc, + 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, 0xec, 0xef, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x58, + 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, + 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0xe5, + 0xe9, 0x99, 0x6e, 0x14, 0xcb, 0xef, 0xf3, 0xa6, 0xaa, 0xef, 0xf3, 0x36, 0x60, 0x5e, 0x36, 0x60, + 0x92, 0x97, 0x95, 0x1b, 0x17, 0xbe, 0xb1, 0x72, 0xe9, 0x79, 0xfa, 0x97, 0xe6, 0xab, 0x15, 0x27, + 0xee, 0xb5, 0xf0, 0x5f, 0x9b, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x59, 0x84, 0xce, + 0xc8, 0x39, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 43112b919..7c24f3078 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -198,6 +198,7 @@ message PullMessageBySeqListResp { message GetMaxAndMinSeqReq { repeated string groupIDList = 1; string userID = 2; + string operationID =3; } message MaxAndMinSeq{ uint32 maxSeq = 1; @@ -206,7 +207,9 @@ message MaxAndMinSeq{ message GetMaxAndMinSeqResp { uint32 maxSeq = 1; uint32 minSeq = 2; - map groupMaxAndMinSeq = 3; + int32 errCode = 3; + string errMsg = 4; + map groupMaxAndMinSeq = 5; } message UserSendMsgResp { From 7285e2b2c988aad062ff91ab74d07fe5473012cc Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 28 May 2022 18:10:08 +0800 Subject: [PATCH 008/256] add super group --- internal/msg_gateway/gate/logic.go | 48 +-- internal/msg_gateway/gate/validate.go | 12 + internal/msg_transfer/logic/init.go | 3 +- .../logic/offline_history_msg_handler.go | 313 ------------------ .../logic/online_history_msg_handler.go | 61 ++-- internal/rpc/msg/pull_message.go | 40 ++- internal/rpc/msg/send_msg.go | 87 +++-- pkg/common/constant/constant.go | 6 +- pkg/common/db/mongoModel.go | 7 + 9 files changed, 179 insertions(+), 398 deletions(-) delete mode 100644 internal/msg_transfer/logic/offline_history_msg_handler.go diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 884f5f842..af6fa025d 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -64,28 +64,37 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { } func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier, m.Data) - rpcReq := pbChat.GetMaxAndMinSeqReq{} - nReply := new(pbChat.GetMaxAndMinSeqResp) - rpcReq.UserID = m.SendID - rpcReq.OperationID = m.OperationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) - rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) - if err != nil { - log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err, rpcReq.String()) - nReply.ErrCode = 500 - nReply.ErrMsg = err.Error() - ws.getSeqResp(conn, m, nReply) + nReply := new(sdk_ws.GetMaxAndMinSeqResp) + isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq) + if isPass { + rpcReq := sdk_ws.GetMaxAndMinSeqReq{} + rpcReq.GroupIDList = data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList + rpcReq.UserID = m.SendID + rpcReq.OperationID = m.OperationID + log.Debug(m.OperationID, "Ws call success to getMaxAndMinSeq", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + msgClient := pbChat.NewChatClient(grpcConn) + rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) + if err != nil { + log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err.Error(), rpcReq.String()) + nReply.ErrCode = 500 + nReply.ErrMsg = err.Error() + ws.getSeqResp(conn, m, nReply) + } else { + log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) + ws.getSeqResp(conn, m, rpcReply) + } } else { - log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) - ws.getSeqResp(conn, m, rpcReply) + nReply.ErrCode = errCode + nReply.ErrMsg = errMsg + ws.getSeqResp(conn, m, nReply) + } + } -func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *pbChat.GetMaxAndMinSeqResp) { - var mReplyData sdk_ws.GetMaxAndMinSeqResp - mReplyData.MaxSeq = pb.GetMaxSeq() - mReplyData.MinSeq = pb.GetMinSeq() - b, _ := proto.Marshal(&mReplyData) +func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeqResp) { + log.Debug(m.OperationID, "getSeqResp come here ", pb.String()) + b, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, MsgIncr: m.MsgIncr, @@ -146,6 +155,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { sendMsgAllCountLock.Lock() sendMsgAllCount++ sendMsgAllCountLock.Unlock() + //stat.GaugeVecApiMethod.WithLabelValues("ws_send_message_count").Inc() log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) diff --git a/internal/msg_gateway/gate/validate.go b/internal/msg_gateway/gate/validate.go index 31198a918..0f4950728 100644 --- a/internal/msg_gateway/gate/validate.go +++ b/internal/msg_gateway/gate/validate.go @@ -59,6 +59,18 @@ type SeqListData struct { func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, errMsg string, returnData interface{}) { switch r { + case constant.WSGetNewestSeq: + data := open_im_sdk.GetMaxAndMinSeqReq{} + if err := proto.Unmarshal(m.Data, &data); err != nil { + log.Error("", "Decode Data struct err", err.Error(), r) + return false, 203, err.Error(), nil + } + if err := validate.Struct(data); err != nil { + log.Error("", "data args validate err", err.Error(), r) + return false, 204, err.Error(), nil + + } + return true, 0, "", data case constant.WSSendMsg: data := open_im_sdk.MsgData{} if err := proto.Unmarshal(m.Data, &data); err != nil { diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index f8c424dcc..8829906e4 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -14,14 +14,13 @@ const OnlineTopicBusy = 1 const OnlineTopicVacancy = 0 const Msg = 2 const ConsumerMsgs = 3 -const UserMessages = 4 +const AggregationMessages = 4 const MongoMessages = 5 const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler historyCH OnlineHistoryConsumerHandler - offlineHistoryCH OfflineHistoryConsumerHandler producer *kafka.Producer cmdCh chan Cmd2Value onlineTopicStatus int diff --git a/internal/msg_transfer/logic/offline_history_msg_handler.go b/internal/msg_transfer/logic/offline_history_msg_handler.go deleted file mode 100644 index b7ee3b2e3..000000000 --- a/internal/msg_transfer/logic/offline_history_msg_handler.go +++ /dev/null @@ -1,313 +0,0 @@ -package logic - -import ( - "Open_IM/pkg/common/config" - "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" - kfk "Open_IM/pkg/common/kafka" - "Open_IM/pkg/common/log" - pbMsg "Open_IM/pkg/proto/chat" - "Open_IM/pkg/utils" - "github.com/Shopify/sarama" - "github.com/golang/protobuf/proto" - "time" -) - -type OfflineHistoryConsumerHandler struct { - msgHandle map[string]fcb - historyConsumerGroup *kfk.MConsumerGroup - cmdCh chan Cmd2Value - msgCh chan Cmd2Value - chArrays [ChannelNum]chan Cmd2Value - msgDistributionCh chan Cmd2Value -} - -func (mc *OfflineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { - mc.msgHandle = make(map[string]fcb) - mc.msgDistributionCh = make(chan Cmd2Value) //no buffer channel - go mc.MessagesDistributionHandle() - mc.cmdCh = cmdCh - mc.msgCh = make(chan Cmd2Value, 1000) - for i := 0; i < ChannelNum; i++ { - mc.chArrays[i] = make(chan Cmd2Value, 1000) - go mc.Run(i) - } - if config.Config.ReliableStorage { - mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2Mongo - } else { - mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2MongoLowReliability - - } - mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, - OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschatOffline.Topic}, - config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline) - -} -func (och *OfflineHistoryConsumerHandler) Run(channelID int) { - for { - select { - case cmd := <-och.chArrays[channelID]: - switch cmd.Cmd { - case UserMessages: - msgChannelValue := cmd.Value.(MsgChannelValue) - msgList := msgChannelValue.msgList - triggerID := msgChannelValue.triggerID - storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - pushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) - for _, v := range msgList { - log.Debug(triggerID, "msg come to storage center", v.String()) - isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) - isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) - if isHistory { - storageMsgList = append(storageMsgList, v) - } - if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - pushMsgList = append(pushMsgList, v) - } - } - - //switch msgChannelValue.msg.MsgData.SessionType { - //case constant.SingleChatType: - //case constant.GroupChatType: - //case constant.NotificationChatType: - //default: - // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - // return - //} - - err, _ := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) - if err != nil { - singleMsgFailedCount += uint64(len(storageMsgList)) - log.NewError(triggerID, "single data insert to mongo err", err.Error(), storageMsgList) - } else { - singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount += uint64(len(storageMsgList)) - singleMsgSuccessCountMutex.Unlock() - for _, v := range pushMsgList { - sendMessageToPush(v, msgChannelValue.userID) - } - - } - } - } - } -} -func (och *OfflineHistoryConsumerHandler) MessagesDistributionHandle() { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) - for { - select { - case cmd := <-och.msgDistributionCh: - switch cmd.Cmd { - case ConsumerMsgs: - triggerChannelValue := cmd.Value.(TriggerChannelValue) - triggerID := triggerChannelValue.triggerID - consumerMessages := triggerChannelValue.cmsgList - //Aggregation map[userid]message list - log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) - for i := 0; i < len(consumerMessages); i++ { - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) - if err != nil { - log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) - return - } - log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String()) - if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { - oldM = append(oldM, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM - } else { - m := make([]*pbMsg.MsgDataToMQ, 0, 100) - m = append(m, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = m - } - } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) - for userID, v := range UserAggregationMsgs { - if len(v) >= 0 { - channelID := getHashCode(userID) % ChannelNum - go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[cID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID}} - }(channelID, userID, v) - } - } - } - } - } - -} -func (mc *OfflineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { - msg := cMsg.Value - now := time.Now() - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(msg, &msgFromMQ) - if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) - return - } - operationID := msgFromMQ.OperationID - log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) - //Control whether to store offline messages (mongo) - isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - //Control whether to store history messages (mysql) - isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent) - isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - switch msgFromMQ.MsgData.SessionType { - case constant.SingleChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = SingleChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgKey, &msgFromMQ) - if err != nil { - singleMsgFailedCount++ - log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - return - } - singleMsgSuccessCountMutex.Lock() - singleMsgSuccessCount++ - singleMsgSuccessCountMutex.Unlock() - log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveSingleMsg cost time ", time.Since(now)) - case constant.GroupChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = GroupChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgFromMQ.MsgData.RecvID, &msgFromMQ) - if err != nil { - log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error()) - return - } - groupMsgCount++ - } - go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID) - log.NewDebug(operationID, "saveGroupMsg cost time ", time.Since(now)) - - case constant.NotificationChatType: - log.NewDebug(msgFromMQ.OperationID, "msg_transfer msg type = NotificationChatType", isHistory, isPersist) - if isHistory { - err := saveUserChat(msgKey, &msgFromMQ) - if err != nil { - log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - return - } - log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } - if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID { - } else { - go sendMessageToPush(&msgFromMQ, msgKey) - } - log.NewDebug(operationID, "saveUserChat cost time ", time.Since(now)) - default: - log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) - return - } - sess.MarkMessage(cMsg, "") - log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) -} -func (mc *OfflineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { - msg := cMsg.Value - msgFromMQ := pbMsg.MsgDataToMQ{} - err := proto.Unmarshal(msg, &msgFromMQ) - if err != nil { - log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) - return - } - operationID := msgFromMQ.OperationID - log.NewInfo(operationID, "msg come mongo!!!", "", "msg", string(msg)) - //Control whether to store offline messages (mongo) - isHistory := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsHistory) - isSenderSync := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsSenderSync) - if isHistory { - seq, err := db.DB.IncrUserSeq(msgKey) - if err != nil { - log.NewError(operationID, "data insert to redis err", err.Error(), string(msg)) - return - } - sess.MarkMessage(cMsg, "") - msgFromMQ.MsgData.Seq = uint32(seq) - log.Debug(operationID, "send ch msg is ", msgFromMQ.String()) - //mc.msgCh <- Cmd2Value{Cmd: Msg, Value: MsgChannelValue{msgKey, msgFromMQ}} - //err := saveUserChat(msgKey, &msgFromMQ) - //if err != nil { - // singleMsgFailedCount++ - // log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String()) - // return - //} - //singleMsgSuccessCountMutex.Lock() - //singleMsgSuccessCount++ - //singleMsgSuccessCountMutex.Unlock() - //log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", time.Since(now)) - } else { - if !(!isSenderSync && msgKey == msgFromMQ.MsgData.SendID) { - go sendMessageToPush(&msgFromMQ, msgKey) - } - } -} - -func (OfflineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } -func (OfflineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } - -//func (mc *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, -// claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group -// //log.NewDebug("", "offline new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) -// //for msg := range claim.Messages() { -// // log.NewDebug("", "kafka get info to delay mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "offline") -// // //mc.msgHandle[msg.Topic](msg.Value, string(msg.Key)) -// //} -// for msg := range claim.Messages() { -// if GetOnlineTopicStatus() == OnlineTopicVacancy { -// log.NewDebug("", "vacancy offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) -// } else { -// select { -// case <-mc.cmdCh: -// log.NewDebug("", "cmd offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// case <-time.After(time.Millisecond * time.Duration(100)): -// log.NewDebug("", "timeout offline kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) -// } -// mc.msgHandle[msg.Topic](msg, string(msg.Key), sess) -// } -// } -// -// return nil -//} -func (och *OfflineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, - claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group - log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) - cMsg := make([]*sarama.ConsumerMessage, 0, 500) - t := time.NewTicker(time.Duration(500) * time.Millisecond) - var triggerID string - for msg := range claim.Messages() { - //och.TriggerCmd(OnlineTopicBusy) - cMsg = append(cMsg, msg) - select { - case <-t.C: - if len(cMsg) >= 0 { - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(cMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} - sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] - log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) - } - default: - if len(cMsg) >= 500 { - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "length trigger msg consumer start", len(cMsg)) - och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cmsgList: cMsg}} - sess.MarkMessage(msg, "") - cMsg = cMsg[0:0] - log.Debug(triggerID, "length trigger msg consumer end", len(cMsg)) - } - - } - log.NewDebug("", "online kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "online", msg.Offset, claim.HighWaterMarkOffset()) - - } - return nil -} diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index fb5b33ce9..62f0ea0e8 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -22,10 +22,10 @@ import ( ) type MsgChannelValue struct { - userID string - triggerID string - msgList []*pbMsg.MsgDataToMQ - lastSeq uint64 + aggregationID string //maybe userID or super groupID + triggerID string + msgList []*pbMsg.MsgDataToMQ + lastSeq uint64 } type TriggerChannelValue struct { triggerID string @@ -98,13 +98,13 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { select { case cmd := <-och.chArrays[channelID]: switch cmd.Cmd { - case UserMessages: + case AggregationMessages: msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - notStoragepushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.userID, len(msgList)) + notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) + log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList)) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) @@ -113,9 +113,10 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { storageMsgList = append(storageMsgList, v) //log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) } else { - if !(!isSenderSync && msgChannelValue.userID == v.MsgData.SendID) { - notStoragepushMsgList = append(notStoragepushMsgList, v) + if !(!isSenderSync && msgChannelValue.aggregationID == v.MsgData.SendID) { + notStoragePushMsgList = append(notStoragePushMsgList, v) } + } } @@ -128,8 +129,8 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { // log.NewError(msgFromMQ.OperationID, "SessionType error", msgFromMQ.String()) // return //} - log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragepushMsgList)) - err, lastSeq := saveUserChatList(msgChannelValue.userID, storageMsgList, triggerID) + log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragePushMsgList)) + err, lastSeq := saveUserChatList(msgChannelValue.aggregationID, storageMsgList, triggerID) if err != nil { singleMsgFailedCount += uint64(len(storageMsgList)) log.NewError(triggerID, "single data insert to redis err", err.Error(), storageMsgList) @@ -137,28 +138,28 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { singleMsgSuccessCountMutex.Lock() singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() - och.SendMessageToMongoCH(msgChannelValue.userID, triggerID, storageMsgList, lastSeq) + och.SendMessageToMongoCH(msgChannelValue.aggregationID, triggerID, storageMsgList, lastSeq) go func(push, storage []*pbMsg.MsgDataToMQ) { for _, v := range storage { - sendMessageToPush(v, msgChannelValue.userID) + sendMessageToPush(v, msgChannelValue.aggregationID) } for _, x := range push { - sendMessageToPush(x, msgChannelValue.userID) + sendMessageToPush(x, msgChannelValue.aggregationID) } - }(notStoragepushMsgList, storageMsgList) + }(notStoragePushMsgList, storageMsgList) } } } } } -func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(userID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { - hashCode := getHashCode(userID) +func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { + hashCode := getHashCode(aggregationID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{userID: userID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} + och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { for { @@ -169,9 +170,9 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { msgChannelValue := cmd.Value.(MsgChannelValue) msgList := msgChannelValue.msgList triggerID := msgChannelValue.triggerID - userID := msgChannelValue.userID + aggregationID := msgChannelValue.aggregationID lastSeq := msgChannelValue.lastSeq - err := db.DB.BatchInsertChat2DB(userID, msgList, triggerID, lastSeq) + err := db.DB.BatchInsertChat2DB(aggregationID, msgList, triggerID, lastSeq) if err != nil { log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) } @@ -202,7 +203,7 @@ func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { for { - UserAggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) + aggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) select { case cmd := <-och.msgDistributionCh: switch cmd.Cmd { @@ -220,23 +221,23 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { return } log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) - if oldM, ok := UserAggregationMsgs[string(consumerMessages[i].Key)]; ok { + if oldM, ok := aggregationMsgs[string(consumerMessages[i].Key)]; ok { oldM = append(oldM, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = oldM + aggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { m := make([]*pbMsg.MsgDataToMQ, 0, 100) m = append(m, &msgFromMQ) - UserAggregationMsgs[string(consumerMessages[i].Key)] = m + aggregationMsgs[string(consumerMessages[i].Key)] = m } } - log.Debug(triggerID, "generate map list users len", len(UserAggregationMsgs)) - for userID, v := range UserAggregationMsgs { + log.Debug(triggerID, "generate map list users len", len(aggregationMsgs)) + for aggregationID, v := range aggregationMsgs { if len(v) >= 0 { - hashCode := getHashCode(userID) + hashCode := getHashCode(aggregationID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, userID) + log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chArrays[channelID] <- Cmd2Value{Cmd: UserMessages, Value: MsgChannelValue{userID: userID, msgList: v, triggerID: triggerID}} + och.chArrays[channelID] <- Cmd2Value{Cmd: AggregationMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: v, triggerID: triggerID}} //}(channelID, userID, v) } } diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 1811d3847..d9bb49344 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -6,18 +6,25 @@ import ( commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" - pbMsg "Open_IM/pkg/proto/chat" open_im_sdk "Open_IM/pkg/proto/sdk_ws" ) -func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeqReq) (*pbMsg.GetMaxAndMinSeqResp, error) { +func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAndMinSeqReq) (*open_im_sdk.GetMaxAndMinSeqResp, error) { log.NewInfo(in.OperationID, "rpc getMaxAndMinSeq is arriving", in.String()) + resp := new(open_im_sdk.GetMaxAndMinSeqResp) + m := make(map[string]*open_im_sdk.MaxAndMinSeq) //seq, err := model.GetBiggestSeqFromReceive(in.UserID) maxSeq, err1 := commonDB.DB.GetUserMaxSeq(in.UserID) minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) - resp := new(pbMsg.GetMaxAndMinSeqResp) if err1 == nil { resp.MaxSeq = uint32(maxSeq) + for _, v := range in.GroupIDList { + x := new(open_im_sdk.MaxAndMinSeq) + maxSeq, _ := commonDB.DB.GetUserMaxSeq(v) + x.MaxSeq = uint32(maxSeq) + m[v] = x + } + resp.GroupMaxAndMinSeq = m } else if err1 == redis.ErrNil { resp.MaxSeq = 0 } else { @@ -39,6 +46,7 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) { log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String()) resp := new(open_im_sdk.PullMessageBySeqListResp) + m := make(map[string]*open_im_sdk.MsgDataList) //msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID) if err != nil { @@ -60,6 +68,32 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull } else { resp.List = redisMsgList } + for k, v := range in.GroupSeqList { + x := new(open_im_sdk.MsgDataList) + redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(k, v.SeqList, in.OperationID) + if err != nil { + if err != redis.ErrNil { + log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) + } else { + log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) + } + msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(k, failedSeqList, in.OperationID) + if err1 != nil { + log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) + resp.ErrCode = 201 + resp.ErrMsg = err.Error() + return resp, nil + } else { + redisMsgList = append(redisMsgList, msgList...) + x.MsgDataList = redisMsgList + m[k] = x + } + } else { + x.MsgDataList = redisMsgList + m[k] = x + } + } + resp.GroupMsgDataList = m //respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID) //respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat) return resp, nil diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index a97dd84ed..00a20ae13 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -50,46 +50,49 @@ type MsgCallBackResp struct { } func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { - if data.MsgData.SessionType == constant.GroupChatType { - return true, 0, "" - } - log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) - reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) - cacheClient := cacheRpc.NewCacheClient(etcdConn) - cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) - if err != nil { - log.NewError(data.OperationID, "GetBlackIDListFromCache rpc call failed ", err.Error()) - } else { - if cacheResp.CommonResp.ErrCode != 0 { - log.NewError(data.OperationID, "GetBlackIDListFromCache rpc logic call failed ", cacheResp.String()) - } else { - if utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { - return false, 600, "in black list" - } - } - } - log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) - if config.Config.MessageVerify.FriendVerify { - reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} + if data.MsgData.SessionType == constant.SingleChatType { + log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) + reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) cacheClient := cacheRpc.NewCacheClient(etcdConn) - cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) + cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) if err != nil { - log.NewError(data.OperationID, "GetFriendIDListFromCache rpc call failed ", err.Error()) + log.NewError(data.OperationID, "GetBlackIDListFromCache rpc call failed ", err.Error()) } else { if cacheResp.CommonResp.ErrCode != 0 { - log.NewError(data.OperationID, "GetFriendIDListFromCache rpc logic call failed ", cacheResp.String()) + log.NewError(data.OperationID, "GetBlackIDListFromCache rpc logic call failed ", cacheResp.String()) } else { - if !utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { - return false, 601, "not friend" + if utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { + return false, 600, "in black list" } } } - return true, 0, "" + log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) + if config.Config.MessageVerify.FriendVerify { + reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + cacheClient := cacheRpc.NewCacheClient(etcdConn) + cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) + if err != nil { + log.NewError(data.OperationID, "GetFriendIDListFromCache rpc call failed ", err.Error()) + } else { + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(data.OperationID, "GetFriendIDListFromCache rpc logic call failed ", cacheResp.String()) + } else { + if !utils.IsContain(data.MsgData.SendID, cacheResp.UserIDList) { + return false, 601, "not friend" + } + } + } + return true, 0, "" + } else { + return true, 0, "" + } + } else { return true, 0, "" } + } func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { msg.ServerMsgID = GetMsgID(msg.SendID) @@ -368,6 +371,34 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.Debug(pb.OperationID, "send msg cost time ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) + case constant.SuperGroupChatType: + // callback + callbackResp := callbackBeforeSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSuperGroupMsg resp: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + if callbackResp.ErrCode == 0 { + callbackResp.ErrCode = 201 + } + log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSuperGroupMsg result", "end rpc and return", callbackResp) + return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) + } + msgToMQSingle.MsgData = pb.MsgData + log.NewInfo(msgToMQSingle.OperationID, msgToMQSingle) + err1 := rpc.sendMsgToKafka(&msgToMQSingle, msgToMQSingle.MsgData.GroupID, constant.OnlineStatus) + if err1 != nil { + log.NewError(msgToMQSingle.OperationID, "kafka send msg err:RecvID", msgToMQSingle.MsgData.RecvID, msgToMQSingle.String()) + return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) + } + + // callback + callbackResp = callbackAfterSendSingleMsg(pb) + if callbackResp.ErrCode != 0 { + log.NewError(pb.OperationID, utils.GetSelfFuncName(), "callbackAfterSendSuperGroupMsg resp: ", callbackResp) + } + return returnMsg(&replay, pb, 0, "", msgToMQSingle.MsgData.ServerMsgID, msgToMQSingle.MsgData.SendTime) + default: return returnMsg(&replay, pb, 203, "unknown sessionType", "", 0) } diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 5878c3851..05906924a 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -105,9 +105,9 @@ const ( SysMsgType = 200 //SessionType - SingleChatType = 1 - GroupChatType = 2 - + SingleChatType = 1 + GroupChatType = 2 + SuperGroupChatType = 3 NotificationChatType = 4 //token NormalToken = 0 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index fb87df4e0..97d8885a6 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -949,6 +949,10 @@ func getSeqUid(uid string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return indexGen(uid, seqSuffix) } +func getSeqSuperGroupID(groupID string, seq uint32) string { + seqSuffix := seq / singleGocMsgNum + return superGroupIndexGen(groupID, seqSuffix) +} func GetSeqUid(uid string, seq uint32) string { return getSeqUid(uid, seq) @@ -986,3 +990,6 @@ func isNotContainInt32(target uint32, List []uint32) bool { func indexGen(uid string, seqSuffix uint32) string { return uid + ":" + strconv.FormatInt(int64(seqSuffix), 10) } +func superGroupIndexGen(groupID string, seqSuffix uint32) string { + return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) +} From fe9f86b432357492fcb17e43ab3ac56445b2d42f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 11:55:27 +0800 Subject: [PATCH 009/256] superGroup --- cmd/open_im_api/main.go | 12 +- internal/api/group/super_group.go | 38 +++ internal/rpc/group/group.go | 14 - internal/rpc/group/super_group.go | 20 ++ pkg/base_info/super_group.go | 9 + pkg/common/db/mongoModel.go | 101 +++++- pkg/proto/group/group.pb.go | 544 +++++++++++++++++++----------- pkg/proto/group/group.proto | 11 +- 8 files changed, 517 insertions(+), 232 deletions(-) create mode 100644 internal/api/group/super_group.go create mode 100644 internal/rpc/group/super_group.go create mode 100644 pkg/base_info/super_group.go diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 84ea9b705..cd9cf707b 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -70,7 +70,7 @@ func main() { { groupRouterGroup.POST("/create_group", group.CreateGroup) //1 groupRouterGroup.POST("/set_group_info", group.SetGroupInfo) //1 - groupRouterGroup.POST("join_group", group.JoinGroup) //1 + groupRouterGroup.POST("/join_group", group.JoinGroup) //1 groupRouterGroup.POST("/quit_group", group.QuitGroup) //1 groupRouterGroup.POST("/group_application_response", group.ApplicationGroupResponse) //1 groupRouterGroup.POST("/transfer_group", group.TransferGroupOwner) //1 @@ -82,15 +82,17 @@ func main() { groupRouterGroup.POST("/get_group_all_member_list", group.GetGroupAllMemberList) //1 groupRouterGroup.POST("/get_group_members_info", group.GetGroupMembersInfo) //1 groupRouterGroup.POST("/invite_user_to_group", group.InviteUserToGroup) //1 - groupRouterGroup.POST("/get_joined_group_list", group.GetJoinedGroupList) //1 - groupRouterGroup.POST("/dismiss_group", group.DismissGroup) // + groupRouterGroup.POST("/get_joined_group_list", group.GetJoinedGroupList) + groupRouterGroup.POST("/dismiss_group", group.DismissGroup) // groupRouterGroup.POST("/mute_group_member", group.MuteGroupMember) groupRouterGroup.POST("/cancel_mute_group_member", group.CancelMuteGroupMember) //MuteGroup groupRouterGroup.POST("/mute_group", group.MuteGroup) groupRouterGroup.POST("/cancel_mute_group", group.CancelMuteGroup) - groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname) - + } + superGroupRouterGroup := r.Group("/super_group") + { + superGroupRouterGroup.POST("/get_joined_super_group_list", group.GetJoinedSuperGroupList) } //certificate authRouterGroup := r.Group("/auth") diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go new file mode 100644 index 000000000..55f058d8c --- /dev/null +++ b/internal/api/group/super_group.go @@ -0,0 +1,38 @@ +package group + +import ( + jsonData "Open_IM/internal/utils" + api "Open_IM/pkg/base_info" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/log" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + rpc "Open_IM/pkg/proto/group" + "Open_IM/pkg/utils" + "context" + "github.com/gin-gonic/gin" + "net/http" + "strings" +) + +func GetJoinedSuperGroupList(c *gin.Context) { + req := api.GetJoinedSuperGroupReq{} + if err := c.BindJSON(&req); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + client := rpc.NewGroupClient(etcdConn) + rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), reqPb.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + return + } + GroupListResp := api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList} + GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList) + log.NewInfo(req.OperationID, "GetJoinedGroupList api return ", GroupListResp) + c.JSON(http.StatusOK, GroupListResp) +} diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 2fe567b4e..46792cb93 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -410,21 +410,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro //log.Debug(req.OperationID, "cp value: ", node) resp.MemberList = append(resp.MemberList, &node) } - } else { - groupInfo, err := db.DB.GetSuperGroup(req.GroupID) - if err != nil { - resp.ErrCode = constant.ErrDB.ErrCode - resp.ErrMsg = constant.ErrDB.ErrMsg - log.NewError(req.OperationID, "GetSuperGroup failed,", err.Error(), req.GroupID) - return &resp, nil - } - for _, userID := range groupInfo.MemberIDList { - var node open_im_sdk.GroupMemberFullInfo - node.UserID = userID - resp.MemberList = append(resp.MemberList, &node) - } } - log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String()) return &resp, nil } diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go new file mode 100644 index 000000000..9819664ef --- /dev/null +++ b/internal/rpc/group/super_group.go @@ -0,0 +1,20 @@ +package group + +import ( + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + pbGroup "Open_IM/pkg/proto/group" + "Open_IM/pkg/utils" + "context" +) + +func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup.GetJoinedSuperGroupListReq) (*pbGroup.GetJoinedSuperGroupListResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp := &pbGroup.GetJoinedSuperGroupListResp{} + _, err := db.DB.GetSuperGroupByUserID(req.UserID) + if err != nil { + return resp, nil + } + log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return resp, nil +} diff --git a/pkg/base_info/super_group.go b/pkg/base_info/super_group.go new file mode 100644 index 000000000..4c01789cf --- /dev/null +++ b/pkg/base_info/super_group.go @@ -0,0 +1,9 @@ +package base_info + +type GetJoinedSuperGroupReq struct { + GetJoinedGroupListReq +} + +type GetJoinedSuperGroupResp struct { + GetJoinedGroupListResp +} diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index fb87df4e0..6784012a9 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -11,6 +11,7 @@ import ( "errors" "fmt" "github.com/gogo/protobuf/sortkeys" + "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "math/rand" "sync" @@ -30,6 +31,7 @@ const cSendLog = "send_log" const cWorkMoment = "work_moment" const cCommentMsg = "comment_msg" const cSuperGroup = "super_group" +const cUserToSuperGroup = "user_to_super_group" const singleGocMsgNum = 5000 func GetSingleGocMsgNum() int { @@ -880,18 +882,22 @@ func (d *DataBases) GetUserFriendWorkMoments(showNumber, pageNumber int32, userI } type SuperGroup struct { - GroupID string `bson:"group_id"` - MemberNumCount int `bson:"member_num_count"` - MemberIDList []string `bson:"member_id_list"` + GroupID string `bson:"group_id"` + //MemberNumCount int `bson:"member_num_count"` + MemberIDList []string `bson:"member_id_list"` +} + +type UserToSuperGroup struct { + UserID string `bson:"user_id"` + GroupIDList []string `bson:"group_id_list"` } func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, memberNumCount int) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) superGroup := SuperGroup{ - GroupID: groupID, - MemberNumCount: memberNumCount, - MemberIDList: initMemberIDList, + GroupID: groupID, + MemberIDList: initMemberIDList, } _, err := c.InsertOne(ctx, superGroup) return err @@ -908,21 +914,98 @@ func (d *DataBases) GetSuperGroup(groupID string) (SuperGroup, error) { func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": bson.M{"$each": userIDList}}}) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + if err != nil { + return utils.Wrap(err, "start transaction failed") + } + _, err = c.UpdateOne(sCtx, bson.M{"group_id": groupID}, bson.M{"$addToSet": bson.M{"member_id_list": bson.M{"$each": userIDList}}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) + var users []UserToSuperGroup + for _, v := range userIDList { + users = append(users, UserToSuperGroup{ + UserID: v, + }) + } + _, err = c.UpdateMany(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) return err } func (d *DataBases) RemoverUserFromSuperGroup(groupID string, userIDList []string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + _, err = c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + err = d.RemoveGroupFromUser(ctx, sCtx, groupID, userIDList) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) return err } +func (d *DataBases) GetSuperGroupByUserID(userID string) (UserToSuperGroup, error) { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) + var user UserToSuperGroup + return user, c.FindOne(ctx, bson.M{"user_id": userID}).Decode(&user) +} + func (d *DataBases) DeleteSuperGroup(groupID string) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) - _, err := c.DeleteOne(ctx, bson.M{"group_id": groupID}) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + superGroup := &SuperGroup{} + result := c.FindOneAndDelete(sCtx, bson.M{"group_id": groupID}) + err = result.Decode(superGroup) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + if err = d.RemoveGroupFromUser(ctx, sCtx, groupID, superGroup.MemberIDList); err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) + return nil +} + +func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID string, userID []string) error { + var users []UserToSuperGroup + for _, v := range userID { + users = append(users, UserToSuperGroup{ + UserID: v, + }) + } + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": groupID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + if err != nil { + return utils.Wrap(err, "UpdateOne transaction failed") + } return err } diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index db8bb328b..80ef2dfc4 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{0} + return fileDescriptor_group_d7fc3287ce9ff601, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +82,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{1} + return fileDescriptor_group_d7fc3287ce9ff601, []int{1} } func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) @@ -131,7 +131,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{2} + return fileDescriptor_group_d7fc3287ce9ff601, []int{2} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -199,7 +199,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{3} + return fileDescriptor_group_d7fc3287ce9ff601, []int{3} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -253,7 +253,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{4} + return fileDescriptor_group_d7fc3287ce9ff601, []int{4} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -307,7 +307,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{5} + return fileDescriptor_group_d7fc3287ce9ff601, []int{5} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -361,7 +361,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{6} + return fileDescriptor_group_d7fc3287ce9ff601, []int{6} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -413,7 +413,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{7} + return fileDescriptor_group_d7fc3287ce9ff601, []int{7} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -453,7 +453,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{8} + return fileDescriptor_group_d7fc3287ce9ff601, []int{8} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -507,7 +507,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{9} + return fileDescriptor_group_d7fc3287ce9ff601, []int{9} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -561,7 +561,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{10} + return fileDescriptor_group_d7fc3287ce9ff601, []int{10} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -614,7 +614,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{11} + return fileDescriptor_group_d7fc3287ce9ff601, []int{11} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -663,7 +663,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{12} + return fileDescriptor_group_d7fc3287ce9ff601, []int{12} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -729,7 +729,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{13} + return fileDescriptor_group_d7fc3287ce9ff601, []int{13} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -770,7 +770,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{14} + return fileDescriptor_group_d7fc3287ce9ff601, []int{14} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -829,7 +829,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{15} + return fileDescriptor_group_d7fc3287ce9ff601, []int{15} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -872,7 +872,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{16} + return fileDescriptor_group_d7fc3287ce9ff601, []int{16} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -945,7 +945,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{17} + return fileDescriptor_group_d7fc3287ce9ff601, []int{17} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -985,7 +985,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{18} + return fileDescriptor_group_d7fc3287ce9ff601, []int{18} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -1037,7 +1037,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{19} + return fileDescriptor_group_d7fc3287ce9ff601, []int{19} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -1079,7 +1079,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{20} + return fileDescriptor_group_d7fc3287ce9ff601, []int{20} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -1148,7 +1148,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{} func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{21} + return fileDescriptor_group_d7fc3287ce9ff601, []int{21} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -1210,7 +1210,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{} func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{22} + return fileDescriptor_group_d7fc3287ce9ff601, []int{22} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -1271,7 +1271,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{23} + return fileDescriptor_group_d7fc3287ce9ff601, []int{23} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -1327,7 +1327,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{24} + return fileDescriptor_group_d7fc3287ce9ff601, []int{24} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1394,7 +1394,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} } func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (*Id2Result) ProtoMessage() {} func (*Id2Result) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{25} + return fileDescriptor_group_d7fc3287ce9ff601, []int{25} } func (m *Id2Result) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Id2Result.Unmarshal(m, b) @@ -1441,7 +1441,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{26} + return fileDescriptor_group_d7fc3287ce9ff601, []int{26} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1495,7 +1495,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{27} + return fileDescriptor_group_d7fc3287ce9ff601, []int{27} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1549,7 +1549,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{} func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{28} + return fileDescriptor_group_d7fc3287ce9ff601, []int{28} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1605,7 +1605,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{29} + return fileDescriptor_group_d7fc3287ce9ff601, []int{29} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1673,7 +1673,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{30} + return fileDescriptor_group_d7fc3287ce9ff601, []int{30} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1727,7 +1727,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{31} + return fileDescriptor_group_d7fc3287ce9ff601, []int{31} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1781,7 +1781,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{32} + return fileDescriptor_group_d7fc3287ce9ff601, []int{32} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1835,7 +1835,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{33} + return fileDescriptor_group_d7fc3287ce9ff601, []int{33} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1889,7 +1889,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{34} + return fileDescriptor_group_d7fc3287ce9ff601, []int{34} } func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) @@ -1943,7 +1943,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{35} + return fileDescriptor_group_d7fc3287ce9ff601, []int{35} } func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) @@ -1996,7 +1996,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{36} + return fileDescriptor_group_d7fc3287ce9ff601, []int{36} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -2043,7 +2043,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{37} + return fileDescriptor_group_d7fc3287ce9ff601, []int{37} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -2096,7 +2096,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{38} + return fileDescriptor_group_d7fc3287ce9ff601, []int{38} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -2143,7 +2143,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{39} + return fileDescriptor_group_d7fc3287ce9ff601, []int{39} } func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) @@ -2194,7 +2194,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{} func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{40} + return fileDescriptor_group_d7fc3287ce9ff601, []int{40} } func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) @@ -2228,7 +2228,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{41} + return fileDescriptor_group_d7fc3287ce9ff601, []int{41} } func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) @@ -2286,7 +2286,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{42} + return fileDescriptor_group_d7fc3287ce9ff601, []int{42} } func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) @@ -2318,7 +2318,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{43} + return fileDescriptor_group_d7fc3287ce9ff601, []int{43} } func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) @@ -2362,7 +2362,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{44} + return fileDescriptor_group_d7fc3287ce9ff601, []int{44} } func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) @@ -2394,7 +2394,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{45} + return fileDescriptor_group_d7fc3287ce9ff601, []int{45} } func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) @@ -2439,7 +2439,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{46} + return fileDescriptor_group_d7fc3287ce9ff601, []int{46} } func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) @@ -2480,7 +2480,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{47} + return fileDescriptor_group_d7fc3287ce9ff601, []int{47} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -2541,7 +2541,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{48} + return fileDescriptor_group_d7fc3287ce9ff601, []int{48} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -2596,7 +2596,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{49} + return fileDescriptor_group_d7fc3287ce9ff601, []int{49} } func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) @@ -2656,7 +2656,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{50} + return fileDescriptor_group_d7fc3287ce9ff601, []int{50} } func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) @@ -2704,7 +2704,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{51} + return fileDescriptor_group_d7fc3287ce9ff601, []int{51} } func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) @@ -2764,7 +2764,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{} func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{52} + return fileDescriptor_group_d7fc3287ce9ff601, []int{52} } func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) @@ -2811,7 +2811,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{53} + return fileDescriptor_group_d7fc3287ce9ff601, []int{53} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -2863,7 +2863,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{54} + return fileDescriptor_group_d7fc3287ce9ff601, []int{54} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -2905,7 +2905,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{55} + return fileDescriptor_group_d7fc3287ce9ff601, []int{55} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -2971,7 +2971,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{56} + return fileDescriptor_group_d7fc3287ce9ff601, []int{56} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -3012,7 +3012,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{57} + return fileDescriptor_group_d7fc3287ce9ff601, []int{57} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -3071,7 +3071,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{58} + return fileDescriptor_group_d7fc3287ce9ff601, []int{58} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -3111,7 +3111,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{59} + return fileDescriptor_group_d7fc3287ce9ff601, []int{59} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -3163,7 +3163,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{60} + return fileDescriptor_group_d7fc3287ce9ff601, []int{60} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -3203,7 +3203,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{61} + return fileDescriptor_group_d7fc3287ce9ff601, []int{61} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -3255,7 +3255,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{62} + return fileDescriptor_group_d7fc3287ce9ff601, []int{62} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -3297,7 +3297,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{63} + return fileDescriptor_group_d7fc3287ce9ff601, []int{63} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -3363,7 +3363,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_95c16320d90511af, []int{64} + return fileDescriptor_group_d7fc3287ce9ff601, []int{64} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -3390,6 +3390,106 @@ func (m *SetGroupMemberNicknameResp) GetCommonResp() *CommonResp { return nil } +type GetJoinedSuperGroupListReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=opUserID" json:"opUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupListReq{} } +func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } +func (*GetJoinedSuperGroupListReq) ProtoMessage() {} +func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { + return fileDescriptor_group_d7fc3287ce9ff601, []int{65} +} +func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) +} +func (m *GetJoinedSuperGroupListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetJoinedSuperGroupListReq.Marshal(b, m, deterministic) +} +func (dst *GetJoinedSuperGroupListReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetJoinedSuperGroupListReq.Merge(dst, src) +} +func (m *GetJoinedSuperGroupListReq) XXX_Size() int { + return xxx_messageInfo_GetJoinedSuperGroupListReq.Size(m) +} +func (m *GetJoinedSuperGroupListReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetJoinedSuperGroupListReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetJoinedSuperGroupListReq proto.InternalMessageInfo + +func (m *GetJoinedSuperGroupListReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *GetJoinedSuperGroupListReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *GetJoinedSuperGroupListReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +type GetJoinedSuperGroupListResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + GroupList []*sdk_ws.GroupInfo `protobuf:"bytes,3,rep,name=GroupList" json:"GroupList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroupListResp{} } +func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } +func (*GetJoinedSuperGroupListResp) ProtoMessage() {} +func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { + return fileDescriptor_group_d7fc3287ce9ff601, []int{66} +} +func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) +} +func (m *GetJoinedSuperGroupListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetJoinedSuperGroupListResp.Marshal(b, m, deterministic) +} +func (dst *GetJoinedSuperGroupListResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetJoinedSuperGroupListResp.Merge(dst, src) +} +func (m *GetJoinedSuperGroupListResp) XXX_Size() int { + return xxx_messageInfo_GetJoinedSuperGroupListResp.Size(m) +} +func (m *GetJoinedSuperGroupListResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetJoinedSuperGroupListResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetJoinedSuperGroupListResp proto.InternalMessageInfo + +func (m *GetJoinedSuperGroupListResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func (m *GetJoinedSuperGroupListResp) GetGroupList() []*sdk_ws.GroupInfo { + if m != nil { + return m.GroupList + } + return nil +} + func init() { proto.RegisterType((*CommonResp)(nil), "group.CommonResp") proto.RegisterType((*GroupAddMemberInfo)(nil), "group.GroupAddMemberInfo") @@ -3456,6 +3556,8 @@ func init() { proto.RegisterType((*CancelMuteGroupResp)(nil), "group.CancelMuteGroupResp") proto.RegisterType((*SetGroupMemberNicknameReq)(nil), "group.SetGroupMemberNicknameReq") proto.RegisterType((*SetGroupMemberNicknameResp)(nil), "group.SetGroupMemberNicknameResp") + proto.RegisterType((*GetJoinedSuperGroupListReq)(nil), "group.GetJoinedSuperGroupListReq") + proto.RegisterType((*GetJoinedSuperGroupListResp)(nil), "group.GetJoinedSuperGroupListResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -3499,6 +3601,7 @@ type GroupClient interface { MuteGroup(ctx context.Context, in *MuteGroupReq, opts ...grpc.CallOption) (*MuteGroupResp, error) CancelMuteGroup(ctx context.Context, in *CancelMuteGroupReq, opts ...grpc.CallOption) (*CancelMuteGroupResp, error) SetGroupMemberNickname(ctx context.Context, in *SetGroupMemberNicknameReq, opts ...grpc.CallOption) (*SetGroupMemberNicknameResp, error) + GetJoinedSuperGroupList(ctx context.Context, in *GetJoinedSuperGroupListReq, opts ...grpc.CallOption) (*GetJoinedSuperGroupListResp, error) } type groupClient struct { @@ -3779,6 +3882,15 @@ func (c *groupClient) SetGroupMemberNickname(ctx context.Context, in *SetGroupMe return out, nil } +func (c *groupClient) GetJoinedSuperGroupList(ctx context.Context, in *GetJoinedSuperGroupListReq, opts ...grpc.CallOption) (*GetJoinedSuperGroupListResp, error) { + out := new(GetJoinedSuperGroupListResp) + err := grpc.Invoke(ctx, "/group.group/GetJoinedSuperGroupList", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Group service type GroupServer interface { @@ -3812,6 +3924,7 @@ type GroupServer interface { MuteGroup(context.Context, *MuteGroupReq) (*MuteGroupResp, error) CancelMuteGroup(context.Context, *CancelMuteGroupReq) (*CancelMuteGroupResp, error) SetGroupMemberNickname(context.Context, *SetGroupMemberNicknameReq) (*SetGroupMemberNicknameResp, error) + GetJoinedSuperGroupList(context.Context, *GetJoinedSuperGroupListReq) (*GetJoinedSuperGroupListResp, error) } func RegisterGroupServer(s *grpc.Server, srv GroupServer) { @@ -4358,6 +4471,24 @@ func _Group_SetGroupMemberNickname_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Group_GetJoinedSuperGroupList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJoinedSuperGroupListReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServer).GetJoinedSuperGroupList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/group.group/GetJoinedSuperGroupList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServer).GetJoinedSuperGroupList(ctx, req.(*GetJoinedSuperGroupListReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Group_serviceDesc = grpc.ServiceDesc{ ServiceName: "group.group", HandlerType: (*GroupServer)(nil), @@ -4482,147 +4613,154 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "SetGroupMemberNickname", Handler: _Group_SetGroupMemberNickname_Handler, }, + { + MethodName: "GetJoinedSuperGroupList", + Handler: _Group_GetJoinedSuperGroupList_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_95c16320d90511af) } - -var fileDescriptor_group_95c16320d90511af = []byte{ - // 2138 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x1a, 0x4d, 0x6f, 0x1c, 0x49, - 0x55, 0xed, 0xf1, 0xd8, 0x9e, 0x67, 0x4f, 0xc6, 0x2e, 0xef, 0xd8, 0xe3, 0x5e, 0x6f, 0xd6, 0xa9, - 0x0d, 0xab, 0x88, 0x0f, 0x5b, 0x64, 0xa5, 0x1c, 0x58, 0x44, 0x88, 0x3f, 0x12, 0x4f, 0x92, 0xb1, - 0x49, 0x3b, 0x5c, 0x22, 0xa1, 0x30, 0x3b, 0x5d, 0x1e, 0x0d, 0x9e, 0xe9, 0x6e, 0x77, 0xf5, 0x38, - 0xc0, 0x65, 0xc5, 0x65, 0xa5, 0x05, 0x0e, 0x20, 0x24, 0x4e, 0x48, 0xb0, 0x27, 0x38, 0x70, 0xe0, - 0x00, 0x67, 0xc4, 0xcf, 0xe0, 0x57, 0x70, 0xe2, 0x8e, 0xba, 0xaa, 0xba, 0xba, 0xba, 0xab, 0xba, - 0x3d, 0x99, 0x49, 0xc8, 0x65, 0xa4, 0xf7, 0xea, 0x55, 0xbf, 0x8f, 0x7a, 0xef, 0xd5, 0x7b, 0xaf, - 0x06, 0xd6, 0xfa, 0xa1, 0x3f, 0x0e, 0xf6, 0xd8, 0xef, 0x6e, 0x10, 0xfa, 0x91, 0x8f, 0xaa, 0x0c, - 0xb0, 0x6f, 0x9d, 0x06, 0xc4, 0x7b, 0xd9, 0xee, 0xec, 0x05, 0x17, 0xfd, 0x3d, 0xb6, 0xb2, 0x47, - 0xdd, 0x8b, 0x97, 0xaf, 0xe8, 0xde, 0x2b, 0xca, 0x29, 0xf1, 0xf7, 0x00, 0x0e, 0xfc, 0xd1, 0xc8, - 0xf7, 0x1c, 0x42, 0x03, 0xd4, 0x82, 0xc5, 0xa3, 0x30, 0x3c, 0xf0, 0x5d, 0xd2, 0xb2, 0x76, 0xac, - 0x3b, 0x55, 0x27, 0x01, 0xd1, 0x06, 0x2c, 0x1c, 0x85, 0x61, 0x87, 0xf6, 0x5b, 0x73, 0x3b, 0xd6, - 0x9d, 0x9a, 0x23, 0x20, 0xfc, 0x18, 0xd0, 0xa3, 0x98, 0xd7, 0x03, 0xd7, 0xed, 0x90, 0xd1, 0x67, - 0x24, 0x6c, 0x7b, 0xe7, 0x7e, 0x4c, 0xfd, 0x43, 0x4a, 0xc2, 0xf6, 0x21, 0xfb, 0x4c, 0xcd, 0x11, - 0x10, 0xda, 0x86, 0x9a, 0xe3, 0x0f, 0xc9, 0x53, 0x72, 0x45, 0x86, 0xec, 0x43, 0x55, 0x27, 0x45, - 0xe0, 0xff, 0x58, 0x70, 0xe3, 0x20, 0x24, 0xdd, 0x88, 0xb0, 0x4f, 0x3a, 0xe4, 0x12, 0x3d, 0x80, - 0x1b, 0x6d, 0x6f, 0x10, 0xf1, 0x4f, 0x3f, 0x1d, 0xd0, 0xa8, 0x65, 0xed, 0x54, 0xee, 0x2c, 0xdf, - 0xdd, 0xda, 0xe5, 0xea, 0xea, 0xbc, 0x9d, 0xdc, 0x06, 0xf4, 0x1d, 0xa8, 0x31, 0xaa, 0x78, 0x91, - 0xf1, 0x5c, 0xbe, 0xbb, 0xbd, 0x4b, 0x49, 0x78, 0x45, 0xc2, 0x97, 0xdd, 0x60, 0xf0, 0x32, 0xe8, - 0x86, 0xdd, 0x11, 0xdd, 0x95, 0x34, 0x4e, 0x4a, 0x8e, 0x76, 0x60, 0xf9, 0x34, 0x20, 0x61, 0x37, - 0x1a, 0xf8, 0x5e, 0xfb, 0xb0, 0x55, 0x61, 0xca, 0xa8, 0x28, 0x64, 0xc3, 0xd2, 0x69, 0x20, 0x74, - 0x9d, 0x67, 0xcb, 0x12, 0x66, 0xbb, 0x5f, 0x79, 0x24, 0x14, 0xcb, 0x55, 0xb1, 0x3b, 0x45, 0xe1, - 0xcf, 0xa1, 0x91, 0x51, 0x78, 0x9a, 0x23, 0xc8, 0x2a, 0x58, 0x79, 0x2d, 0x05, 0x71, 0x08, 0xab, - 0x8f, 0x48, 0xc4, 0x60, 0xca, 0xd6, 0xc8, 0x65, 0x2c, 0x36, 0x27, 0x38, 0x94, 0x06, 0xaf, 0x39, - 0x2a, 0x2a, 0x6f, 0x96, 0xb9, 0x72, 0xb3, 0x54, 0xb2, 0x66, 0xc1, 0x5f, 0x5a, 0xb0, 0x96, 0x63, - 0x3a, 0x95, 0xde, 0xfb, 0x50, 0x97, 0x8a, 0x30, 0x49, 0x2b, 0xcc, 0x35, 0xca, 0x75, 0xcf, 0x6e, - 0xc1, 0xbf, 0xb2, 0xa0, 0x71, 0x26, 0x64, 0x49, 0xf4, 0xcf, 0xd8, 0xd3, 0x7a, 0x3d, 0x87, 0x51, - 0xf5, 0x9e, 0x33, 0xb8, 0x43, 0xa9, 0x33, 0xe1, 0x23, 0x58, 0xcd, 0x0a, 0x43, 0x03, 0xf4, 0x6d, - 0x35, 0x40, 0x85, 0x38, 0x6b, 0xc2, 0xfb, 0xd3, 0x05, 0x47, 0x21, 0xc2, 0x3f, 0x07, 0x3b, 0xb1, - 0xef, 0x83, 0x20, 0x18, 0x0e, 0x7a, 0xec, 0xfb, 0xb1, 0xbe, 0xb1, 0x7a, 0xaa, 0x88, 0x56, 0xb9, - 0x88, 0x86, 0x83, 0xbd, 0x09, 0xf0, 0x30, 0xf4, 0x47, 0x99, 0xa3, 0x55, 0x30, 0xf8, 0x0f, 0x16, - 0xbc, 0x5f, 0xc8, 0x7c, 0xaa, 0x63, 0x7e, 0x02, 0xab, 0x49, 0x3a, 0x18, 0x13, 0x1a, 0x29, 0x27, - 0xfd, 0x61, 0xd1, 0xa9, 0x08, 0x52, 0x47, 0xdb, 0x88, 0x23, 0xd8, 0x7e, 0x44, 0xa2, 0x58, 0x56, - 0x87, 0x5c, 0x1a, 0x8c, 0x53, 0x94, 0xb8, 0x66, 0x3b, 0xd7, 0x3f, 0x5a, 0xf0, 0x41, 0x09, 0xdb, - 0xa9, 0x4e, 0xd9, 0x68, 0x97, 0xb9, 0x69, 0xed, 0xf2, 0x4f, 0x0b, 0x9a, 0xcf, 0xc3, 0xae, 0x47, - 0xcf, 0x49, 0xc8, 0x16, 0x59, 0x96, 0x8a, 0x2d, 0xd2, 0x82, 0x45, 0x11, 0xfa, 0xc2, 0x24, 0x09, - 0x88, 0x3e, 0x86, 0x1b, 0xa7, 0x43, 0x57, 0xcd, 0x70, 0xdc, 0x32, 0x39, 0x6c, 0x4c, 0x77, 0x42, - 0x5e, 0xa9, 0x74, 0xdc, 0x44, 0x39, 0x6c, 0xde, 0x8e, 0xf3, 0xe5, 0x59, 0xa5, 0x9a, 0xcb, 0x2a, - 0x4f, 0x60, 0xc3, 0xa4, 0xc0, 0x74, 0x11, 0xf4, 0x85, 0x05, 0x2b, 0x8f, 0xfd, 0x81, 0x27, 0xef, - 0xa1, 0x62, 0x2b, 0xdc, 0x04, 0x70, 0xc8, 0x65, 0x87, 0x50, 0xda, 0xed, 0x13, 0x61, 0x01, 0x05, - 0x53, 0x96, 0x09, 0xaf, 0xd7, 0x18, 0xef, 0x43, 0x5d, 0x91, 0x63, 0x3a, 0x65, 0xfe, 0x1d, 0x87, - 0x64, 0x2e, 0x1e, 0xe3, 0x05, 0xdf, 0xa3, 0x44, 0xe4, 0x7b, 0x55, 0x0a, 0xab, 0xdc, 0xee, 0x79, - 0xef, 0x57, 0x2c, 0x53, 0xd1, 0x2c, 0xa3, 0xa4, 0x8a, 0xf9, 0x7c, 0xaa, 0x88, 0xd7, 0x8f, 0xbb, - 0x9e, 0x3b, 0x24, 0x6e, 0x1c, 0xf4, 0xfc, 0x3c, 0x15, 0x0c, 0xc2, 0xb0, 0xc2, 0x21, 0x87, 0xd0, - 0xf1, 0x30, 0x6a, 0x2d, 0xb0, 0x7c, 0x91, 0xc1, 0xe1, 0x67, 0xb0, 0x5d, 0xac, 0xda, 0x74, 0xe6, - 0x3a, 0x87, 0x95, 0x67, 0xe3, 0x41, 0x34, 0xc1, 0xd1, 0xcf, 0x76, 0x0d, 0xee, 0x43, 0x5d, 0xe1, - 0x33, 0x9d, 0xac, 0x5f, 0x59, 0xd0, 0x4c, 0xb2, 0x6d, 0x5a, 0xf2, 0x94, 0x4b, 0x3d, 0x53, 0x2a, - 0x8b, 0x13, 0xe4, 0xc3, 0xc1, 0x30, 0x22, 0x21, 0x3b, 0xd0, 0xaa, 0x23, 0xa0, 0x98, 0xdf, 0x09, - 0xf9, 0x69, 0x74, 0x46, 0x2e, 0xd9, 0x49, 0x56, 0x9d, 0x04, 0xc4, 0x7f, 0xb5, 0x60, 0xc3, 0x24, - 0xe3, 0x54, 0x97, 0xc1, 0x43, 0x80, 0x51, 0x5a, 0x0b, 0xf2, 0x6b, 0xe0, 0xe3, 0xa2, 0x74, 0xc7, - 0xb9, 0x3d, 0x1c, 0x0f, 0x87, 0xec, 0x36, 0x55, 0x76, 0xc6, 0x9c, 0x3d, 0x21, 0x2e, 0xd7, 0x23, - 0x01, 0xf1, 0x6f, 0x34, 0x71, 0x65, 0x61, 0x54, 0x9a, 0x04, 0x14, 0xb1, 0xe6, 0x58, 0xc5, 0xa4, - 0xb2, 0x9b, 0x2d, 0x09, 0xfc, 0xce, 0x82, 0x4d, 0xa3, 0x48, 0xef, 0xd2, 0x84, 0xf8, 0x6f, 0x16, - 0xa0, 0x27, 0x83, 0xde, 0x85, 0x42, 0x57, 0x6e, 0xa4, 0xaf, 0xc3, 0x6a, 0x4c, 0x4f, 0x5c, 0xae, - 0xb8, 0x62, 0x2a, 0x0d, 0x1f, 0x0b, 0xef, 0x90, 0x2e, 0xf5, 0x3d, 0x61, 0x2e, 0x01, 0xe5, 0x8d, - 0x55, 0x2d, 0x0f, 0xb9, 0x85, 0x5c, 0xc8, 0x7d, 0x0a, 0xb5, 0xb6, 0x7b, 0x97, 0xa7, 0x8e, 0xc2, - 0xab, 0x9e, 0xb1, 0x66, 0x09, 0x87, 0x37, 0x28, 0x02, 0xc2, 0x9f, 0xc3, 0xba, 0xa6, 0xee, 0x54, - 0x07, 0x70, 0x0f, 0xea, 0x52, 0x0a, 0xe5, 0x0c, 0x56, 0x45, 0xa8, 0xcb, 0x35, 0x27, 0x4b, 0x86, - 0xc7, 0x2c, 0xd6, 0xe3, 0xeb, 0x80, 0xb8, 0x4c, 0x8a, 0x24, 0xd6, 0xb3, 0x89, 0xd6, 0xd2, 0x12, - 0xed, 0x0e, 0x2c, 0xfb, 0x7a, 0x9e, 0xf2, 0x27, 0xcc, 0x53, 0x5f, 0xf0, 0x80, 0xd0, 0xf8, 0xce, - 0xd4, 0xab, 0x4c, 0x5c, 0xaf, 0xa7, 0xe4, 0xf8, 0xef, 0x16, 0xbc, 0xd7, 0xf6, 0xae, 0x06, 0x11, - 0x89, 0x25, 0x7b, 0xee, 0xcb, 0x0c, 0x7d, 0x7d, 0x1e, 0x2e, 0xbe, 0xa4, 0x52, 0x47, 0x9b, 0xcf, - 0x38, 0xda, 0x37, 0x61, 0x8d, 0xf3, 0x52, 0xbd, 0xb5, 0xca, 0xbc, 0x55, 0x5f, 0x28, 0x75, 0xba, - 0x5f, 0x58, 0xd0, 0x34, 0x88, 0xfd, 0x7f, 0x75, 0x1d, 0x0f, 0xde, 0x93, 0x45, 0xf9, 0x70, 0x38, - 0x49, 0xb0, 0xce, 0x56, 0xf0, 0xfe, 0x56, 0xb9, 0x97, 0x14, 0x86, 0xef, 0x34, 0x5f, 0xfd, 0xde, - 0x82, 0xa5, 0x83, 0xce, 0x19, 0x23, 0x9b, 0xa9, 0xc7, 0xbb, 0x03, 0x0d, 0xce, 0xab, 0x4b, 0x23, - 0x12, 0x9e, 0x74, 0x47, 0x49, 0xd9, 0x97, 0x47, 0xa3, 0xdb, 0xa2, 0x43, 0xe5, 0xa8, 0xb6, 0x2b, - 0x4c, 0x95, 0x45, 0xc6, 0xe9, 0x7d, 0x39, 0x31, 0x56, 0x7c, 0x28, 0xdb, 0x42, 0x36, 0xf6, 0x65, - 0x7e, 0x2c, 0x29, 0x02, 0x1d, 0x02, 0xfc, 0xa0, 0xdb, 0x1f, 0x78, 0xcc, 0xd4, 0x62, 0x9e, 0x71, - 0xdb, 0x20, 0xba, 0xa8, 0xee, 0x53, 0x5a, 0x47, 0xd9, 0x37, 0xc1, 0x11, 0x7e, 0x65, 0xc1, 0x4a, - 0x2a, 0x15, 0x0d, 0xd0, 0xb7, 0xa0, 0x96, 0x98, 0x8f, 0x8a, 0x29, 0x4c, 0x23, 0xa9, 0x4e, 0x04, - 0xde, 0x49, 0x29, 0xde, 0x90, 0x9c, 0xd2, 0x16, 0xe3, 0x11, 0x65, 0x52, 0x56, 0x9d, 0x14, 0x81, - 0xaf, 0x52, 0x11, 0x69, 0x6c, 0xb9, 0x2c, 0x4f, 0xeb, 0xcd, 0xd8, 0x46, 0x4f, 0x27, 0xf8, 0x4f, - 0x16, 0xd4, 0x15, 0xc6, 0xef, 0xca, 0x38, 0x36, 0x2c, 0x25, 0xb6, 0x10, 0xb6, 0x91, 0x30, 0x3e, - 0x4d, 0x67, 0x2c, 0x86, 0x70, 0x77, 0xb3, 0xe1, 0xee, 0x4e, 0xa0, 0xf3, 0x05, 0x34, 0x39, 0xc8, - 0x67, 0x55, 0x67, 0x51, 0x37, 0x1a, 0xd3, 0xf2, 0x8f, 0x6e, 0xc0, 0x02, 0x27, 0x4b, 0x6e, 0x52, - 0x0e, 0x4d, 0xe0, 0x7c, 0x2d, 0xd8, 0x30, 0x31, 0xe3, 0x9d, 0x19, 0x12, 0x4b, 0xac, 0x9d, 0xf6, - 0x87, 0xe4, 0x5a, 0x21, 0x58, 0xda, 0x72, 0x93, 0xb4, 0xc2, 0xa1, 0xec, 0x28, 0xb2, 0x92, 0x1b, - 0x45, 0x4e, 0x50, 0x94, 0x35, 0x61, 0x5d, 0x93, 0x83, 0x06, 0xf8, 0x29, 0xdc, 0x38, 0x24, 0x43, - 0xa2, 0x8c, 0x30, 0x67, 0x31, 0xfa, 0x1a, 0x34, 0x32, 0x5f, 0xa3, 0x01, 0xee, 0x40, 0x23, 0x39, - 0xd8, 0xfd, 0x9f, 0xb5, 0xdd, 0x59, 0x39, 0xdc, 0x4f, 0x07, 0x80, 0xfc, 0x73, 0x34, 0x40, 0xdf, - 0x48, 0x13, 0xa5, 0x08, 0x22, 0xcd, 0x97, 0x25, 0x01, 0xfe, 0x87, 0xd6, 0x82, 0xd0, 0x83, 0xce, - 0x59, 0xb9, 0x58, 0x36, 0x2c, 0xc5, 0x46, 0x53, 0x52, 0xa7, 0x84, 0x73, 0xa1, 0x51, 0x79, 0x33, - 0x31, 0x6c, 0x38, 0xbf, 0x7f, 0xe9, 0x75, 0x3e, 0x93, 0x9b, 0x06, 0xe8, 0xfb, 0xb0, 0xc8, 0xef, - 0x8d, 0x24, 0x94, 0x27, 0xbd, 0x6e, 0x92, 0x6d, 0xe8, 0xc8, 0x10, 0xdf, 0x5f, 0x33, 0x2a, 0xc1, - 0x7b, 0xd5, 0x02, 0x2d, 0x6e, 0x02, 0x70, 0x0e, 0x4a, 0xfa, 0x53, 0x30, 0xf8, 0xd7, 0x16, 0xb4, - 0x1c, 0x32, 0xf2, 0xaf, 0xc8, 0x6b, 0x99, 0xbf, 0x05, 0x8b, 0x3c, 0x08, 0xa8, 0xa8, 0xbf, 0x13, - 0xf0, 0xb5, 0xe6, 0xdd, 0x6e, 0x6e, 0xde, 0xed, 0xe2, 0x0e, 0x6c, 0x15, 0x48, 0xc3, 0x2f, 0x7e, - 0x3a, 0xee, 0xf5, 0x08, 0xa5, 0x62, 0xa2, 0x9c, 0x80, 0x71, 0x84, 0x9e, 0x77, 0x07, 0x43, 0xe2, - 0x0a, 0x69, 0x04, 0x84, 0xbf, 0xb4, 0xa0, 0xf9, 0xc0, 0x75, 0xdf, 0x86, 0x6a, 0xae, 0xae, 0x9a, - 0x5b, 0xaa, 0xda, 0x63, 0xd8, 0x30, 0x89, 0x32, 0x95, 0x5e, 0x03, 0x68, 0x1c, 0x0e, 0xe8, 0x68, - 0x40, 0xa9, 0xcc, 0x11, 0x36, 0x2c, 0xf9, 0xb9, 0x99, 0xac, 0x1f, 0x4c, 0x5c, 0xbd, 0xb7, 0x60, - 0xb1, 0x9f, 0xad, 0x6e, 0x05, 0x88, 0x8f, 0x60, 0x35, 0xcb, 0x8a, 0x8f, 0x19, 0x7a, 0x93, 0x8c, - 0x19, 0x52, 0x22, 0xfc, 0x17, 0x0b, 0x50, 0x67, 0x1c, 0x91, 0xdc, 0x75, 0xf2, 0x96, 0xa4, 0x8e, - 0x0d, 0x37, 0x56, 0x87, 0x46, 0x02, 0x42, 0x18, 0x56, 0x46, 0xe3, 0x88, 0xb8, 0x67, 0xa4, 0xe7, - 0x7b, 0x2e, 0x65, 0xdd, 0x5f, 0xdd, 0xc9, 0xe0, 0xf0, 0x31, 0xac, 0x6b, 0x92, 0x4e, 0xa7, 0xf4, - 0x2f, 0x2d, 0x68, 0x1d, 0x74, 0xbd, 0x1e, 0x19, 0xbe, 0x7b, 0xd5, 0xf1, 0x09, 0x6c, 0x15, 0xc8, - 0x32, 0x9d, 0x72, 0xe7, 0xb0, 0x22, 0xbf, 0xf4, 0x36, 0x1d, 0x70, 0x1f, 0xea, 0x0a, 0x9f, 0xe9, - 0x64, 0x1d, 0x02, 0xca, 0xe9, 0xfe, 0x36, 0x25, 0x3e, 0x86, 0x75, 0x8d, 0xdb, 0x74, 0x72, 0xff, - 0xd9, 0x82, 0xad, 0xb3, 0xcc, 0x0d, 0x73, 0x32, 0xe8, 0x5d, 0x78, 0xdd, 0x51, 0x52, 0xb1, 0xf4, - 0xb3, 0xad, 0x57, 0x3f, 0x6d, 0xbd, 0x3c, 0x41, 0x98, 0xdc, 0x8e, 0x09, 0x9c, 0xd1, 0xba, 0x52, - 0xae, 0xf5, 0xbc, 0xae, 0x75, 0xea, 0x5d, 0xd5, 0x8c, 0x77, 0x9d, 0x82, 0x5d, 0x24, 0xe8, 0x54, - 0x73, 0xc9, 0xbb, 0xff, 0x5d, 0x03, 0xfe, 0x04, 0x8d, 0xbe, 0x0b, 0xcb, 0xbd, 0xf4, 0x85, 0x13, - 0x35, 0x93, 0x7d, 0x99, 0x67, 0x5e, 0x7b, 0xc3, 0x84, 0xa6, 0x01, 0xba, 0x07, 0xb5, 0x9f, 0x24, - 0xe3, 0x6f, 0xb4, 0x2e, 0x88, 0xd4, 0xc1, 0xbc, 0xfd, 0x9e, 0x8e, 0xe4, 0xfb, 0x2e, 0x93, 0xd9, - 0xaa, 0xdc, 0xa7, 0x4e, 0x75, 0xe5, 0xbe, 0xec, 0x08, 0x76, 0x1f, 0xea, 0x7d, 0xf5, 0x65, 0x12, - 0x6d, 0x26, 0xef, 0xcc, 0xb9, 0x47, 0x52, 0xbb, 0x65, 0x5e, 0xa0, 0x01, 0xba, 0x0f, 0x2b, 0x54, - 0x79, 0xc4, 0x43, 0x89, 0x6e, 0xb9, 0x67, 0x46, 0x7b, 0xd3, 0x88, 0xa7, 0x01, 0xfa, 0x31, 0x6c, - 0xf6, 0xcd, 0x2f, 0x68, 0xe8, 0x56, 0x8e, 0xab, 0xfe, 0x82, 0x65, 0xe3, 0xeb, 0x48, 0x68, 0x80, - 0xce, 0x61, 0xab, 0x5f, 0xf4, 0x1c, 0x85, 0x3e, 0x4a, 0x3f, 0x50, 0xf8, 0x4e, 0x66, 0xdf, 0xbe, - 0x9e, 0x88, 0x06, 0xe8, 0x19, 0xa0, 0x48, 0x7b, 0x93, 0x41, 0xdb, 0x62, 0xaf, 0xf1, 0xbd, 0xc9, - 0xfe, 0xa0, 0x64, 0x95, 0x06, 0xa8, 0x07, 0xad, 0x7e, 0xc1, 0xc0, 0x1f, 0xe1, 0xcc, 0x9f, 0x02, - 0x8c, 0x8f, 0x1d, 0xf6, 0x47, 0xd7, 0xd2, 0x70, 0xb9, 0xfb, 0xda, 0xc4, 0x5a, 0xca, 0x6d, 0x1c, - 0xb8, 0x4b, 0xb9, 0x0b, 0x46, 0xdd, 0xcf, 0x61, 0xbd, 0xaf, 0x8f, 0x70, 0x91, 0x79, 0x97, 0xf4, - 0xb2, 0x9b, 0x65, 0xcb, 0x34, 0x40, 0xc7, 0xd0, 0xb8, 0xc8, 0xce, 0x24, 0x51, 0xf2, 0xcf, 0x08, - 0x7d, 0x34, 0x6b, 0xdb, 0x45, 0x4b, 0x52, 0xe5, 0xdc, 0x90, 0x4f, 0x55, 0x59, 0x9f, 0x3b, 0xaa, - 0x2a, 0x9b, 0xa6, 0x83, 0x27, 0xb0, 0x36, 0xc8, 0xcf, 0xbd, 0xd0, 0xfb, 0xc9, 0xa8, 0xca, 0x30, - 0xc8, 0xb3, 0xb7, 0x8b, 0x17, 0xf9, 0xf7, 0xfa, 0xf9, 0x99, 0x92, 0xfc, 0x9e, 0x69, 0xbc, 0x65, - 0x6f, 0x17, 0x2f, 0xf2, 0x40, 0x55, 0x5b, 0x1f, 0x19, 0xa8, 0xb9, 0xf6, 0xca, 0xde, 0x34, 0xe2, - 0x69, 0x80, 0x3e, 0x81, 0xa5, 0x04, 0x87, 0x50, 0x8e, 0x28, 0xde, 0xb8, 0xae, 0xe1, 0x78, 0x6a, - 0x92, 0x39, 0x03, 0xe5, 0x29, 0xa8, 0x9a, 0x9a, 0xb2, 0x13, 0x86, 0x67, 0xb2, 0xef, 0x55, 0x5a, - 0x62, 0x79, 0x40, 0xc6, 0xd6, 0x5c, 0x1e, 0x90, 0xb9, 0x97, 0x8e, 0xbd, 0x27, 0xd7, 0xc2, 0x4a, - 0xef, 0xd1, 0x5b, 0x6c, 0xe9, 0x3d, 0x86, 0xae, 0x37, 0xce, 0xf2, 0x4a, 0x9f, 0x2a, 0xb3, 0x7c, - 0xb6, 0x13, 0x96, 0x59, 0x3e, 0xd7, 0xd2, 0xc6, 0xaa, 0xe9, 0x9d, 0x58, 0x41, 0xb8, 0x89, 0x16, - 0xa0, 0x20, 0xdc, 0x64, 0x55, 0xfe, 0x02, 0x9a, 0xc6, 0x56, 0x04, 0x7d, 0x28, 0xf6, 0x15, 0xb5, - 0x4d, 0xf6, 0x4e, 0x39, 0x01, 0x17, 0x57, 0xef, 0x05, 0xa4, 0xb8, 0xc6, 0x8e, 0x45, 0x8a, 0x5b, - 0xd0, 0x44, 0xdc, 0x87, 0x15, 0xb5, 0x4e, 0x97, 0xae, 0x98, 0xeb, 0x13, 0xa4, 0x2b, 0x6a, 0x45, - 0xfd, 0x31, 0x34, 0x72, 0x95, 0xa1, 0x3c, 0x4a, 0xbd, 0x7a, 0x95, 0x47, 0x69, 0x2a, 0x26, 0x5f, - 0x40, 0xd3, 0x58, 0x69, 0x4a, 0xcb, 0x15, 0xd5, 0xc4, 0xd2, 0x72, 0xc5, 0x85, 0xea, 0x3d, 0xa8, - 0x49, 0xb4, 0xf4, 0x7d, 0xb5, 0xaa, 0x93, 0xbe, 0x9f, 0x2d, 0xbe, 0x8e, 0xa1, 0x91, 0xfb, 0xa8, - 0xd4, 0x4e, 0xaf, 0x0c, 0xa5, 0x76, 0xa6, 0x32, 0xee, 0x47, 0xb0, 0x61, 0xae, 0x74, 0xd0, 0x4e, - 0xee, 0x3a, 0xd6, 0x2a, 0x36, 0xfb, 0xd6, 0x35, 0x14, 0x34, 0xd8, 0x6f, 0xbc, 0xa8, 0xef, 0xf2, - 0x3f, 0xe2, 0x7d, 0xca, 0x7e, 0x3f, 0x5b, 0x60, 0xff, 0xb2, 0xfb, 0xe4, 0x7f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x14, 0x45, 0xba, 0x3b, 0xa4, 0x27, 0x00, 0x00, +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_d7fc3287ce9ff601) } + +var fileDescriptor_group_d7fc3287ce9ff601 = []byte{ + // 2190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49, + 0x15, 0x57, 0xdb, 0x19, 0xff, 0x79, 0xf6, 0x64, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7, + 0x36, 0xac, 0x22, 0xfe, 0xd8, 0x22, 0x2b, 0xe5, 0xc0, 0x22, 0x42, 0xfc, 0x27, 0xf1, 0x24, 0x19, + 0x9b, 0xb4, 0xc3, 0x25, 0x12, 0x0a, 0xb3, 0xd3, 0xe5, 0xd1, 0xe0, 0x99, 0xee, 0x76, 0x57, 0x8f, + 0x03, 0x5c, 0x56, 0x5c, 0x56, 0x5a, 0xe0, 0x00, 0x42, 0xe2, 0x84, 0x04, 0x7b, 0x82, 0x03, 0x07, + 0x0e, 0x70, 0x46, 0x7c, 0x0a, 0xc4, 0xa7, 0xe0, 0x2b, 0xa0, 0xae, 0xaa, 0xae, 0xae, 0xae, 0xae, + 0x6e, 0x4f, 0x7a, 0x12, 0x72, 0x19, 0xa9, 0x5e, 0xbd, 0xea, 0xf7, 0x7b, 0xaf, 0xea, 0xbd, 0x7a, + 0xef, 0xd5, 0xc0, 0x6a, 0x3f, 0xf4, 0xc7, 0xc1, 0x2e, 0xfb, 0xdd, 0x09, 0x42, 0x3f, 0xf2, 0x51, + 0x8d, 0x0d, 0xec, 0xdb, 0x27, 0x01, 0xf1, 0x5e, 0xb5, 0x3b, 0xbb, 0xc1, 0x79, 0x7f, 0x97, 0xcd, + 0xec, 0x52, 0xf7, 0xfc, 0xd5, 0x6b, 0xba, 0xfb, 0x9a, 0x72, 0x4e, 0xfc, 0x3d, 0x80, 0x7d, 0x7f, + 0x34, 0xf2, 0x3d, 0x87, 0xd0, 0x00, 0xb5, 0x60, 0xfe, 0x30, 0x0c, 0xf7, 0x7d, 0x97, 0xb4, 0xac, + 0x6d, 0xeb, 0x6e, 0xcd, 0x49, 0x86, 0x68, 0x1d, 0xe6, 0x0e, 0xc3, 0xb0, 0x43, 0xfb, 0xad, 0x99, + 0x6d, 0xeb, 0xee, 0xa2, 0x23, 0x46, 0xf8, 0x09, 0xa0, 0xc7, 0xb1, 0xac, 0x87, 0xae, 0xdb, 0x21, + 0xa3, 0xcf, 0x48, 0xd8, 0xf6, 0xce, 0xfc, 0x98, 0xfb, 0x87, 0x94, 0x84, 0xed, 0x03, 0xf6, 0x99, + 0x45, 0x47, 0x8c, 0xd0, 0x16, 0x2c, 0x3a, 0xfe, 0x90, 0x3c, 0x23, 0x97, 0x64, 0xc8, 0x3e, 0x54, + 0x73, 0x52, 0x02, 0xfe, 0xaf, 0x05, 0xd7, 0xf7, 0x43, 0xd2, 0x8d, 0x08, 0xfb, 0xa4, 0x43, 0x2e, + 0xd0, 0x43, 0xb8, 0xde, 0xf6, 0x06, 0x11, 0xff, 0xf4, 0xb3, 0x01, 0x8d, 0x5a, 0xd6, 0xf6, 0xec, + 0xdd, 0xa5, 0x7b, 0x9b, 0x3b, 0x5c, 0xdd, 0xbc, 0x6c, 0x47, 0x5b, 0x80, 0xbe, 0x03, 0x8b, 0x8c, + 0x2b, 0x9e, 0x64, 0x32, 0x97, 0xee, 0x6d, 0xed, 0x50, 0x12, 0x5e, 0x92, 0xf0, 0x55, 0x37, 0x18, + 0xbc, 0x0a, 0xba, 0x61, 0x77, 0x44, 0x77, 0x24, 0x8f, 0x93, 0xb2, 0xa3, 0x6d, 0x58, 0x3a, 0x09, + 0x48, 0xd8, 0x8d, 0x06, 0xbe, 0xd7, 0x3e, 0x68, 0xcd, 0x32, 0x65, 0x54, 0x12, 0xb2, 0x61, 0xe1, + 0x24, 0x10, 0xba, 0x5e, 0x63, 0xd3, 0x72, 0xcc, 0x56, 0xbf, 0xf6, 0x48, 0x28, 0xa6, 0x6b, 0x62, + 0x75, 0x4a, 0xc2, 0x9f, 0x43, 0x23, 0xa3, 0x70, 0x95, 0x2d, 0xc8, 0x2a, 0x38, 0xfb, 0x46, 0x0a, + 0xe2, 0x10, 0x56, 0x1e, 0x93, 0x88, 0x8d, 0x29, 0x9b, 0x23, 0x17, 0x31, 0x6c, 0xce, 0x70, 0x20, + 0x0d, 0xbe, 0xe8, 0xa8, 0x24, 0xdd, 0x2c, 0x33, 0xe5, 0x66, 0x99, 0xcd, 0x9a, 0x05, 0x7f, 0x69, + 0xc1, 0xaa, 0x26, 0xb4, 0x92, 0xde, 0x7b, 0x50, 0x97, 0x8a, 0x30, 0xa4, 0xb3, 0xec, 0x68, 0x94, + 0xeb, 0x9e, 0x5d, 0x82, 0x7f, 0x65, 0x41, 0xe3, 0x54, 0x60, 0x49, 0xf4, 0xcf, 0xd8, 0xd3, 0x7a, + 0xb3, 0x03, 0xa3, 0xea, 0x3d, 0x63, 0x38, 0x0e, 0xa5, 0x87, 0x09, 0x1f, 0xc2, 0x4a, 0x16, 0x0c, + 0x0d, 0xd0, 0xb7, 0x55, 0x07, 0x15, 0x70, 0x56, 0xc5, 0xe9, 0x4f, 0x27, 0x1c, 0x85, 0x09, 0xff, + 0x1c, 0xec, 0xc4, 0xbe, 0x0f, 0x83, 0x60, 0x38, 0xe8, 0xb1, 0xef, 0xc7, 0xfa, 0xc6, 0xea, 0xa9, + 0x10, 0xad, 0x72, 0x88, 0x86, 0x8d, 0xbd, 0x05, 0xf0, 0x28, 0xf4, 0x47, 0x99, 0xad, 0x55, 0x28, + 0xf8, 0x0f, 0x16, 0xdc, 0x2c, 0x14, 0x5e, 0x69, 0x9b, 0x9f, 0xc2, 0x4a, 0x12, 0x0e, 0xc6, 0x84, + 0x46, 0xca, 0x4e, 0x7f, 0x58, 0xb4, 0x2b, 0x82, 0xd5, 0xc9, 0x2d, 0xc4, 0x11, 0x6c, 0x3d, 0x26, + 0x51, 0x8c, 0xd5, 0x21, 0x17, 0x06, 0xe3, 0x14, 0x05, 0xae, 0xe9, 0xf6, 0xf5, 0x8f, 0x16, 0x7c, + 0x50, 0x22, 0xb6, 0xd2, 0x2e, 0x1b, 0xed, 0x32, 0x53, 0xd5, 0x2e, 0xff, 0xb4, 0xa0, 0xf9, 0x22, + 0xec, 0x7a, 0xf4, 0x8c, 0x84, 0x6c, 0x92, 0x45, 0xa9, 0xd8, 0x22, 0x2d, 0x98, 0x17, 0xae, 0x2f, + 0x4c, 0x92, 0x0c, 0xd1, 0xc7, 0x70, 0xfd, 0x64, 0xe8, 0xaa, 0x11, 0x8e, 0x5b, 0x46, 0xa3, 0xc6, + 0x7c, 0xc7, 0xe4, 0xb5, 0xca, 0xc7, 0x4d, 0xa4, 0x51, 0x75, 0x3b, 0x5e, 0x2b, 0x8f, 0x2a, 0x35, + 0x2d, 0xaa, 0x3c, 0x85, 0x75, 0x93, 0x02, 0xd5, 0x3c, 0xe8, 0x0b, 0x0b, 0x96, 0x9f, 0xf8, 0x03, + 0x4f, 0xde, 0x43, 0xc5, 0x56, 0xb8, 0x05, 0xe0, 0x90, 0x8b, 0x0e, 0xa1, 0xb4, 0xdb, 0x27, 0xc2, + 0x02, 0x0a, 0xa5, 0x2c, 0x12, 0x5e, 0xad, 0x31, 0xde, 0x83, 0xba, 0x82, 0xa3, 0x9a, 0x32, 0xff, + 0x89, 0x5d, 0x52, 0xf3, 0xc7, 0x78, 0xc2, 0xf7, 0x28, 0x11, 0xf1, 0x5e, 0x45, 0x61, 0x95, 0xdb, + 0x5d, 0x3f, 0xfd, 0x8a, 0x65, 0x66, 0x73, 0x96, 0x51, 0x42, 0xc5, 0x35, 0x3d, 0x54, 0xc4, 0xf3, + 0x47, 0x5d, 0xcf, 0x1d, 0x12, 0x37, 0x76, 0x7a, 0xbe, 0x9f, 0x0a, 0x05, 0x61, 0x58, 0xe6, 0x23, + 0x87, 0xd0, 0xf1, 0x30, 0x6a, 0xcd, 0xb1, 0x78, 0x91, 0xa1, 0xe1, 0xe7, 0xb0, 0x55, 0xac, 0x5a, + 0x35, 0x73, 0x9d, 0xc1, 0xf2, 0xf3, 0xf1, 0x20, 0x9a, 0x60, 0xeb, 0xa7, 0xbb, 0x06, 0xf7, 0xa0, + 0xae, 0xc8, 0xa9, 0x86, 0xf5, 0x2b, 0x0b, 0x9a, 0x49, 0xb4, 0x4d, 0x53, 0x9e, 0x72, 0xd4, 0x53, + 0x85, 0xb2, 0x38, 0x40, 0x3e, 0x1a, 0x0c, 0x23, 0x12, 0xb2, 0x0d, 0xad, 0x39, 0x62, 0x14, 0xcb, + 0x3b, 0x26, 0x3f, 0x8d, 0x4e, 0xc9, 0x05, 0xdb, 0xc9, 0x9a, 0x93, 0x0c, 0xf1, 0x5f, 0x2d, 0x58, + 0x37, 0x61, 0xac, 0x74, 0x19, 0x3c, 0x02, 0x18, 0xa5, 0xb9, 0x20, 0xbf, 0x06, 0x3e, 0x2e, 0x0a, + 0x77, 0x5c, 0xda, 0xa3, 0xf1, 0x70, 0xc8, 0x6e, 0x53, 0x65, 0x65, 0x2c, 0xd9, 0x13, 0x70, 0xb9, + 0x1e, 0xc9, 0x10, 0xff, 0x26, 0x07, 0x57, 0x26, 0x46, 0xa5, 0x41, 0x40, 0x81, 0x35, 0xc3, 0x32, + 0x26, 0x55, 0xdc, 0x74, 0x41, 0xe0, 0x77, 0x16, 0x6c, 0x18, 0x21, 0xbd, 0x4f, 0x13, 0xe2, 0xbf, + 0x59, 0x80, 0x9e, 0x0e, 0x7a, 0xe7, 0x0a, 0x5f, 0xb9, 0x91, 0xbe, 0x0e, 0x2b, 0x31, 0x3f, 0x71, + 0xb9, 0xe2, 0x8a, 0xa9, 0x72, 0xf4, 0x18, 0xbc, 0x43, 0xba, 0xd4, 0xf7, 0x84, 0xb9, 0xc4, 0x48, + 0x37, 0x56, 0xad, 0xdc, 0xe5, 0xe6, 0x34, 0x97, 0xfb, 0x14, 0x16, 0xdb, 0xee, 0x3d, 0x1e, 0x3a, + 0x0a, 0xaf, 0x7a, 0x26, 0x9a, 0x05, 0x1c, 0x5e, 0xa0, 0x88, 0x11, 0xfe, 0x1c, 0xd6, 0x72, 0xea, + 0x56, 0xda, 0x80, 0xfb, 0x50, 0x97, 0x28, 0x94, 0x3d, 0x58, 0x11, 0xae, 0x2e, 0xe7, 0x9c, 0x2c, + 0x1b, 0x1e, 0x33, 0x5f, 0x8f, 0xaf, 0x03, 0xe2, 0x32, 0x14, 0x89, 0xaf, 0x67, 0x03, 0xad, 0x95, + 0x0b, 0xb4, 0xdb, 0xb0, 0xe4, 0xe7, 0xe3, 0x94, 0x3f, 0x61, 0x9c, 0xfa, 0x82, 0x3b, 0x44, 0x4e, + 0xee, 0x54, 0xb5, 0xca, 0xc4, 0xf9, 0x7a, 0xca, 0x8e, 0xff, 0x6e, 0xc1, 0x8d, 0xb6, 0x77, 0x39, + 0x88, 0x48, 0x8c, 0xec, 0x85, 0x2f, 0x23, 0xf4, 0xd5, 0x71, 0xb8, 0xf8, 0x92, 0x4a, 0x0f, 0xda, + 0xb5, 0xcc, 0x41, 0xfb, 0x26, 0xac, 0x72, 0x59, 0xea, 0x69, 0xad, 0xb1, 0xd3, 0x9a, 0x9f, 0x28, + 0x3d, 0x74, 0xbf, 0xb0, 0xa0, 0x69, 0x80, 0xfd, 0x7f, 0x3d, 0x3a, 0x1e, 0xdc, 0x90, 0x49, 0xf9, + 0x70, 0x38, 0x89, 0xb3, 0x4e, 0x97, 0xf0, 0xfe, 0x56, 0xb9, 0x97, 0x14, 0x81, 0xef, 0x35, 0x5e, + 0xfd, 0xde, 0x82, 0x85, 0xfd, 0xce, 0x29, 0x63, 0x9b, 0xaa, 0xc6, 0xbb, 0x0b, 0x0d, 0x2e, 0xab, + 0x4b, 0x23, 0x12, 0x1e, 0x77, 0x47, 0x49, 0xda, 0xa7, 0x93, 0xd1, 0x1d, 0x51, 0xa1, 0x72, 0x52, + 0xdb, 0x15, 0xa6, 0xca, 0x12, 0xe3, 0xf0, 0xbe, 0x94, 0x18, 0x2b, 0xde, 0x94, 0x2d, 0x81, 0x8d, + 0x7d, 0x99, 0x6f, 0x4b, 0x4a, 0x40, 0x07, 0x00, 0x3f, 0xe8, 0xf6, 0x07, 0x1e, 0x33, 0xb5, 0xe8, + 0x67, 0xdc, 0x31, 0x40, 0x17, 0xd9, 0x7d, 0xca, 0xeb, 0x28, 0xeb, 0x26, 0xd8, 0xc2, 0xaf, 0x2c, + 0x58, 0x4e, 0x51, 0xd1, 0x00, 0x7d, 0x0b, 0x16, 0x13, 0xf3, 0x51, 0xd1, 0x85, 0x69, 0x24, 0xd9, + 0x89, 0xa0, 0x3b, 0x29, 0xc7, 0x5b, 0xc2, 0x29, 0x6d, 0x31, 0x1e, 0x51, 0x86, 0xb2, 0xe6, 0xa4, + 0x04, 0x7c, 0x99, 0x42, 0xa4, 0xb1, 0xe5, 0xb2, 0x32, 0xad, 0xb7, 0x63, 0x9b, 0x7c, 0x38, 0xc1, + 0x7f, 0xb2, 0xa0, 0xae, 0x08, 0x7e, 0x5f, 0xc6, 0xb1, 0x61, 0x21, 0xb1, 0x85, 0xb0, 0x8d, 0x1c, + 0xe3, 0x93, 0xb4, 0xc7, 0x62, 0x70, 0x77, 0x37, 0xeb, 0xee, 0xee, 0x04, 0x3a, 0x9f, 0x43, 0x93, + 0x0f, 0x79, 0xaf, 0xea, 0x34, 0xea, 0x46, 0x63, 0x5a, 0xfe, 0xd1, 0x75, 0x98, 0xe3, 0x6c, 0xc9, + 0x4d, 0xca, 0x47, 0x13, 0x1c, 0xbe, 0x16, 0xac, 0x9b, 0x84, 0xf1, 0xca, 0x0c, 0x89, 0x29, 0x56, + 0x4e, 0xfb, 0x43, 0x72, 0x25, 0x08, 0x16, 0xb6, 0xdc, 0x24, 0xac, 0xf0, 0x51, 0xb6, 0x15, 0x39, + 0xab, 0xb5, 0x22, 0x27, 0x48, 0xca, 0x9a, 0xb0, 0x96, 0xc3, 0x41, 0x03, 0xfc, 0x0c, 0xae, 0x1f, + 0x90, 0x21, 0x51, 0x5a, 0x98, 0xd3, 0x18, 0x7d, 0x15, 0x1a, 0x99, 0xaf, 0xd1, 0x00, 0x77, 0xa0, + 0x91, 0x6c, 0xec, 0xde, 0xcf, 0xda, 0xee, 0xb4, 0x12, 0x1e, 0xa4, 0x0d, 0x40, 0xfe, 0x39, 0x1a, + 0xa0, 0x6f, 0xa4, 0x81, 0x52, 0x38, 0x51, 0xee, 0x2c, 0x4b, 0x06, 0xfc, 0x8f, 0x5c, 0x09, 0x42, + 0xf7, 0x3b, 0xa7, 0xe5, 0xb0, 0x6c, 0x58, 0x88, 0x8d, 0xa6, 0x84, 0x4e, 0x39, 0xd6, 0x5c, 0x63, + 0xf6, 0xed, 0xf8, 0xb0, 0x61, 0xff, 0xfe, 0x95, 0xcf, 0xf3, 0x19, 0x6e, 0x1a, 0xa0, 0xef, 0xc3, + 0x3c, 0xbf, 0x37, 0x12, 0x57, 0x9e, 0xf4, 0xba, 0x49, 0x96, 0xa1, 0x43, 0x83, 0x7f, 0x7f, 0xcd, + 0xa8, 0x04, 0xaf, 0x55, 0x0b, 0xb4, 0xb8, 0x05, 0xc0, 0x25, 0x28, 0xe1, 0x4f, 0xa1, 0xe0, 0x5f, + 0x5b, 0xd0, 0x72, 0xc8, 0xc8, 0xbf, 0x24, 0x6f, 0x64, 0xfe, 0x16, 0xcc, 0x73, 0x27, 0xa0, 0x22, + 0xff, 0x4e, 0x86, 0x6f, 0xd4, 0xef, 0x76, 0xb5, 0x7e, 0xb7, 0x8b, 0x3b, 0xb0, 0x59, 0x80, 0x86, + 0x5f, 0xfc, 0x74, 0xdc, 0xeb, 0x11, 0x4a, 0x45, 0x47, 0x39, 0x19, 0xc6, 0x1e, 0x7a, 0xd6, 0x1d, + 0x0c, 0x89, 0x2b, 0xd0, 0x88, 0x11, 0xfe, 0xd2, 0x82, 0xe6, 0x43, 0xd7, 0x7d, 0x17, 0xaa, 0xb9, + 0x79, 0xd5, 0xdc, 0x52, 0xd5, 0x9e, 0xc0, 0xba, 0x09, 0x4a, 0x25, 0xbd, 0x06, 0xd0, 0x38, 0x18, + 0xd0, 0xd1, 0x80, 0x52, 0x19, 0x23, 0x6c, 0x58, 0xf0, 0xb5, 0x9e, 0xac, 0x1f, 0x4c, 0x9c, 0xbd, + 0xb7, 0x60, 0xbe, 0x9f, 0xcd, 0x6e, 0xc5, 0x10, 0x1f, 0xc2, 0x4a, 0x56, 0x14, 0x6f, 0x33, 0xf4, + 0x26, 0x69, 0x33, 0xa4, 0x4c, 0xf8, 0x2f, 0x16, 0xa0, 0xce, 0x38, 0x22, 0xda, 0x75, 0xf2, 0x8e, + 0x50, 0xc7, 0x86, 0x1b, 0xab, 0x4d, 0x23, 0x31, 0x42, 0x18, 0x96, 0x47, 0xe3, 0x88, 0xb8, 0xa7, + 0xa4, 0xe7, 0x7b, 0x2e, 0x65, 0xd5, 0x5f, 0xdd, 0xc9, 0xd0, 0xf0, 0x11, 0xac, 0xe5, 0x90, 0x56, + 0x53, 0xfa, 0x97, 0x16, 0xb4, 0xf6, 0xbb, 0x5e, 0x8f, 0x0c, 0xdf, 0xbf, 0xea, 0xf8, 0x18, 0x36, + 0x0b, 0xb0, 0x54, 0x53, 0xee, 0x0c, 0x96, 0xe5, 0x97, 0xde, 0xe5, 0x01, 0xdc, 0x83, 0xba, 0x22, + 0xa7, 0x1a, 0xd6, 0x21, 0x20, 0x4d, 0xf7, 0x77, 0x89, 0xf8, 0x08, 0xd6, 0x72, 0xd2, 0xaa, 0xe1, + 0xfe, 0xb3, 0x05, 0x9b, 0xa7, 0x99, 0x1b, 0xe6, 0x78, 0xd0, 0x3b, 0xf7, 0xba, 0xa3, 0x24, 0x63, + 0xe9, 0x67, 0x4b, 0xaf, 0x7e, 0x5a, 0x7a, 0x79, 0x82, 0x31, 0xb9, 0x1d, 0x93, 0x71, 0x46, 0xeb, + 0xd9, 0x72, 0xad, 0xaf, 0xe5, 0xb5, 0x4e, 0x4f, 0x57, 0x2d, 0x73, 0xba, 0x4e, 0xc0, 0x2e, 0x02, + 0x5a, 0xad, 0x2f, 0x19, 0xb2, 0x17, 0x28, 0xde, 0x32, 0x38, 0x1d, 0x07, 0xa2, 0x25, 0x9f, 0xf4, + 0x2b, 0x34, 0xa0, 0x56, 0x19, 0xd0, 0x99, 0x4c, 0x04, 0x28, 0x51, 0x3f, 0xbe, 0x0c, 0x6f, 0x16, + 0x0a, 0xad, 0xb4, 0x83, 0xd3, 0x74, 0x2b, 0xee, 0xfd, 0x1b, 0x01, 0x7f, 0x85, 0x47, 0xdf, 0x85, + 0xa5, 0x5e, 0xfa, 0xc8, 0x8b, 0x9a, 0x89, 0xcc, 0xcc, 0x4b, 0xb7, 0xbd, 0x6e, 0x22, 0xd3, 0x00, + 0xdd, 0x87, 0xc5, 0x9f, 0x24, 0x2f, 0x00, 0x68, 0x4d, 0x30, 0xa9, 0x6f, 0x13, 0xf6, 0x8d, 0x3c, + 0x91, 0xaf, 0xbb, 0x48, 0xda, 0xcb, 0x72, 0x9d, 0xda, 0xd8, 0x96, 0xeb, 0xb2, 0x5d, 0xe8, 0x3d, + 0xa8, 0xf7, 0xd5, 0xc7, 0x59, 0xb4, 0x91, 0x3c, 0xb5, 0x6b, 0xef, 0xc4, 0x76, 0xcb, 0x3c, 0x41, + 0x03, 0xf4, 0x00, 0x96, 0xa9, 0xf2, 0x8e, 0x89, 0x12, 0xdd, 0xb4, 0x97, 0x56, 0x7b, 0xc3, 0x48, + 0xa7, 0x01, 0xfa, 0x31, 0x6c, 0xf4, 0xcd, 0x8f, 0x88, 0xe8, 0xb6, 0x26, 0x35, 0xff, 0x88, 0x67, + 0xe3, 0xab, 0x58, 0x68, 0x80, 0xce, 0x60, 0xb3, 0x5f, 0xf4, 0x22, 0x87, 0x3e, 0x4a, 0x3f, 0x50, + 0xf8, 0x54, 0x68, 0xdf, 0xb9, 0x9a, 0x89, 0x06, 0xe8, 0x39, 0xa0, 0x28, 0xf7, 0x2c, 0x85, 0xb6, + 0xc4, 0x5a, 0xe3, 0x93, 0x9b, 0xfd, 0x41, 0xc9, 0x2c, 0x0d, 0x50, 0x0f, 0x5a, 0xfd, 0x82, 0x37, + 0x0f, 0x84, 0x33, 0xff, 0x8b, 0x30, 0xbe, 0xf7, 0xd8, 0x1f, 0x5d, 0xc9, 0xc3, 0x71, 0xf7, 0x73, + 0x4d, 0x7b, 0x89, 0xdb, 0xf8, 0xe6, 0x20, 0x71, 0x17, 0x74, 0xfb, 0x5f, 0xc0, 0x5a, 0x3f, 0xdf, + 0xc5, 0x46, 0xe6, 0x55, 0xf2, 0x94, 0xdd, 0x2a, 0x9b, 0xa6, 0x01, 0x3a, 0x82, 0xc6, 0x79, 0xb6, + 0x2d, 0x8b, 0x92, 0x3f, 0x87, 0xe4, 0xbb, 0xd3, 0xb6, 0x5d, 0x34, 0x25, 0x55, 0xd6, 0xfa, 0x9c, + 0xaa, 0xca, 0xf9, 0xd6, 0xab, 0xaa, 0xb2, 0xa9, 0x41, 0x7a, 0x0c, 0xab, 0x03, 0xbd, 0xf5, 0x87, + 0x6e, 0x26, 0xdd, 0x3a, 0x43, 0x2f, 0xd3, 0xde, 0x2a, 0x9e, 0xe4, 0xdf, 0xeb, 0xeb, 0x6d, 0x35, + 0xf9, 0x3d, 0x53, 0x87, 0xcf, 0xde, 0x2a, 0x9e, 0xe4, 0x8e, 0xaa, 0x56, 0x7f, 0xd2, 0x51, 0xb5, + 0x0a, 0xd3, 0xde, 0x30, 0xd2, 0x69, 0x80, 0x3e, 0x81, 0x85, 0x84, 0x86, 0x90, 0xc6, 0x14, 0x2f, + 0x5c, 0xcb, 0xd1, 0x78, 0x68, 0x92, 0x31, 0x03, 0xe9, 0x1c, 0x54, 0x0d, 0x4d, 0xd9, 0x26, 0xcb, + 0x73, 0x59, 0xfa, 0x2b, 0x5d, 0x01, 0xb9, 0x41, 0xc6, 0xee, 0x84, 0xdc, 0x20, 0x73, 0x3b, 0x21, + 0x3e, 0x3d, 0x5a, 0x15, 0x2f, 0x4f, 0x4f, 0xbe, 0xcb, 0x20, 0x4f, 0x8f, 0xa1, 0xf0, 0x8f, 0xa3, + 0xbc, 0x52, 0xaa, 0xcb, 0x28, 0x9f, 0x6d, 0x06, 0xc8, 0x28, 0xaf, 0x55, 0xf5, 0xb1, 0x6a, 0xf9, + 0x62, 0xb4, 0xc0, 0xdd, 0x44, 0x15, 0x54, 0xe0, 0x6e, 0xb2, 0x30, 0x79, 0x09, 0x4d, 0x63, 0x35, + 0x86, 0x3e, 0x14, 0xeb, 0x8a, 0x2a, 0x47, 0x7b, 0xbb, 0x9c, 0x81, 0xc3, 0xcd, 0x97, 0x43, 0x12, + 0xae, 0xb1, 0x68, 0x93, 0x70, 0x0b, 0xea, 0xa8, 0x07, 0xb0, 0xac, 0x96, 0x2a, 0xf2, 0x28, 0x6a, + 0xa5, 0x92, 0x3c, 0x8a, 0xb9, 0xba, 0xe6, 0x08, 0x1a, 0x5a, 0x72, 0x2c, 0xb7, 0x32, 0x9f, 0xc0, + 0xcb, 0xad, 0x34, 0xe5, 0xd3, 0x2f, 0xa1, 0x69, 0x4c, 0xb6, 0xa5, 0xe5, 0x8a, 0xca, 0x02, 0x69, + 0xb9, 0xe2, 0x5c, 0xfd, 0x3e, 0x2c, 0x4a, 0xb2, 0x3c, 0xfb, 0x6a, 0x62, 0x2b, 0xcf, 0x7e, 0x36, + 0xff, 0x3c, 0x82, 0x86, 0xf6, 0x51, 0xa9, 0x5d, 0x3e, 0x39, 0x96, 0xda, 0x99, 0x32, 0xd9, 0x1f, + 0xc1, 0xba, 0x39, 0xd9, 0x43, 0xdb, 0xda, 0x75, 0x9c, 0x4b, 0x5a, 0xed, 0xdb, 0x57, 0x70, 0xf0, + 0xab, 0xbb, 0x20, 0x0b, 0x53, 0xaf, 0xee, 0x82, 0xd4, 0x50, 0xbd, 0xba, 0x8b, 0x12, 0xb9, 0xbd, + 0xc6, 0xcb, 0xfa, 0x0e, 0xff, 0xb7, 0xe3, 0xa7, 0xec, 0xf7, 0xb3, 0x39, 0xf6, 0x57, 0xc6, 0x4f, + 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x96, 0x91, 0x7b, 0xd5, 0x09, 0x29, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index f0db47bad..6f6af9aa9 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -13,7 +13,6 @@ message GroupAddMemberInfo{ int32 RoleLevel = 2; } - message CreateGroupReq{ repeated GroupAddMemberInfo InitMemberList = 1; server_api_params.GroupInfo GroupInfo = 2; @@ -391,7 +390,16 @@ message SetGroupMemberNicknameResp{ CommonResp CommonResp = 1; } +message GetJoinedSuperGroupListReq { + string operationID = 1; + string userID = 2; + string opUserID = 3; +} +message GetJoinedSuperGroupListResp { + CommonResp commonResp = 1; + repeated server_api_params.GroupInfo GroupList = 3; +} service group{ @@ -429,6 +437,7 @@ service group{ rpc SetGroupMemberNickname(SetGroupMemberNicknameReq) returns (SetGroupMemberNicknameResp); + rpc GetJoinedSuperGroupList(GetJoinedSuperGroupListReq) returns (GetJoinedSuperGroupListResp); } From 839f3e52ef47503fb7a3f7d7fa7320a10a4e3d82 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 11:56:32 +0800 Subject: [PATCH 010/256] pull message update --- internal/rpc/msg/pull_message.go | 2 +- pkg/common/db/mongoModel.go | 62 ++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index d9bb49344..1736baf83 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -77,7 +77,7 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull } else { log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) } - msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(k, failedSeqList, in.OperationID) + msgList, err1 := commonDB.DB.GetSuperGroupMsgBySeqListMongo(k, failedSeqList, in.OperationID) if err1 != nil { log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) resp.ErrCode = 201 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 97d8885a6..db6406d1f 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -306,6 +306,57 @@ func (d *DataBases) GetMsgBySeqListMongo2(uid string, seqList []uint32, operatio } return seqMsg, nil } +func (d *DataBases) GetSuperGroupMsgBySeqListMongo(groupID string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) { + var hasSeqList []uint32 + singleCount := 0 + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + + m := func(uid string, seqList []uint32) map[string][]uint32 { + t := make(map[string][]uint32) + for i := 0; i < len(seqList); i++ { + seqUid := getSeqUid(uid, seqList[i]) + if value, ok := t[seqUid]; !ok { + var temp []uint32 + t[seqUid] = append(temp, seqList[i]) + } else { + t[seqUid] = append(value, seqList[i]) + } + } + return t + }(groupID, seqList) + sChat := UserChat{} + for seqUid, value := range m { + if err = c.FindOne(ctx, bson.M{"uid": seqUid}).Decode(&sChat); err != nil { + log.NewError(operationID, "not find seqGroupID", seqUid, value, groupID, seqList, err.Error()) + continue + } + singleCount = 0 + for i := 0; i < len(sChat.Msg); i++ { + msg := new(open_im_sdk.MsgData) + if err = proto.Unmarshal(sChat.Msg[i].Msg, msg); err != nil { + log.NewError(operationID, "Unmarshal err", seqUid, value, groupID, seqList, err.Error()) + return nil, err + } + if isContainInt32(msg.Seq, value) { + seqMsg = append(seqMsg, msg) + hasSeqList = append(hasSeqList, msg.Seq) + singleCount++ + if singleCount == len(value) { + break + } + } + } + } + if len(hasSeqList) != len(seqList) { + var diff []uint32 + diff = utils.Difference(hasSeqList, seqList) + exceptionMSg := genExceptionSuperGroupMessageBySeqList(diff, groupID) + seqMsg = append(seqMsg, exceptionMSg...) + + } + return seqMsg, nil +} func (d *DataBases) GetMsgAndIndexBySeqListInOneMongo2(suffixUserID string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, indexList []int, unexistSeqList []uint32, err error) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) @@ -351,6 +402,17 @@ func genExceptionMessageBySeqList(seqList []uint32) (exceptionMsg []*open_im_sdk return exceptionMsg } +func genExceptionSuperGroupMessageBySeqList(seqList []uint32, groupID string) (exceptionMsg []*open_im_sdk.MsgData) { + for _, v := range seqList { + msg := new(open_im_sdk.MsgData) + msg.Seq = v + msg.GroupID = groupID + msg.SessionType = constant.SuperGroupChatType + exceptionMsg = append(exceptionMsg, msg) + } + return exceptionMsg +} + func (d *DataBases) SaveUserChatMongo2(uid string, sendTime int64, m *pbMsg.MsgDataToDB) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) From ae30b4359f0cda33071466593488ddccd8569309 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 30 May 2022 12:12:09 +0800 Subject: [PATCH 011/256] super group --- pkg/common/constant/constant.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 05906924a..6469356f3 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -85,7 +85,11 @@ const ( SignalingNotificationBegin = 1600 SignalingNotification = 1601 - SignalingNotificationEnd = 1699 + SignalingNotificationEnd = 1649 + + SuperGroupNotificationBegin = 1650 + SuperGroupUpdateNotification = 1621 + SuperGroupNotificationEnd = 1699 ConversationPrivateChatNotification = 1701 From d3fe5cdf34863851e7ab0b6f96e161da579e02df Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:10:26 +0800 Subject: [PATCH 012/256] superGroup --- internal/rpc/group/group.go | 13 +++++++ internal/rpc/group/super_group.go | 22 ++++++++++-- internal/rpc/msg/super_group_notification.go | 36 ++++++++++++++++++++ pkg/common/constant/constant.go | 5 ++- pkg/common/db/mongoModel.go | 31 ++++++++++++++++- 5 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 internal/rpc/msg/super_group_notification.go diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 46792cb93..192939c59 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -197,6 +197,11 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String()) if req.GroupInfo.GroupType != constant.SuperGroup { chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) + } else { + for _, userID := range okUserIDList { + chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) + } + } return resp, nil } else { @@ -377,6 +382,10 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite if groupInfo.GroupType != constant.SuperGroup { chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) + } else { + for _, userID := range okUserIDList { + chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) + } } log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") @@ -562,6 +571,10 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou } if groupInfo.GroupType != constant.SuperGroup { chat.MemberKickedNotification(req, okUserIDList) + } else { + for _, userID := range okUserIDList { + chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) + } } log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String()) return &resp, nil diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 9819664ef..675c14fd6 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -1,20 +1,38 @@ package group import ( + "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" + imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" pbGroup "Open_IM/pkg/proto/group" + commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" ) func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup.GetJoinedSuperGroupListReq) (*pbGroup.GetJoinedSuperGroupListResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) - resp := &pbGroup.GetJoinedSuperGroupListResp{} - _, err := db.DB.GetSuperGroupByUserID(req.UserID) + resp := &pbGroup.GetJoinedSuperGroupListResp{CommonResp: &pbGroup.CommonResp{}} + userToSuperGroup, err := db.DB.GetSuperGroupByUserID(req.UserID) if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSuperGroupByUserID failed", err.Error()) + resp.CommonResp.ErrCode = constant.ErrDB.ErrCode + resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg return resp, nil } + for _, groupID := range userToSuperGroup.GroupIDList { + groupInfoDB, err := imdb.GetGroupInfoByGroupID(groupID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupInfoByGroupID failed", groupID, err.Error()) + continue + } + groupInfo := &commonPb.GroupInfo{} + if err := utils.CopyStructFields(groupInfo, groupInfoDB); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + } + resp.GroupList = append(resp.GroupList, groupInfo) + } log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/internal/rpc/msg/super_group_notification.go b/internal/rpc/msg/super_group_notification.go new file mode 100644 index 000000000..56fad1ebd --- /dev/null +++ b/internal/rpc/msg/super_group_notification.go @@ -0,0 +1,36 @@ +package msg + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/log" + sdk "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" +) + +func SuperGroupNotification(operationID, sendID, recvID string) { + //var tips sdk.TipsComm + //var err error + //marshaler := jsonpb.Marshaler{ + // OrigName: true, + // EnumsAsInts: false, + // EmitDefaults: false, + //} + //tips.JsonDetail, _ = marshaler.MarshalToString(m) + n := &NotificationMsg{ + SendID: sendID, + RecvID: recvID, + MsgFrom: constant.UserMsgType, + ContentType: constant.SuperGroupUpdateNotification, + SessionType: constant.SingleChatType, + OperationID: operationID, + } + //n.Content, err = proto.Marshal(&tips) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), "proto.Marshal failed") + // return + //} + log.NewInfo(operationID, utils.GetSelfFuncName(), string(n.Content)) + Notification(n) +} diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 05906924a..ea650cb4c 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -94,7 +94,10 @@ const ( WorkMomentNotificationBegin = 1900 WorkMomentNotification = 1901 - NotificationEnd = 2000 + SuperGroupUpdateNotificationBegin = 2000 + SuperGroupUpdateNotification = 2001 + + NotificationEnd = 3000 //status MsgNormal = 1 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index d96c1494a..5915e42af 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -895,11 +895,36 @@ type UserToSuperGroup struct { func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, memberNumCount int) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cSuperGroup) + session, err := d.mongoClient.StartSession() + if err != nil { + return utils.Wrap(err, "start session failed") + } + defer session.EndSession(ctx) + sCtx := mongo.NewSessionContext(ctx, session) + if err != nil { + return utils.Wrap(err, "start transaction failed") + } superGroup := SuperGroup{ GroupID: groupID, MemberIDList: initMemberIDList, } - _, err := c.InsertOne(ctx, superGroup) + _, err = c.InsertOne(sCtx, superGroup) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + var users []UserToSuperGroup + for _, v := range initMemberIDList { + users = append(users, UserToSuperGroup{ + UserID: v, + }) + } + _, err = c.UpdateOne(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } + session.CommitTransaction(ctx) return err } @@ -954,6 +979,10 @@ func (d *DataBases) RemoverUserFromSuperGroup(groupID string, userIDList []strin defer session.EndSession(ctx) sCtx := mongo.NewSessionContext(ctx, session) _, err = c.UpdateOne(ctx, bson.M{"group_id": groupID}, bson.M{"$pull": bson.M{"member_id_list": bson.M{"$in": userIDList}}}) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } err = d.RemoveGroupFromUser(ctx, sCtx, groupID, userIDList) if err != nil { session.AbortTransaction(ctx) From 0b9e6d52b403542aa86c0e51bdbdeb8a8d44b0c8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:11:13 +0800 Subject: [PATCH 013/256] superGroup --- pkg/common/constant/constant.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index b89c117f7..760afb7c7 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -98,9 +98,6 @@ const ( WorkMomentNotificationBegin = 1900 WorkMomentNotification = 1901 - SuperGroupUpdateNotificationBegin = 2000 - SuperGroupUpdateNotification = 2001 - NotificationEnd = 3000 //status From 08a7dbe319caedbf4129055092fe6480060f80ee Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 15:15:46 +0800 Subject: [PATCH 014/256] message update --- internal/api/chat/get_max_min_seq.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/api/chat/get_max_min_seq.go b/internal/api/chat/get_max_min_seq.go index 38379d4cc..5cca7c775 100644 --- a/internal/api/chat/get_max_min_seq.go +++ b/internal/api/chat/get_max_min_seq.go @@ -5,7 +5,8 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" - pbMsg "Open_IM/pkg/proto/chat" + pbChat "Open_IM/pkg/proto/chat" + sdk_ws "Open_IM/pkg/proto/sdk_ws" "context" "github.com/gin-gonic/gin" "net/http" @@ -31,11 +32,11 @@ func GetSeq(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "token validate err" + err.Error()}) return } - pbData := pbMsg.GetMaxAndMinSeqReq{} + pbData := sdk_ws.GetMaxAndMinSeqReq{} pbData.UserID = params.SendID pbData.OperationID = params.OperationID grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbMsg.NewChatClient(grpcConn) + msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.GetMaxAndMinSeq(context.Background(), &pbData) if err != nil { log.NewError(params.OperationID, "UserGetSeq rpc failed, ", params, err.Error()) From 110f5e02f4a9c2eb982b6a14f24cb6f18dcf7f52 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:27:23 +0800 Subject: [PATCH 015/256] superGroup --- internal/rpc/group/super_group.go | 6 ++++++ internal/rpc/msg/super_group_notification.go | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 675c14fd6..22952cd87 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -31,6 +31,12 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. if err := utils.CopyStructFields(groupInfo, groupInfoDB); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) } + group, err := db.DB.GetSuperGroup(groupID) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSuperGroup failed", groupID, err.Error()) + continue + } + groupInfo.MemberCount = uint32(len(group.MemberIDList)) resp.GroupList = append(resp.GroupList, groupInfo) } log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) diff --git a/internal/rpc/msg/super_group_notification.go b/internal/rpc/msg/super_group_notification.go index 56fad1ebd..32e86e167 100644 --- a/internal/rpc/msg/super_group_notification.go +++ b/internal/rpc/msg/super_group_notification.go @@ -3,10 +3,10 @@ package msg import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" - sdk "Open_IM/pkg/proto/sdk_ws" + //sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" + //"github.com/golang/protobuf/jsonpb" + //"github.com/golang/protobuf/proto" ) func SuperGroupNotification(operationID, sendID, recvID string) { From edb5cb4ee585eb77169002281238841878442d51 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 15:45:19 +0800 Subject: [PATCH 016/256] superGroup --- pkg/common/db/mongoModel.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 29e7e10d1..3fc7aa041 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -981,7 +981,11 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, UserID: v, }) } - _, err = c.UpdateOne(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + upsert := true + opts := &options.UpdateOptions{ + Upsert: &upsert, + } + _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") From 5e5597ef19355002c3a105ea9ead8bbdfd69f30d Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 30 May 2022 15:49:35 +0800 Subject: [PATCH 017/256] super group --- pkg/base_info/super_group.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/base_info/super_group.go b/pkg/base_info/super_group.go index 4c01789cf..10c70293b 100644 --- a/pkg/base_info/super_group.go +++ b/pkg/base_info/super_group.go @@ -7,3 +7,11 @@ type GetJoinedSuperGroupReq struct { type GetJoinedSuperGroupResp struct { GetJoinedGroupListResp } + +type GetSuperGroupsInfoReq struct { + GetGroupInfoReq +} + +type GetSuperGroupsInfoResp struct { + GetGroupInfoResp +} From 653c0faa18613d00a8df17d8307d60d62dcaaf7d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 16:23:15 +0800 Subject: [PATCH 018/256] superGroup --- cmd/open_im_api/main.go | 1 + internal/api/group/super_group.go | 35 +- internal/rpc/group/super_group.go | 20 ++ pkg/base_info/super_group.go | 12 +- pkg/common/db/mongoModel.go | 6 +- pkg/proto/group/group.pb.go | 554 +++++++++++++++++++----------- pkg/proto/group/group.proto | 11 + 7 files changed, 426 insertions(+), 213 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index cd9cf707b..17400d1cd 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -93,6 +93,7 @@ func main() { superGroupRouterGroup := r.Group("/super_group") { superGroupRouterGroup.POST("/get_joined_super_group_list", group.GetJoinedSuperGroupList) + superGroupRouterGroup.POST("/get_super_groups_info", group.GetSuperGroupsInfo) } //certificate authRouterGroup := r.Group("/auth") diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index 55f058d8c..35fd88f7a 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -5,6 +5,7 @@ import ( api "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" rpc "Open_IM/pkg/proto/group" "Open_IM/pkg/utils" @@ -15,7 +16,7 @@ import ( ) func GetJoinedSuperGroupList(c *gin.Context) { - req := api.GetJoinedSuperGroupReq{} + req := api.GetJoinedSuperGroupListReq{} if err := c.BindJSON(&req); err != nil { log.NewError("0", "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) @@ -31,8 +32,38 @@ func GetJoinedSuperGroupList(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) return } - GroupListResp := api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList} + GroupListResp := api.GetJoinedSuperGroupListResp{GetJoinedGroupListResp: api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList}} GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList) log.NewInfo(req.OperationID, "GetJoinedGroupList api return ", GroupListResp) c.JSON(http.StatusOK, GroupListResp) } + +func GetSuperGroupsInfo(c *gin.Context) { + req := api.GetSuperGroupsInfoReq{} + if err := c.BindJSON(&req); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + reqPb := rpc.GetSuperGroupsInfoReq{OperationID: req.OperationID, OpUserID: opUserID, GroupIDList: req.GroupIDList} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + client := rpc.NewGroupClient(etcdConn) + rpcResp, err := client.GetSuperGroupsInfo(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), reqPb.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()}) + return + } + resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupInfoList}} + resp.Data = jsonData.JsonDataList(resp.GroupInfoList) + log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) + c.JSON(http.StatusOK, resp) +} diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 22952cd87..384ec8a23 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -5,6 +5,7 @@ import ( "Open_IM/pkg/common/db" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" + cp "Open_IM/pkg/common/utils" pbGroup "Open_IM/pkg/proto/group" commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" @@ -42,3 +43,22 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } + +func (s *groupServer) GetSuperGroupsInfo(_ context.Context, req *pbGroup.GetSuperGroupsInfoReq) (resp *pbGroup.GetSuperGroupsInfoResp, err error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) + resp = &pbGroup.GetSuperGroupsInfoResp{} + groupsInfoList := make([]*commonPb.GroupInfo, 0) + for _, groupID := range req.GroupIDList { + groupInfoFromMysql, err := imdb.GetGroupInfoByGroupID(groupID) + if err != nil { + log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupID) + continue + } + var groupInfo commonPb.GroupInfo + cp.GroupDBCopyOpenIM(&groupInfo, groupInfoFromMysql) + groupsInfoList = append(groupsInfoList, &groupInfo) + } + resp.GroupInfoList = groupsInfoList + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return resp, nil +} diff --git a/pkg/base_info/super_group.go b/pkg/base_info/super_group.go index 4c01789cf..8ea24e014 100644 --- a/pkg/base_info/super_group.go +++ b/pkg/base_info/super_group.go @@ -1,9 +1,17 @@ package base_info -type GetJoinedSuperGroupReq struct { +type GetJoinedSuperGroupListReq struct { GetJoinedGroupListReq } -type GetJoinedSuperGroupResp struct { +type GetJoinedSuperGroupListResp struct { GetJoinedGroupListResp } + +type GetSuperGroupsInfoReq struct { + GetGroupInfoReq +} + +type GetSuperGroupsInfoResp struct { + GetGroupInfoResp +} diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 3fc7aa041..0e849290d 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1026,7 +1026,11 @@ func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) err UserID: v, }) } - _, err = c.UpdateMany(sCtx, users, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}) + upsert := true + opts := &options.UpdateOptions{ + Upsert: &upsert, + } + _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": userIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index 80ef2dfc4..4dcf62098 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{0} + return fileDescriptor_group_befc34d716b1ae6c, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +82,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{1} + return fileDescriptor_group_befc34d716b1ae6c, []int{1} } func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) @@ -131,7 +131,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{2} + return fileDescriptor_group_befc34d716b1ae6c, []int{2} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -199,7 +199,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{3} + return fileDescriptor_group_befc34d716b1ae6c, []int{3} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -253,7 +253,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{4} + return fileDescriptor_group_befc34d716b1ae6c, []int{4} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -307,7 +307,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{5} + return fileDescriptor_group_befc34d716b1ae6c, []int{5} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -361,7 +361,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{6} + return fileDescriptor_group_befc34d716b1ae6c, []int{6} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -413,7 +413,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{7} + return fileDescriptor_group_befc34d716b1ae6c, []int{7} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -453,7 +453,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{8} + return fileDescriptor_group_befc34d716b1ae6c, []int{8} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -507,7 +507,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{9} + return fileDescriptor_group_befc34d716b1ae6c, []int{9} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -561,7 +561,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{10} + return fileDescriptor_group_befc34d716b1ae6c, []int{10} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -614,7 +614,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{11} + return fileDescriptor_group_befc34d716b1ae6c, []int{11} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -663,7 +663,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{12} + return fileDescriptor_group_befc34d716b1ae6c, []int{12} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -729,7 +729,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{13} + return fileDescriptor_group_befc34d716b1ae6c, []int{13} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -770,7 +770,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{14} + return fileDescriptor_group_befc34d716b1ae6c, []int{14} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -829,7 +829,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{15} + return fileDescriptor_group_befc34d716b1ae6c, []int{15} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -872,7 +872,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{16} + return fileDescriptor_group_befc34d716b1ae6c, []int{16} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -945,7 +945,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{17} + return fileDescriptor_group_befc34d716b1ae6c, []int{17} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -985,7 +985,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{18} + return fileDescriptor_group_befc34d716b1ae6c, []int{18} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -1037,7 +1037,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{19} + return fileDescriptor_group_befc34d716b1ae6c, []int{19} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -1079,7 +1079,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{20} + return fileDescriptor_group_befc34d716b1ae6c, []int{20} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -1148,7 +1148,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{} func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{21} + return fileDescriptor_group_befc34d716b1ae6c, []int{21} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -1210,7 +1210,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{} func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{22} + return fileDescriptor_group_befc34d716b1ae6c, []int{22} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -1271,7 +1271,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{23} + return fileDescriptor_group_befc34d716b1ae6c, []int{23} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -1327,7 +1327,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{24} + return fileDescriptor_group_befc34d716b1ae6c, []int{24} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1394,7 +1394,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} } func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (*Id2Result) ProtoMessage() {} func (*Id2Result) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{25} + return fileDescriptor_group_befc34d716b1ae6c, []int{25} } func (m *Id2Result) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Id2Result.Unmarshal(m, b) @@ -1441,7 +1441,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{26} + return fileDescriptor_group_befc34d716b1ae6c, []int{26} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1495,7 +1495,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{27} + return fileDescriptor_group_befc34d716b1ae6c, []int{27} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1549,7 +1549,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{} func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{28} + return fileDescriptor_group_befc34d716b1ae6c, []int{28} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1605,7 +1605,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{29} + return fileDescriptor_group_befc34d716b1ae6c, []int{29} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1673,7 +1673,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{30} + return fileDescriptor_group_befc34d716b1ae6c, []int{30} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1727,7 +1727,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{31} + return fileDescriptor_group_befc34d716b1ae6c, []int{31} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1781,7 +1781,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{32} + return fileDescriptor_group_befc34d716b1ae6c, []int{32} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1835,7 +1835,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{33} + return fileDescriptor_group_befc34d716b1ae6c, []int{33} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1889,7 +1889,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{34} + return fileDescriptor_group_befc34d716b1ae6c, []int{34} } func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) @@ -1943,7 +1943,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{35} + return fileDescriptor_group_befc34d716b1ae6c, []int{35} } func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) @@ -1996,7 +1996,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{36} + return fileDescriptor_group_befc34d716b1ae6c, []int{36} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -2043,7 +2043,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{37} + return fileDescriptor_group_befc34d716b1ae6c, []int{37} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -2096,7 +2096,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{38} + return fileDescriptor_group_befc34d716b1ae6c, []int{38} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -2143,7 +2143,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{39} + return fileDescriptor_group_befc34d716b1ae6c, []int{39} } func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) @@ -2194,7 +2194,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{} func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{40} + return fileDescriptor_group_befc34d716b1ae6c, []int{40} } func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) @@ -2228,7 +2228,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{41} + return fileDescriptor_group_befc34d716b1ae6c, []int{41} } func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) @@ -2286,7 +2286,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{42} + return fileDescriptor_group_befc34d716b1ae6c, []int{42} } func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) @@ -2318,7 +2318,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{43} + return fileDescriptor_group_befc34d716b1ae6c, []int{43} } func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) @@ -2362,7 +2362,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{44} + return fileDescriptor_group_befc34d716b1ae6c, []int{44} } func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) @@ -2394,7 +2394,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{45} + return fileDescriptor_group_befc34d716b1ae6c, []int{45} } func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) @@ -2439,7 +2439,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{46} + return fileDescriptor_group_befc34d716b1ae6c, []int{46} } func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) @@ -2480,7 +2480,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{47} + return fileDescriptor_group_befc34d716b1ae6c, []int{47} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -2541,7 +2541,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{48} + return fileDescriptor_group_befc34d716b1ae6c, []int{48} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -2596,7 +2596,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{49} + return fileDescriptor_group_befc34d716b1ae6c, []int{49} } func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) @@ -2656,7 +2656,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{50} + return fileDescriptor_group_befc34d716b1ae6c, []int{50} } func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) @@ -2704,7 +2704,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{51} + return fileDescriptor_group_befc34d716b1ae6c, []int{51} } func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) @@ -2764,7 +2764,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{} func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{52} + return fileDescriptor_group_befc34d716b1ae6c, []int{52} } func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) @@ -2811,7 +2811,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{53} + return fileDescriptor_group_befc34d716b1ae6c, []int{53} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -2863,7 +2863,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{54} + return fileDescriptor_group_befc34d716b1ae6c, []int{54} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -2905,7 +2905,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{55} + return fileDescriptor_group_befc34d716b1ae6c, []int{55} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -2971,7 +2971,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{56} + return fileDescriptor_group_befc34d716b1ae6c, []int{56} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -3012,7 +3012,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{57} + return fileDescriptor_group_befc34d716b1ae6c, []int{57} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -3071,7 +3071,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{58} + return fileDescriptor_group_befc34d716b1ae6c, []int{58} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -3111,7 +3111,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{59} + return fileDescriptor_group_befc34d716b1ae6c, []int{59} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -3163,7 +3163,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{60} + return fileDescriptor_group_befc34d716b1ae6c, []int{60} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -3203,7 +3203,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{61} + return fileDescriptor_group_befc34d716b1ae6c, []int{61} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -3255,7 +3255,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{62} + return fileDescriptor_group_befc34d716b1ae6c, []int{62} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -3297,7 +3297,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{63} + return fileDescriptor_group_befc34d716b1ae6c, []int{63} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -3363,7 +3363,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{64} + return fileDescriptor_group_befc34d716b1ae6c, []int{64} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -3403,7 +3403,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListReq) ProtoMessage() {} func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{65} + return fileDescriptor_group_befc34d716b1ae6c, []int{65} } func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) @@ -3456,7 +3456,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListResp) ProtoMessage() {} func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_d7fc3287ce9ff601, []int{66} + return fileDescriptor_group_befc34d716b1ae6c, []int{66} } func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) @@ -3490,6 +3490,106 @@ func (m *GetJoinedSuperGroupListResp) GetGroupList() []*sdk_ws.GroupInfo { return nil } +type GetSuperGroupsInfoReq struct { + GroupIDList []string `protobuf:"bytes,1,rep,name=GroupIDList" json:"GroupIDList,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} } +func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) } +func (*GetSuperGroupsInfoReq) ProtoMessage() {} +func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) { + return fileDescriptor_group_befc34d716b1ae6c, []int{67} +} +func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b) +} +func (m *GetSuperGroupsInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetSuperGroupsInfoReq.Marshal(b, m, deterministic) +} +func (dst *GetSuperGroupsInfoReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetSuperGroupsInfoReq.Merge(dst, src) +} +func (m *GetSuperGroupsInfoReq) XXX_Size() int { + return xxx_messageInfo_GetSuperGroupsInfoReq.Size(m) +} +func (m *GetSuperGroupsInfoReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetSuperGroupsInfoReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetSuperGroupsInfoReq proto.InternalMessageInfo + +func (m *GetSuperGroupsInfoReq) GetGroupIDList() []string { + if m != nil { + return m.GroupIDList + } + return nil +} + +func (m *GetSuperGroupsInfoReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *GetSuperGroupsInfoReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +type GetSuperGroupsInfoResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + GroupInfoList []*sdk_ws.GroupInfo `protobuf:"bytes,3,rep,name=GroupInfoList" json:"GroupInfoList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{} } +func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) } +func (*GetSuperGroupsInfoResp) ProtoMessage() {} +func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) { + return fileDescriptor_group_befc34d716b1ae6c, []int{68} +} +func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b) +} +func (m *GetSuperGroupsInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetSuperGroupsInfoResp.Marshal(b, m, deterministic) +} +func (dst *GetSuperGroupsInfoResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetSuperGroupsInfoResp.Merge(dst, src) +} +func (m *GetSuperGroupsInfoResp) XXX_Size() int { + return xxx_messageInfo_GetSuperGroupsInfoResp.Size(m) +} +func (m *GetSuperGroupsInfoResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetSuperGroupsInfoResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetSuperGroupsInfoResp proto.InternalMessageInfo + +func (m *GetSuperGroupsInfoResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + +func (m *GetSuperGroupsInfoResp) GetGroupInfoList() []*sdk_ws.GroupInfo { + if m != nil { + return m.GroupInfoList + } + return nil +} + func init() { proto.RegisterType((*CommonResp)(nil), "group.CommonResp") proto.RegisterType((*GroupAddMemberInfo)(nil), "group.GroupAddMemberInfo") @@ -3558,6 +3658,8 @@ func init() { proto.RegisterType((*SetGroupMemberNicknameResp)(nil), "group.SetGroupMemberNicknameResp") proto.RegisterType((*GetJoinedSuperGroupListReq)(nil), "group.GetJoinedSuperGroupListReq") proto.RegisterType((*GetJoinedSuperGroupListResp)(nil), "group.GetJoinedSuperGroupListResp") + proto.RegisterType((*GetSuperGroupsInfoReq)(nil), "group.GetSuperGroupsInfoReq") + proto.RegisterType((*GetSuperGroupsInfoResp)(nil), "group.GetSuperGroupsInfoResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -3602,6 +3704,7 @@ type GroupClient interface { CancelMuteGroup(ctx context.Context, in *CancelMuteGroupReq, opts ...grpc.CallOption) (*CancelMuteGroupResp, error) SetGroupMemberNickname(ctx context.Context, in *SetGroupMemberNicknameReq, opts ...grpc.CallOption) (*SetGroupMemberNicknameResp, error) GetJoinedSuperGroupList(ctx context.Context, in *GetJoinedSuperGroupListReq, opts ...grpc.CallOption) (*GetJoinedSuperGroupListResp, error) + GetSuperGroupsInfo(ctx context.Context, in *GetSuperGroupsInfoReq, opts ...grpc.CallOption) (*GetSuperGroupsInfoResp, error) } type groupClient struct { @@ -3891,6 +3994,15 @@ func (c *groupClient) GetJoinedSuperGroupList(ctx context.Context, in *GetJoined return out, nil } +func (c *groupClient) GetSuperGroupsInfo(ctx context.Context, in *GetSuperGroupsInfoReq, opts ...grpc.CallOption) (*GetSuperGroupsInfoResp, error) { + out := new(GetSuperGroupsInfoResp) + err := grpc.Invoke(ctx, "/group.group/GetSuperGroupsInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Group service type GroupServer interface { @@ -3925,6 +4037,7 @@ type GroupServer interface { CancelMuteGroup(context.Context, *CancelMuteGroupReq) (*CancelMuteGroupResp, error) SetGroupMemberNickname(context.Context, *SetGroupMemberNicknameReq) (*SetGroupMemberNicknameResp, error) GetJoinedSuperGroupList(context.Context, *GetJoinedSuperGroupListReq) (*GetJoinedSuperGroupListResp, error) + GetSuperGroupsInfo(context.Context, *GetSuperGroupsInfoReq) (*GetSuperGroupsInfoResp, error) } func RegisterGroupServer(s *grpc.Server, srv GroupServer) { @@ -4489,6 +4602,24 @@ func _Group_GetJoinedSuperGroupList_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _Group_GetSuperGroupsInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSuperGroupsInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServer).GetSuperGroupsInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/group.group/GetSuperGroupsInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServer).GetSuperGroupsInfo(ctx, req.(*GetSuperGroupsInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Group_serviceDesc = grpc.ServiceDesc{ ServiceName: "group.group", HandlerType: (*GroupServer)(nil), @@ -4617,150 +4748,157 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "GetJoinedSuperGroupList", Handler: _Group_GetJoinedSuperGroupList_Handler, }, + { + MethodName: "GetSuperGroupsInfo", + Handler: _Group_GetSuperGroupsInfo_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_d7fc3287ce9ff601) } - -var fileDescriptor_group_d7fc3287ce9ff601 = []byte{ - // 2190 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49, - 0x15, 0x57, 0xdb, 0x19, 0xff, 0x79, 0xf6, 0x64, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7, - 0x36, 0xac, 0x22, 0xfe, 0xd8, 0x22, 0x2b, 0xe5, 0xc0, 0x22, 0x42, 0xfc, 0x27, 0xf1, 0x24, 0x19, - 0x9b, 0xb4, 0xc3, 0x25, 0x12, 0x0a, 0xb3, 0xd3, 0xe5, 0xd1, 0xe0, 0x99, 0xee, 0x76, 0x57, 0x8f, - 0x03, 0x5c, 0x56, 0x5c, 0x56, 0x5a, 0xe0, 0x00, 0x42, 0xe2, 0x84, 0x04, 0x7b, 0x82, 0x03, 0x07, - 0x0e, 0x70, 0x46, 0x7c, 0x0a, 0xc4, 0xa7, 0xe0, 0x2b, 0xa0, 0xae, 0xaa, 0xae, 0xae, 0xae, 0xae, - 0x6e, 0x4f, 0x7a, 0x12, 0x72, 0x19, 0xa9, 0x5e, 0xbd, 0xea, 0xf7, 0x7b, 0xaf, 0xea, 0xbd, 0x7a, - 0xef, 0xd5, 0xc0, 0x6a, 0x3f, 0xf4, 0xc7, 0xc1, 0x2e, 0xfb, 0xdd, 0x09, 0x42, 0x3f, 0xf2, 0x51, - 0x8d, 0x0d, 0xec, 0xdb, 0x27, 0x01, 0xf1, 0x5e, 0xb5, 0x3b, 0xbb, 0xc1, 0x79, 0x7f, 0x97, 0xcd, - 0xec, 0x52, 0xf7, 0xfc, 0xd5, 0x6b, 0xba, 0xfb, 0x9a, 0x72, 0x4e, 0xfc, 0x3d, 0x80, 0x7d, 0x7f, - 0x34, 0xf2, 0x3d, 0x87, 0xd0, 0x00, 0xb5, 0x60, 0xfe, 0x30, 0x0c, 0xf7, 0x7d, 0x97, 0xb4, 0xac, - 0x6d, 0xeb, 0x6e, 0xcd, 0x49, 0x86, 0x68, 0x1d, 0xe6, 0x0e, 0xc3, 0xb0, 0x43, 0xfb, 0xad, 0x99, - 0x6d, 0xeb, 0xee, 0xa2, 0x23, 0x46, 0xf8, 0x09, 0xa0, 0xc7, 0xb1, 0xac, 0x87, 0xae, 0xdb, 0x21, - 0xa3, 0xcf, 0x48, 0xd8, 0xf6, 0xce, 0xfc, 0x98, 0xfb, 0x87, 0x94, 0x84, 0xed, 0x03, 0xf6, 0x99, - 0x45, 0x47, 0x8c, 0xd0, 0x16, 0x2c, 0x3a, 0xfe, 0x90, 0x3c, 0x23, 0x97, 0x64, 0xc8, 0x3e, 0x54, - 0x73, 0x52, 0x02, 0xfe, 0xaf, 0x05, 0xd7, 0xf7, 0x43, 0xd2, 0x8d, 0x08, 0xfb, 0xa4, 0x43, 0x2e, - 0xd0, 0x43, 0xb8, 0xde, 0xf6, 0x06, 0x11, 0xff, 0xf4, 0xb3, 0x01, 0x8d, 0x5a, 0xd6, 0xf6, 0xec, - 0xdd, 0xa5, 0x7b, 0x9b, 0x3b, 0x5c, 0xdd, 0xbc, 0x6c, 0x47, 0x5b, 0x80, 0xbe, 0x03, 0x8b, 0x8c, - 0x2b, 0x9e, 0x64, 0x32, 0x97, 0xee, 0x6d, 0xed, 0x50, 0x12, 0x5e, 0x92, 0xf0, 0x55, 0x37, 0x18, - 0xbc, 0x0a, 0xba, 0x61, 0x77, 0x44, 0x77, 0x24, 0x8f, 0x93, 0xb2, 0xa3, 0x6d, 0x58, 0x3a, 0x09, - 0x48, 0xd8, 0x8d, 0x06, 0xbe, 0xd7, 0x3e, 0x68, 0xcd, 0x32, 0x65, 0x54, 0x12, 0xb2, 0x61, 0xe1, - 0x24, 0x10, 0xba, 0x5e, 0x63, 0xd3, 0x72, 0xcc, 0x56, 0xbf, 0xf6, 0x48, 0x28, 0xa6, 0x6b, 0x62, - 0x75, 0x4a, 0xc2, 0x9f, 0x43, 0x23, 0xa3, 0x70, 0x95, 0x2d, 0xc8, 0x2a, 0x38, 0xfb, 0x46, 0x0a, - 0xe2, 0x10, 0x56, 0x1e, 0x93, 0x88, 0x8d, 0x29, 0x9b, 0x23, 0x17, 0x31, 0x6c, 0xce, 0x70, 0x20, - 0x0d, 0xbe, 0xe8, 0xa8, 0x24, 0xdd, 0x2c, 0x33, 0xe5, 0x66, 0x99, 0xcd, 0x9a, 0x05, 0x7f, 0x69, - 0xc1, 0xaa, 0x26, 0xb4, 0x92, 0xde, 0x7b, 0x50, 0x97, 0x8a, 0x30, 0xa4, 0xb3, 0xec, 0x68, 0x94, - 0xeb, 0x9e, 0x5d, 0x82, 0x7f, 0x65, 0x41, 0xe3, 0x54, 0x60, 0x49, 0xf4, 0xcf, 0xd8, 0xd3, 0x7a, - 0xb3, 0x03, 0xa3, 0xea, 0x3d, 0x63, 0x38, 0x0e, 0xa5, 0x87, 0x09, 0x1f, 0xc2, 0x4a, 0x16, 0x0c, - 0x0d, 0xd0, 0xb7, 0x55, 0x07, 0x15, 0x70, 0x56, 0xc5, 0xe9, 0x4f, 0x27, 0x1c, 0x85, 0x09, 0xff, - 0x1c, 0xec, 0xc4, 0xbe, 0x0f, 0x83, 0x60, 0x38, 0xe8, 0xb1, 0xef, 0xc7, 0xfa, 0xc6, 0xea, 0xa9, - 0x10, 0xad, 0x72, 0x88, 0x86, 0x8d, 0xbd, 0x05, 0xf0, 0x28, 0xf4, 0x47, 0x99, 0xad, 0x55, 0x28, - 0xf8, 0x0f, 0x16, 0xdc, 0x2c, 0x14, 0x5e, 0x69, 0x9b, 0x9f, 0xc2, 0x4a, 0x12, 0x0e, 0xc6, 0x84, - 0x46, 0xca, 0x4e, 0x7f, 0x58, 0xb4, 0x2b, 0x82, 0xd5, 0xc9, 0x2d, 0xc4, 0x11, 0x6c, 0x3d, 0x26, - 0x51, 0x8c, 0xd5, 0x21, 0x17, 0x06, 0xe3, 0x14, 0x05, 0xae, 0xe9, 0xf6, 0xf5, 0x8f, 0x16, 0x7c, - 0x50, 0x22, 0xb6, 0xd2, 0x2e, 0x1b, 0xed, 0x32, 0x53, 0xd5, 0x2e, 0xff, 0xb4, 0xa0, 0xf9, 0x22, - 0xec, 0x7a, 0xf4, 0x8c, 0x84, 0x6c, 0x92, 0x45, 0xa9, 0xd8, 0x22, 0x2d, 0x98, 0x17, 0xae, 0x2f, - 0x4c, 0x92, 0x0c, 0xd1, 0xc7, 0x70, 0xfd, 0x64, 0xe8, 0xaa, 0x11, 0x8e, 0x5b, 0x46, 0xa3, 0xc6, - 0x7c, 0xc7, 0xe4, 0xb5, 0xca, 0xc7, 0x4d, 0xa4, 0x51, 0x75, 0x3b, 0x5e, 0x2b, 0x8f, 0x2a, 0x35, - 0x2d, 0xaa, 0x3c, 0x85, 0x75, 0x93, 0x02, 0xd5, 0x3c, 0xe8, 0x0b, 0x0b, 0x96, 0x9f, 0xf8, 0x03, - 0x4f, 0xde, 0x43, 0xc5, 0x56, 0xb8, 0x05, 0xe0, 0x90, 0x8b, 0x0e, 0xa1, 0xb4, 0xdb, 0x27, 0xc2, - 0x02, 0x0a, 0xa5, 0x2c, 0x12, 0x5e, 0xad, 0x31, 0xde, 0x83, 0xba, 0x82, 0xa3, 0x9a, 0x32, 0xff, - 0x89, 0x5d, 0x52, 0xf3, 0xc7, 0x78, 0xc2, 0xf7, 0x28, 0x11, 0xf1, 0x5e, 0x45, 0x61, 0x95, 0xdb, - 0x5d, 0x3f, 0xfd, 0x8a, 0x65, 0x66, 0x73, 0x96, 0x51, 0x42, 0xc5, 0x35, 0x3d, 0x54, 0xc4, 0xf3, - 0x47, 0x5d, 0xcf, 0x1d, 0x12, 0x37, 0x76, 0x7a, 0xbe, 0x9f, 0x0a, 0x05, 0x61, 0x58, 0xe6, 0x23, - 0x87, 0xd0, 0xf1, 0x30, 0x6a, 0xcd, 0xb1, 0x78, 0x91, 0xa1, 0xe1, 0xe7, 0xb0, 0x55, 0xac, 0x5a, - 0x35, 0x73, 0x9d, 0xc1, 0xf2, 0xf3, 0xf1, 0x20, 0x9a, 0x60, 0xeb, 0xa7, 0xbb, 0x06, 0xf7, 0xa0, - 0xae, 0xc8, 0xa9, 0x86, 0xf5, 0x2b, 0x0b, 0x9a, 0x49, 0xb4, 0x4d, 0x53, 0x9e, 0x72, 0xd4, 0x53, - 0x85, 0xb2, 0x38, 0x40, 0x3e, 0x1a, 0x0c, 0x23, 0x12, 0xb2, 0x0d, 0xad, 0x39, 0x62, 0x14, 0xcb, - 0x3b, 0x26, 0x3f, 0x8d, 0x4e, 0xc9, 0x05, 0xdb, 0xc9, 0x9a, 0x93, 0x0c, 0xf1, 0x5f, 0x2d, 0x58, - 0x37, 0x61, 0xac, 0x74, 0x19, 0x3c, 0x02, 0x18, 0xa5, 0xb9, 0x20, 0xbf, 0x06, 0x3e, 0x2e, 0x0a, - 0x77, 0x5c, 0xda, 0xa3, 0xf1, 0x70, 0xc8, 0x6e, 0x53, 0x65, 0x65, 0x2c, 0xd9, 0x13, 0x70, 0xb9, - 0x1e, 0xc9, 0x10, 0xff, 0x26, 0x07, 0x57, 0x26, 0x46, 0xa5, 0x41, 0x40, 0x81, 0x35, 0xc3, 0x32, - 0x26, 0x55, 0xdc, 0x74, 0x41, 0xe0, 0x77, 0x16, 0x6c, 0x18, 0x21, 0xbd, 0x4f, 0x13, 0xe2, 0xbf, - 0x59, 0x80, 0x9e, 0x0e, 0x7a, 0xe7, 0x0a, 0x5f, 0xb9, 0x91, 0xbe, 0x0e, 0x2b, 0x31, 0x3f, 0x71, - 0xb9, 0xe2, 0x8a, 0xa9, 0x72, 0xf4, 0x18, 0xbc, 0x43, 0xba, 0xd4, 0xf7, 0x84, 0xb9, 0xc4, 0x48, - 0x37, 0x56, 0xad, 0xdc, 0xe5, 0xe6, 0x34, 0x97, 0xfb, 0x14, 0x16, 0xdb, 0xee, 0x3d, 0x1e, 0x3a, - 0x0a, 0xaf, 0x7a, 0x26, 0x9a, 0x05, 0x1c, 0x5e, 0xa0, 0x88, 0x11, 0xfe, 0x1c, 0xd6, 0x72, 0xea, - 0x56, 0xda, 0x80, 0xfb, 0x50, 0x97, 0x28, 0x94, 0x3d, 0x58, 0x11, 0xae, 0x2e, 0xe7, 0x9c, 0x2c, - 0x1b, 0x1e, 0x33, 0x5f, 0x8f, 0xaf, 0x03, 0xe2, 0x32, 0x14, 0x89, 0xaf, 0x67, 0x03, 0xad, 0x95, - 0x0b, 0xb4, 0xdb, 0xb0, 0xe4, 0xe7, 0xe3, 0x94, 0x3f, 0x61, 0x9c, 0xfa, 0x82, 0x3b, 0x44, 0x4e, - 0xee, 0x54, 0xb5, 0xca, 0xc4, 0xf9, 0x7a, 0xca, 0x8e, 0xff, 0x6e, 0xc1, 0x8d, 0xb6, 0x77, 0x39, - 0x88, 0x48, 0x8c, 0xec, 0x85, 0x2f, 0x23, 0xf4, 0xd5, 0x71, 0xb8, 0xf8, 0x92, 0x4a, 0x0f, 0xda, - 0xb5, 0xcc, 0x41, 0xfb, 0x26, 0xac, 0x72, 0x59, 0xea, 0x69, 0xad, 0xb1, 0xd3, 0x9a, 0x9f, 0x28, - 0x3d, 0x74, 0xbf, 0xb0, 0xa0, 0x69, 0x80, 0xfd, 0x7f, 0x3d, 0x3a, 0x1e, 0xdc, 0x90, 0x49, 0xf9, - 0x70, 0x38, 0x89, 0xb3, 0x4e, 0x97, 0xf0, 0xfe, 0x56, 0xb9, 0x97, 0x14, 0x81, 0xef, 0x35, 0x5e, - 0xfd, 0xde, 0x82, 0x85, 0xfd, 0xce, 0x29, 0x63, 0x9b, 0xaa, 0xc6, 0xbb, 0x0b, 0x0d, 0x2e, 0xab, - 0x4b, 0x23, 0x12, 0x1e, 0x77, 0x47, 0x49, 0xda, 0xa7, 0x93, 0xd1, 0x1d, 0x51, 0xa1, 0x72, 0x52, - 0xdb, 0x15, 0xa6, 0xca, 0x12, 0xe3, 0xf0, 0xbe, 0x94, 0x18, 0x2b, 0xde, 0x94, 0x2d, 0x81, 0x8d, - 0x7d, 0x99, 0x6f, 0x4b, 0x4a, 0x40, 0x07, 0x00, 0x3f, 0xe8, 0xf6, 0x07, 0x1e, 0x33, 0xb5, 0xe8, - 0x67, 0xdc, 0x31, 0x40, 0x17, 0xd9, 0x7d, 0xca, 0xeb, 0x28, 0xeb, 0x26, 0xd8, 0xc2, 0xaf, 0x2c, - 0x58, 0x4e, 0x51, 0xd1, 0x00, 0x7d, 0x0b, 0x16, 0x13, 0xf3, 0x51, 0xd1, 0x85, 0x69, 0x24, 0xd9, - 0x89, 0xa0, 0x3b, 0x29, 0xc7, 0x5b, 0xc2, 0x29, 0x6d, 0x31, 0x1e, 0x51, 0x86, 0xb2, 0xe6, 0xa4, - 0x04, 0x7c, 0x99, 0x42, 0xa4, 0xb1, 0xe5, 0xb2, 0x32, 0xad, 0xb7, 0x63, 0x9b, 0x7c, 0x38, 0xc1, - 0x7f, 0xb2, 0xa0, 0xae, 0x08, 0x7e, 0x5f, 0xc6, 0xb1, 0x61, 0x21, 0xb1, 0x85, 0xb0, 0x8d, 0x1c, - 0xe3, 0x93, 0xb4, 0xc7, 0x62, 0x70, 0x77, 0x37, 0xeb, 0xee, 0xee, 0x04, 0x3a, 0x9f, 0x43, 0x93, - 0x0f, 0x79, 0xaf, 0xea, 0x34, 0xea, 0x46, 0x63, 0x5a, 0xfe, 0xd1, 0x75, 0x98, 0xe3, 0x6c, 0xc9, - 0x4d, 0xca, 0x47, 0x13, 0x1c, 0xbe, 0x16, 0xac, 0x9b, 0x84, 0xf1, 0xca, 0x0c, 0x89, 0x29, 0x56, - 0x4e, 0xfb, 0x43, 0x72, 0x25, 0x08, 0x16, 0xb6, 0xdc, 0x24, 0xac, 0xf0, 0x51, 0xb6, 0x15, 0x39, - 0xab, 0xb5, 0x22, 0x27, 0x48, 0xca, 0x9a, 0xb0, 0x96, 0xc3, 0x41, 0x03, 0xfc, 0x0c, 0xae, 0x1f, - 0x90, 0x21, 0x51, 0x5a, 0x98, 0xd3, 0x18, 0x7d, 0x15, 0x1a, 0x99, 0xaf, 0xd1, 0x00, 0x77, 0xa0, - 0x91, 0x6c, 0xec, 0xde, 0xcf, 0xda, 0xee, 0xb4, 0x12, 0x1e, 0xa4, 0x0d, 0x40, 0xfe, 0x39, 0x1a, - 0xa0, 0x6f, 0xa4, 0x81, 0x52, 0x38, 0x51, 0xee, 0x2c, 0x4b, 0x06, 0xfc, 0x8f, 0x5c, 0x09, 0x42, - 0xf7, 0x3b, 0xa7, 0xe5, 0xb0, 0x6c, 0x58, 0x88, 0x8d, 0xa6, 0x84, 0x4e, 0x39, 0xd6, 0x5c, 0x63, - 0xf6, 0xed, 0xf8, 0xb0, 0x61, 0xff, 0xfe, 0x95, 0xcf, 0xf3, 0x19, 0x6e, 0x1a, 0xa0, 0xef, 0xc3, - 0x3c, 0xbf, 0x37, 0x12, 0x57, 0x9e, 0xf4, 0xba, 0x49, 0x96, 0xa1, 0x43, 0x83, 0x7f, 0x7f, 0xcd, - 0xa8, 0x04, 0xaf, 0x55, 0x0b, 0xb4, 0xb8, 0x05, 0xc0, 0x25, 0x28, 0xe1, 0x4f, 0xa1, 0xe0, 0x5f, - 0x5b, 0xd0, 0x72, 0xc8, 0xc8, 0xbf, 0x24, 0x6f, 0x64, 0xfe, 0x16, 0xcc, 0x73, 0x27, 0xa0, 0x22, - 0xff, 0x4e, 0x86, 0x6f, 0xd4, 0xef, 0x76, 0xb5, 0x7e, 0xb7, 0x8b, 0x3b, 0xb0, 0x59, 0x80, 0x86, - 0x5f, 0xfc, 0x74, 0xdc, 0xeb, 0x11, 0x4a, 0x45, 0x47, 0x39, 0x19, 0xc6, 0x1e, 0x7a, 0xd6, 0x1d, - 0x0c, 0x89, 0x2b, 0xd0, 0x88, 0x11, 0xfe, 0xd2, 0x82, 0xe6, 0x43, 0xd7, 0x7d, 0x17, 0xaa, 0xb9, - 0x79, 0xd5, 0xdc, 0x52, 0xd5, 0x9e, 0xc0, 0xba, 0x09, 0x4a, 0x25, 0xbd, 0x06, 0xd0, 0x38, 0x18, - 0xd0, 0xd1, 0x80, 0x52, 0x19, 0x23, 0x6c, 0x58, 0xf0, 0xb5, 0x9e, 0xac, 0x1f, 0x4c, 0x9c, 0xbd, - 0xb7, 0x60, 0xbe, 0x9f, 0xcd, 0x6e, 0xc5, 0x10, 0x1f, 0xc2, 0x4a, 0x56, 0x14, 0x6f, 0x33, 0xf4, - 0x26, 0x69, 0x33, 0xa4, 0x4c, 0xf8, 0x2f, 0x16, 0xa0, 0xce, 0x38, 0x22, 0xda, 0x75, 0xf2, 0x8e, - 0x50, 0xc7, 0x86, 0x1b, 0xab, 0x4d, 0x23, 0x31, 0x42, 0x18, 0x96, 0x47, 0xe3, 0x88, 0xb8, 0xa7, - 0xa4, 0xe7, 0x7b, 0x2e, 0x65, 0xd5, 0x5f, 0xdd, 0xc9, 0xd0, 0xf0, 0x11, 0xac, 0xe5, 0x90, 0x56, - 0x53, 0xfa, 0x97, 0x16, 0xb4, 0xf6, 0xbb, 0x5e, 0x8f, 0x0c, 0xdf, 0xbf, 0xea, 0xf8, 0x18, 0x36, - 0x0b, 0xb0, 0x54, 0x53, 0xee, 0x0c, 0x96, 0xe5, 0x97, 0xde, 0xe5, 0x01, 0xdc, 0x83, 0xba, 0x22, - 0xa7, 0x1a, 0xd6, 0x21, 0x20, 0x4d, 0xf7, 0x77, 0x89, 0xf8, 0x08, 0xd6, 0x72, 0xd2, 0xaa, 0xe1, - 0xfe, 0xb3, 0x05, 0x9b, 0xa7, 0x99, 0x1b, 0xe6, 0x78, 0xd0, 0x3b, 0xf7, 0xba, 0xa3, 0x24, 0x63, - 0xe9, 0x67, 0x4b, 0xaf, 0x7e, 0x5a, 0x7a, 0x79, 0x82, 0x31, 0xb9, 0x1d, 0x93, 0x71, 0x46, 0xeb, - 0xd9, 0x72, 0xad, 0xaf, 0xe5, 0xb5, 0x4e, 0x4f, 0x57, 0x2d, 0x73, 0xba, 0x4e, 0xc0, 0x2e, 0x02, - 0x5a, 0xad, 0x2f, 0x19, 0xb2, 0x17, 0x28, 0xde, 0x32, 0x38, 0x1d, 0x07, 0xa2, 0x25, 0x9f, 0xf4, - 0x2b, 0x34, 0xa0, 0x56, 0x19, 0xd0, 0x99, 0x4c, 0x04, 0x28, 0x51, 0x3f, 0xbe, 0x0c, 0x6f, 0x16, - 0x0a, 0xad, 0xb4, 0x83, 0xd3, 0x74, 0x2b, 0xee, 0xfd, 0x1b, 0x01, 0x7f, 0x85, 0x47, 0xdf, 0x85, - 0xa5, 0x5e, 0xfa, 0xc8, 0x8b, 0x9a, 0x89, 0xcc, 0xcc, 0x4b, 0xb7, 0xbd, 0x6e, 0x22, 0xd3, 0x00, - 0xdd, 0x87, 0xc5, 0x9f, 0x24, 0x2f, 0x00, 0x68, 0x4d, 0x30, 0xa9, 0x6f, 0x13, 0xf6, 0x8d, 0x3c, - 0x91, 0xaf, 0xbb, 0x48, 0xda, 0xcb, 0x72, 0x9d, 0xda, 0xd8, 0x96, 0xeb, 0xb2, 0x5d, 0xe8, 0x3d, - 0xa8, 0xf7, 0xd5, 0xc7, 0x59, 0xb4, 0x91, 0x3c, 0xb5, 0x6b, 0xef, 0xc4, 0x76, 0xcb, 0x3c, 0x41, - 0x03, 0xf4, 0x00, 0x96, 0xa9, 0xf2, 0x8e, 0x89, 0x12, 0xdd, 0xb4, 0x97, 0x56, 0x7b, 0xc3, 0x48, - 0xa7, 0x01, 0xfa, 0x31, 0x6c, 0xf4, 0xcd, 0x8f, 0x88, 0xe8, 0xb6, 0x26, 0x35, 0xff, 0x88, 0x67, - 0xe3, 0xab, 0x58, 0x68, 0x80, 0xce, 0x60, 0xb3, 0x5f, 0xf4, 0x22, 0x87, 0x3e, 0x4a, 0x3f, 0x50, - 0xf8, 0x54, 0x68, 0xdf, 0xb9, 0x9a, 0x89, 0x06, 0xe8, 0x39, 0xa0, 0x28, 0xf7, 0x2c, 0x85, 0xb6, - 0xc4, 0x5a, 0xe3, 0x93, 0x9b, 0xfd, 0x41, 0xc9, 0x2c, 0x0d, 0x50, 0x0f, 0x5a, 0xfd, 0x82, 0x37, - 0x0f, 0x84, 0x33, 0xff, 0x8b, 0x30, 0xbe, 0xf7, 0xd8, 0x1f, 0x5d, 0xc9, 0xc3, 0x71, 0xf7, 0x73, - 0x4d, 0x7b, 0x89, 0xdb, 0xf8, 0xe6, 0x20, 0x71, 0x17, 0x74, 0xfb, 0x5f, 0xc0, 0x5a, 0x3f, 0xdf, - 0xc5, 0x46, 0xe6, 0x55, 0xf2, 0x94, 0xdd, 0x2a, 0x9b, 0xa6, 0x01, 0x3a, 0x82, 0xc6, 0x79, 0xb6, - 0x2d, 0x8b, 0x92, 0x3f, 0x87, 0xe4, 0xbb, 0xd3, 0xb6, 0x5d, 0x34, 0x25, 0x55, 0xd6, 0xfa, 0x9c, - 0xaa, 0xca, 0xf9, 0xd6, 0xab, 0xaa, 0xb2, 0xa9, 0x41, 0x7a, 0x0c, 0xab, 0x03, 0xbd, 0xf5, 0x87, - 0x6e, 0x26, 0xdd, 0x3a, 0x43, 0x2f, 0xd3, 0xde, 0x2a, 0x9e, 0xe4, 0xdf, 0xeb, 0xeb, 0x6d, 0x35, - 0xf9, 0x3d, 0x53, 0x87, 0xcf, 0xde, 0x2a, 0x9e, 0xe4, 0x8e, 0xaa, 0x56, 0x7f, 0xd2, 0x51, 0xb5, - 0x0a, 0xd3, 0xde, 0x30, 0xd2, 0x69, 0x80, 0x3e, 0x81, 0x85, 0x84, 0x86, 0x90, 0xc6, 0x14, 0x2f, - 0x5c, 0xcb, 0xd1, 0x78, 0x68, 0x92, 0x31, 0x03, 0xe9, 0x1c, 0x54, 0x0d, 0x4d, 0xd9, 0x26, 0xcb, - 0x73, 0x59, 0xfa, 0x2b, 0x5d, 0x01, 0xb9, 0x41, 0xc6, 0xee, 0x84, 0xdc, 0x20, 0x73, 0x3b, 0x21, - 0x3e, 0x3d, 0x5a, 0x15, 0x2f, 0x4f, 0x4f, 0xbe, 0xcb, 0x20, 0x4f, 0x8f, 0xa1, 0xf0, 0x8f, 0xa3, - 0xbc, 0x52, 0xaa, 0xcb, 0x28, 0x9f, 0x6d, 0x06, 0xc8, 0x28, 0xaf, 0x55, 0xf5, 0xb1, 0x6a, 0xf9, - 0x62, 0xb4, 0xc0, 0xdd, 0x44, 0x15, 0x54, 0xe0, 0x6e, 0xb2, 0x30, 0x79, 0x09, 0x4d, 0x63, 0x35, - 0x86, 0x3e, 0x14, 0xeb, 0x8a, 0x2a, 0x47, 0x7b, 0xbb, 0x9c, 0x81, 0xc3, 0xcd, 0x97, 0x43, 0x12, - 0xae, 0xb1, 0x68, 0x93, 0x70, 0x0b, 0xea, 0xa8, 0x07, 0xb0, 0xac, 0x96, 0x2a, 0xf2, 0x28, 0x6a, - 0xa5, 0x92, 0x3c, 0x8a, 0xb9, 0xba, 0xe6, 0x08, 0x1a, 0x5a, 0x72, 0x2c, 0xb7, 0x32, 0x9f, 0xc0, - 0xcb, 0xad, 0x34, 0xe5, 0xd3, 0x2f, 0xa1, 0x69, 0x4c, 0xb6, 0xa5, 0xe5, 0x8a, 0xca, 0x02, 0x69, - 0xb9, 0xe2, 0x5c, 0xfd, 0x3e, 0x2c, 0x4a, 0xb2, 0x3c, 0xfb, 0x6a, 0x62, 0x2b, 0xcf, 0x7e, 0x36, - 0xff, 0x3c, 0x82, 0x86, 0xf6, 0x51, 0xa9, 0x5d, 0x3e, 0x39, 0x96, 0xda, 0x99, 0x32, 0xd9, 0x1f, - 0xc1, 0xba, 0x39, 0xd9, 0x43, 0xdb, 0xda, 0x75, 0x9c, 0x4b, 0x5a, 0xed, 0xdb, 0x57, 0x70, 0xf0, - 0xab, 0xbb, 0x20, 0x0b, 0x53, 0xaf, 0xee, 0x82, 0xd4, 0x50, 0xbd, 0xba, 0x8b, 0x12, 0xb9, 0xbd, - 0xc6, 0xcb, 0xfa, 0x0e, 0xff, 0xb7, 0xe3, 0xa7, 0xec, 0xf7, 0xb3, 0x39, 0xf6, 0x57, 0xc6, 0x4f, - 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x96, 0x91, 0x7b, 0xd5, 0x09, 0x29, 0x00, 0x00, +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_befc34d716b1ae6c) } + +var fileDescriptor_group_befc34d716b1ae6c = []byte{ + // 2228 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5f, 0x6f, 0x1c, 0x49, + 0x11, 0xd7, 0xd8, 0x5e, 0xff, 0x29, 0xdb, 0x59, 0xbb, 0x7d, 0x6b, 0xaf, 0x27, 0xbe, 0x9c, 0x33, + 0x17, 0x4e, 0x11, 0x7f, 0x6c, 0x91, 0x93, 0xf2, 0xc0, 0x21, 0x42, 0xfc, 0x27, 0xf1, 0x26, 0x59, + 0x9b, 0x8c, 0xc3, 0x4b, 0x24, 0x14, 0xf6, 0x76, 0xda, 0xab, 0xc5, 0xbb, 0x33, 0xe3, 0xe9, 0x59, + 0x1b, 0x78, 0x39, 0xf1, 0x72, 0xd2, 0x01, 0x12, 0x20, 0x24, 0x9e, 0x90, 0xe0, 0x9e, 0x40, 0x88, + 0x07, 0x1e, 0xe0, 0x19, 0xf1, 0x31, 0xf8, 0x14, 0x7c, 0x05, 0x34, 0xdd, 0x3d, 0x3d, 0x3d, 0xdd, + 0x3d, 0xe3, 0xcd, 0x6c, 0x72, 0x79, 0x59, 0xa9, 0xab, 0xab, 0xa7, 0x7e, 0x55, 0xdd, 0x55, 0x5d, + 0x55, 0xbd, 0xb0, 0xda, 0x8b, 0x82, 0x51, 0xb8, 0x4b, 0x7f, 0x77, 0xc2, 0x28, 0x88, 0x03, 0x54, + 0xa3, 0x03, 0xfb, 0xf6, 0x49, 0x88, 0xfd, 0x57, 0xad, 0xf6, 0x6e, 0x78, 0xde, 0xdb, 0xa5, 0x33, + 0xbb, 0xc4, 0x3b, 0x7f, 0x75, 0x45, 0x76, 0xaf, 0x08, 0xe3, 0x74, 0xbe, 0x07, 0xb0, 0x1f, 0x0c, + 0x87, 0x81, 0xef, 0x62, 0x12, 0xa2, 0x26, 0xcc, 0x1d, 0x46, 0xd1, 0x7e, 0xe0, 0xe1, 0xa6, 0xb5, + 0x6d, 0xdd, 0xad, 0xb9, 0xe9, 0x10, 0xad, 0xc3, 0xec, 0x61, 0x14, 0xb5, 0x49, 0xaf, 0x39, 0xb5, + 0x6d, 0xdd, 0x5d, 0x70, 0xf9, 0xc8, 0x79, 0x02, 0xe8, 0x71, 0x22, 0xeb, 0xa1, 0xe7, 0xb5, 0xf1, + 0xf0, 0x53, 0x1c, 0xb5, 0xfc, 0xb3, 0x20, 0xe1, 0xfe, 0x21, 0xc1, 0x51, 0xeb, 0x80, 0x7e, 0x66, + 0xc1, 0xe5, 0x23, 0xb4, 0x05, 0x0b, 0x6e, 0x30, 0xc0, 0xcf, 0xf0, 0x25, 0x1e, 0xd0, 0x0f, 0xd5, + 0xdc, 0x8c, 0xe0, 0xfc, 0xcf, 0x82, 0x1b, 0xfb, 0x11, 0xee, 0xc4, 0x98, 0x7e, 0xd2, 0xc5, 0x17, + 0xe8, 0x21, 0xdc, 0x68, 0xf9, 0xfd, 0x98, 0x7d, 0xfa, 0x59, 0x9f, 0xc4, 0x4d, 0x6b, 0x7b, 0xfa, + 0xee, 0xe2, 0xbd, 0xcd, 0x1d, 0xa6, 0xae, 0x2e, 0xdb, 0x55, 0x16, 0xa0, 0xef, 0xc0, 0x02, 0xe5, + 0x4a, 0x26, 0xa9, 0xcc, 0xc5, 0x7b, 0x5b, 0x3b, 0x04, 0x47, 0x97, 0x38, 0x7a, 0xd5, 0x09, 0xfb, + 0xaf, 0xc2, 0x4e, 0xd4, 0x19, 0x92, 0x1d, 0xc1, 0xe3, 0x66, 0xec, 0x68, 0x1b, 0x16, 0x4f, 0x42, + 0x1c, 0x75, 0xe2, 0x7e, 0xe0, 0xb7, 0x0e, 0x9a, 0xd3, 0x54, 0x19, 0x99, 0x84, 0x6c, 0x98, 0x3f, + 0x09, 0xb9, 0xae, 0x33, 0x74, 0x5a, 0x8c, 0xe9, 0xea, 0x2b, 0x1f, 0x47, 0x7c, 0xba, 0xc6, 0x57, + 0x67, 0x24, 0xe7, 0x33, 0xa8, 0xe7, 0x14, 0xae, 0xb2, 0x05, 0x79, 0x05, 0xa7, 0x5f, 0x4b, 0x41, + 0x27, 0x82, 0x95, 0xc7, 0x38, 0xa6, 0x63, 0x42, 0xe7, 0xf0, 0x45, 0x02, 0x9b, 0x31, 0x1c, 0x08, + 0x83, 0x2f, 0xb8, 0x32, 0x49, 0x35, 0xcb, 0x54, 0xb9, 0x59, 0xa6, 0xf3, 0x66, 0x71, 0xbe, 0xb0, + 0x60, 0x55, 0x11, 0x5a, 0x49, 0xef, 0x3d, 0x58, 0x16, 0x8a, 0x50, 0xa4, 0xd3, 0xf4, 0x68, 0x94, + 0xeb, 0x9e, 0x5f, 0xe2, 0xfc, 0xca, 0x82, 0xfa, 0x29, 0xc7, 0x92, 0xea, 0x9f, 0xb3, 0xa7, 0xf5, + 0x7a, 0x07, 0x46, 0xd6, 0x7b, 0xca, 0x70, 0x1c, 0x4a, 0x0f, 0x93, 0x73, 0x08, 0x2b, 0x79, 0x30, + 0x24, 0x44, 0xdf, 0x96, 0x1d, 0x94, 0xc3, 0x59, 0xe5, 0xa7, 0x3f, 0x9b, 0x70, 0x25, 0x26, 0xe7, + 0xe7, 0x60, 0xa7, 0xf6, 0x7d, 0x18, 0x86, 0x83, 0x7e, 0x97, 0x7e, 0x3f, 0xd1, 0x37, 0x51, 0x4f, + 0x86, 0x68, 0x95, 0x43, 0x34, 0x6c, 0xec, 0x2d, 0x80, 0x47, 0x51, 0x30, 0xcc, 0x6d, 0xad, 0x44, + 0x71, 0xfe, 0x68, 0xc1, 0xcd, 0x42, 0xe1, 0x95, 0xb6, 0xf9, 0x29, 0xac, 0xa4, 0xe1, 0x60, 0x84, + 0x49, 0x2c, 0xed, 0xf4, 0x07, 0x45, 0xbb, 0xc2, 0x59, 0x5d, 0x6d, 0xa1, 0x13, 0xc3, 0xd6, 0x63, + 0x1c, 0x27, 0x58, 0x5d, 0x7c, 0x61, 0x30, 0x4e, 0x51, 0xe0, 0x9a, 0x6c, 0x5f, 0xff, 0x64, 0xc1, + 0xfb, 0x25, 0x62, 0x2b, 0xed, 0xb2, 0xd1, 0x2e, 0x53, 0x55, 0xed, 0xf2, 0x6f, 0x0b, 0x1a, 0x2f, + 0xa2, 0x8e, 0x4f, 0xce, 0x70, 0x44, 0x27, 0x69, 0x94, 0x4a, 0x2c, 0xd2, 0x84, 0x39, 0xee, 0xfa, + 0xdc, 0x24, 0xe9, 0x10, 0x7d, 0x04, 0x37, 0x4e, 0x06, 0x9e, 0x1c, 0xe1, 0x98, 0x65, 0x14, 0x6a, + 0xc2, 0x77, 0x8c, 0xaf, 0x64, 0x3e, 0x66, 0x22, 0x85, 0xaa, 0xda, 0x71, 0xa6, 0x3c, 0xaa, 0xd4, + 0x94, 0xa8, 0xf2, 0x14, 0xd6, 0x4d, 0x0a, 0x54, 0xf3, 0xa0, 0xcf, 0x2d, 0x58, 0x7a, 0x12, 0xf4, + 0x7d, 0x71, 0x0f, 0x15, 0x5b, 0xe1, 0x16, 0x80, 0x8b, 0x2f, 0xda, 0x98, 0x90, 0x4e, 0x0f, 0x73, + 0x0b, 0x48, 0x94, 0xb2, 0x48, 0x78, 0xbd, 0xc6, 0xce, 0x1e, 0x2c, 0x4b, 0x38, 0xaa, 0x29, 0xf3, + 0xdf, 0xc4, 0x25, 0x15, 0x7f, 0x4c, 0x26, 0x02, 0x9f, 0x60, 0x1e, 0xef, 0x65, 0x14, 0x56, 0xb9, + 0xdd, 0xd5, 0xd3, 0x2f, 0x59, 0x66, 0x5a, 0xb3, 0x8c, 0x14, 0x2a, 0x66, 0xd4, 0x50, 0x91, 0xcc, + 0x1f, 0x75, 0x7c, 0x6f, 0x80, 0xbd, 0xc4, 0xe9, 0xd9, 0x7e, 0x4a, 0x14, 0xe4, 0xc0, 0x12, 0x1b, + 0xb9, 0x98, 0x8c, 0x06, 0x71, 0x73, 0x96, 0xc6, 0x8b, 0x1c, 0xcd, 0x79, 0x0e, 0x5b, 0xc5, 0xaa, + 0x55, 0x33, 0xd7, 0x19, 0x2c, 0x3d, 0x1f, 0xf5, 0xe3, 0x31, 0xb6, 0x7e, 0xb2, 0x6b, 0x70, 0x0f, + 0x96, 0x25, 0x39, 0xd5, 0xb0, 0x7e, 0x69, 0x41, 0x23, 0x8d, 0xb6, 0x59, 0xca, 0x53, 0x8e, 0x7a, + 0xa2, 0x50, 0x96, 0x04, 0xc8, 0x47, 0xfd, 0x41, 0x8c, 0x23, 0xba, 0xa1, 0x35, 0x97, 0x8f, 0x12, + 0x79, 0xc7, 0xf8, 0xa7, 0xf1, 0x29, 0xbe, 0xa0, 0x3b, 0x59, 0x73, 0xd3, 0xa1, 0xf3, 0x77, 0x0b, + 0xd6, 0x4d, 0x18, 0x2b, 0x5d, 0x06, 0x8f, 0x00, 0x86, 0x59, 0x2e, 0xc8, 0xae, 0x81, 0x8f, 0x8a, + 0xc2, 0x1d, 0x93, 0xf6, 0x68, 0x34, 0x18, 0xd0, 0xdb, 0x54, 0x5a, 0x99, 0x48, 0xf6, 0x39, 0x5c, + 0xa6, 0x47, 0x3a, 0x74, 0x7e, 0xab, 0xc1, 0x15, 0x89, 0x51, 0x69, 0x10, 0x90, 0x60, 0x4d, 0xd1, + 0x8c, 0x49, 0x16, 0x37, 0x59, 0x10, 0xf8, 0xbd, 0x05, 0x1b, 0x46, 0x48, 0xef, 0xd2, 0x84, 0xce, + 0x3f, 0x2c, 0x40, 0x4f, 0xfb, 0xdd, 0x73, 0x89, 0xaf, 0xdc, 0x48, 0x5f, 0x87, 0x95, 0x84, 0x1f, + 0x7b, 0x4c, 0x71, 0xc9, 0x54, 0x1a, 0x3d, 0x01, 0xef, 0xe2, 0x0e, 0x09, 0x7c, 0x6e, 0x2e, 0x3e, + 0x52, 0x8d, 0x55, 0x2b, 0x77, 0xb9, 0x59, 0xc5, 0xe5, 0x3e, 0x81, 0x85, 0x96, 0x77, 0x8f, 0x85, + 0x8e, 0xc2, 0xab, 0x9e, 0x8a, 0xa6, 0x01, 0x87, 0x15, 0x28, 0x7c, 0xe4, 0x7c, 0x06, 0x6b, 0x9a, + 0xba, 0x95, 0x36, 0xe0, 0x3e, 0x2c, 0x0b, 0x14, 0xd2, 0x1e, 0xac, 0x70, 0x57, 0x17, 0x73, 0x6e, + 0x9e, 0xcd, 0x19, 0x51, 0x5f, 0x4f, 0xae, 0x03, 0xec, 0x51, 0x14, 0xa9, 0xaf, 0xe7, 0x03, 0xad, + 0xa5, 0x05, 0xda, 0x6d, 0x58, 0x0c, 0xf4, 0x38, 0x15, 0x8c, 0x19, 0xa7, 0x3e, 0x67, 0x0e, 0xa1, + 0xc9, 0x9d, 0xa8, 0x56, 0x19, 0x3b, 0x5f, 0xcf, 0xd8, 0x9d, 0x7f, 0x5a, 0xf0, 0x5e, 0xcb, 0xbf, + 0xec, 0xc7, 0x38, 0x41, 0xf6, 0x22, 0x10, 0x11, 0xfa, 0xfa, 0x38, 0x5c, 0x7c, 0x49, 0x65, 0x07, + 0x6d, 0x26, 0x77, 0xd0, 0xbe, 0x09, 0xab, 0x4c, 0x96, 0x7c, 0x5a, 0x6b, 0xf4, 0xb4, 0xea, 0x13, + 0xa5, 0x87, 0xee, 0x17, 0x16, 0x34, 0x0c, 0xb0, 0xbf, 0xd2, 0xa3, 0xe3, 0xc3, 0x7b, 0x22, 0x29, + 0x1f, 0x0c, 0xc6, 0x71, 0xd6, 0xc9, 0x12, 0xde, 0xdf, 0x49, 0xf7, 0x92, 0x24, 0xf0, 0x9d, 0xc6, + 0xab, 0x3f, 0x58, 0x30, 0xbf, 0xdf, 0x3e, 0xa5, 0x6c, 0x13, 0xd5, 0x78, 0x77, 0xa1, 0xce, 0x64, + 0x75, 0x48, 0x8c, 0xa3, 0xe3, 0xce, 0x30, 0x4d, 0xfb, 0x54, 0x32, 0xba, 0xc3, 0x2b, 0x54, 0x46, + 0x6a, 0x79, 0xdc, 0x54, 0x79, 0x62, 0x12, 0xde, 0x17, 0x53, 0x63, 0x25, 0x9b, 0xb2, 0xc5, 0xb1, + 0xd1, 0x2f, 0xb3, 0x6d, 0xc9, 0x08, 0xe8, 0x00, 0xe0, 0x07, 0x9d, 0x5e, 0xdf, 0xa7, 0xa6, 0xe6, + 0xfd, 0x8c, 0x3b, 0x06, 0xe8, 0x3c, 0xbb, 0xcf, 0x78, 0x5d, 0x69, 0xdd, 0x18, 0x5b, 0xf8, 0xa5, + 0x05, 0x4b, 0x19, 0x2a, 0x12, 0xa2, 0x6f, 0xc1, 0x42, 0x6a, 0x3e, 0xc2, 0xbb, 0x30, 0xf5, 0x34, + 0x3b, 0xe1, 0x74, 0x37, 0xe3, 0x78, 0x43, 0x38, 0x85, 0x2d, 0x46, 0x43, 0x42, 0x51, 0xd6, 0xdc, + 0x8c, 0xe0, 0x5c, 0x66, 0x10, 0x49, 0x62, 0xb9, 0xbc, 0x4c, 0xeb, 0xcd, 0xd8, 0x46, 0x0f, 0x27, + 0xce, 0x9f, 0x2d, 0x58, 0x96, 0x04, 0xbf, 0x2b, 0xe3, 0xd8, 0x30, 0x9f, 0xda, 0x82, 0xdb, 0x46, + 0x8c, 0x9d, 0x93, 0xac, 0xc7, 0x62, 0x70, 0x77, 0x2f, 0xef, 0xee, 0xde, 0x18, 0x3a, 0x9f, 0x43, + 0x83, 0x0d, 0x59, 0xaf, 0xea, 0x34, 0xee, 0xc4, 0x23, 0x52, 0xfe, 0xd1, 0x75, 0x98, 0x65, 0x6c, + 0xe9, 0x4d, 0xca, 0x46, 0x63, 0x1c, 0xbe, 0x26, 0xac, 0x9b, 0x84, 0xb1, 0xca, 0x0c, 0xf1, 0x29, + 0x5a, 0x4e, 0x07, 0x03, 0x7c, 0x2d, 0x08, 0x1a, 0xb6, 0xbc, 0x34, 0xac, 0xb0, 0x51, 0xbe, 0x15, + 0x39, 0xad, 0xb4, 0x22, 0xc7, 0x48, 0xca, 0x1a, 0xb0, 0xa6, 0xe1, 0x20, 0xa1, 0xf3, 0x0c, 0x6e, + 0x1c, 0xe0, 0x01, 0x96, 0x5a, 0x98, 0x93, 0x18, 0x7d, 0x15, 0xea, 0xb9, 0xaf, 0x91, 0xd0, 0x69, + 0x43, 0x3d, 0xdd, 0xd8, 0xbd, 0x9f, 0xb5, 0xbc, 0x49, 0x25, 0x3c, 0xc8, 0x1a, 0x80, 0xec, 0x73, + 0x24, 0x44, 0xdf, 0xc8, 0x02, 0x25, 0x77, 0x22, 0xed, 0x2c, 0x0b, 0x06, 0xe7, 0x5f, 0x5a, 0x09, + 0x42, 0xf6, 0xdb, 0xa7, 0xe5, 0xb0, 0x6c, 0x98, 0x4f, 0x8c, 0x26, 0x85, 0x4e, 0x31, 0x56, 0x5c, + 0x63, 0xfa, 0xcd, 0xf8, 0xb0, 0x61, 0xff, 0xfe, 0xa3, 0xe7, 0xf9, 0x14, 0x37, 0x09, 0xd1, 0xf7, + 0x61, 0x8e, 0xdd, 0x1b, 0xa9, 0x2b, 0x8f, 0x7b, 0xdd, 0xa4, 0xcb, 0xd0, 0xa1, 0xc1, 0xbf, 0xbf, + 0x66, 0x54, 0x82, 0xd5, 0xaa, 0x05, 0x5a, 0xdc, 0x02, 0x60, 0x12, 0xa4, 0xf0, 0x27, 0x51, 0x9c, + 0x5f, 0x5b, 0xd0, 0x74, 0xf1, 0x30, 0xb8, 0xc4, 0xaf, 0x65, 0xfe, 0x26, 0xcc, 0x31, 0x27, 0x20, + 0x3c, 0xff, 0x4e, 0x87, 0xaf, 0xd5, 0xef, 0xf6, 0x94, 0x7e, 0xb7, 0xe7, 0xb4, 0x61, 0xb3, 0x00, + 0x0d, 0xbb, 0xf8, 0xc9, 0xa8, 0xdb, 0xc5, 0x84, 0xf0, 0x8e, 0x72, 0x3a, 0x4c, 0x3c, 0xf4, 0xac, + 0xd3, 0x1f, 0x60, 0x8f, 0xa3, 0xe1, 0x23, 0xe7, 0x0b, 0x0b, 0x1a, 0x0f, 0x3d, 0xef, 0x6d, 0xa8, + 0xe6, 0xe9, 0xaa, 0x79, 0xa5, 0xaa, 0x3d, 0x81, 0x75, 0x13, 0x94, 0x4a, 0x7a, 0xf5, 0xa1, 0x7e, + 0xd0, 0x27, 0xc3, 0x3e, 0x21, 0x22, 0x46, 0xd8, 0x30, 0x1f, 0x28, 0x3d, 0xd9, 0x20, 0x1c, 0x3b, + 0x7b, 0x6f, 0xc2, 0x5c, 0x2f, 0x9f, 0xdd, 0xf2, 0xa1, 0x73, 0x08, 0x2b, 0x79, 0x51, 0xac, 0xcd, + 0xd0, 0x1d, 0xa7, 0xcd, 0x90, 0x31, 0x39, 0x7f, 0xb5, 0x00, 0xb5, 0x47, 0x31, 0x56, 0xae, 0x93, + 0xb7, 0x84, 0x3a, 0x31, 0xdc, 0x48, 0x6e, 0x1a, 0xf1, 0x11, 0x72, 0x60, 0x69, 0x38, 0x8a, 0xb1, + 0x77, 0x8a, 0xbb, 0x81, 0xef, 0x11, 0x5a, 0xfd, 0x2d, 0xbb, 0x39, 0x9a, 0x73, 0x04, 0x6b, 0x1a, + 0xd2, 0x6a, 0x4a, 0xff, 0xd2, 0x82, 0xe6, 0x7e, 0xc7, 0xef, 0xe2, 0xc1, 0xbb, 0x57, 0xdd, 0x39, + 0x86, 0xcd, 0x02, 0x2c, 0xd5, 0x94, 0x3b, 0x83, 0x25, 0xf1, 0xa5, 0xb7, 0x79, 0x00, 0xf7, 0x60, + 0x59, 0x92, 0x53, 0x0d, 0xeb, 0x00, 0x90, 0xa2, 0xfb, 0xdb, 0x44, 0x7c, 0x04, 0x6b, 0x9a, 0xb4, + 0x6a, 0xb8, 0xff, 0x62, 0xc1, 0xe6, 0x69, 0xee, 0x86, 0x39, 0xee, 0x77, 0xcf, 0xfd, 0xce, 0x30, + 0xcd, 0x58, 0x7a, 0xf9, 0xd2, 0xab, 0x97, 0x95, 0x5e, 0x3e, 0x67, 0x4c, 0x6f, 0xc7, 0x74, 0x9c, + 0xd3, 0x7a, 0xba, 0x5c, 0xeb, 0x19, 0x5d, 0xeb, 0xec, 0x74, 0xd5, 0x72, 0xa7, 0xeb, 0x04, 0xec, + 0x22, 0xa0, 0xd5, 0xfa, 0x92, 0x11, 0x7d, 0x81, 0x62, 0x2d, 0x83, 0xd3, 0x51, 0xc8, 0x5b, 0xf2, + 0x69, 0xbf, 0x42, 0x01, 0x6a, 0x95, 0x01, 0x9d, 0xca, 0x45, 0x80, 0x12, 0xf5, 0x93, 0xcb, 0xf0, + 0x66, 0xa1, 0xd0, 0x4a, 0x3b, 0x38, 0x51, 0xb7, 0xe2, 0x8a, 0xa6, 0x45, 0x19, 0x8e, 0xaf, 0xec, + 0x79, 0xf5, 0x37, 0x2c, 0xb1, 0xd1, 0x24, 0x57, 0x33, 0xc1, 0x1b, 0x78, 0x64, 0xbd, 0xf7, 0xb7, + 0x35, 0x60, 0x7f, 0x48, 0x40, 0xdf, 0x85, 0xc5, 0x6e, 0xf6, 0xde, 0x8d, 0x1a, 0xa9, 0xec, 0xdc, + 0xa3, 0xbf, 0xbd, 0x6e, 0x22, 0x93, 0x10, 0xdd, 0x87, 0x85, 0x9f, 0xa4, 0x8f, 0x21, 0x68, 0x8d, + 0x33, 0xc9, 0xcf, 0x34, 0xf6, 0x7b, 0x3a, 0x91, 0xad, 0xbb, 0x48, 0x3b, 0xed, 0x62, 0x9d, 0xdc, + 0xe3, 0x17, 0xeb, 0xf2, 0x0d, 0xf9, 0x3d, 0x58, 0xee, 0xc9, 0xef, 0xd4, 0x68, 0x23, 0xfd, 0xd7, + 0x81, 0xf2, 0x64, 0x6e, 0x37, 0xcd, 0x13, 0x24, 0x44, 0x0f, 0x60, 0x89, 0x48, 0x4f, 0xba, 0x28, + 0xd5, 0x4d, 0x79, 0x74, 0xb6, 0x37, 0x8c, 0x74, 0x12, 0xa2, 0x1f, 0xc3, 0x46, 0xcf, 0xfc, 0x9e, + 0x8a, 0x6e, 0x2b, 0x52, 0xf5, 0xf7, 0x4c, 0xdb, 0xb9, 0x8e, 0x85, 0x84, 0xe8, 0x0c, 0x36, 0x7b, + 0x45, 0x8f, 0x93, 0xe8, 0xc3, 0xec, 0x03, 0x85, 0xaf, 0xa6, 0xf6, 0x9d, 0xeb, 0x99, 0x48, 0x88, + 0x9e, 0x03, 0x8a, 0xb5, 0x17, 0x3a, 0xb4, 0xc5, 0xd7, 0x1a, 0x5f, 0x1f, 0xed, 0xf7, 0x4b, 0x66, + 0x49, 0x88, 0xba, 0xd0, 0xec, 0x15, 0x3c, 0xff, 0x20, 0x27, 0xf7, 0x17, 0x11, 0xe3, 0xd3, 0x97, + 0xfd, 0xe1, 0xb5, 0x3c, 0x0c, 0x77, 0x4f, 0x7b, 0xbf, 0x10, 0xb8, 0x8d, 0xcf, 0x2f, 0x02, 0x77, + 0xc1, 0xc3, 0xc7, 0x0b, 0x58, 0xeb, 0xe9, 0x0d, 0x7d, 0x64, 0x5e, 0x25, 0x4e, 0xd9, 0xad, 0xb2, + 0x69, 0x12, 0xa2, 0x23, 0xa8, 0x9f, 0xe7, 0x3b, 0xd4, 0x28, 0xfd, 0x9f, 0x8c, 0xde, 0xa8, 0xb7, + 0xed, 0xa2, 0x29, 0xa1, 0xb2, 0xd2, 0xf2, 0x95, 0x55, 0xd6, 0xbb, 0xd0, 0xb2, 0xca, 0xa6, 0x5e, + 0xf1, 0x31, 0xac, 0xf6, 0xd5, 0x2e, 0x28, 0xba, 0x99, 0x36, 0x2e, 0x0d, 0x6d, 0x5d, 0x7b, 0xab, + 0x78, 0x92, 0x7d, 0xaf, 0xa7, 0x76, 0x18, 0xc5, 0xf7, 0x4c, 0xcd, 0x4e, 0x7b, 0xab, 0x78, 0x92, + 0x39, 0xaa, 0x5c, 0x08, 0x0b, 0x47, 0x55, 0x8a, 0x6d, 0x7b, 0xc3, 0x48, 0x27, 0x21, 0xfa, 0x18, + 0xe6, 0x53, 0x1a, 0x42, 0x0a, 0x53, 0xb2, 0x70, 0x4d, 0xa3, 0xb1, 0xd0, 0x24, 0x62, 0x06, 0x52, + 0x39, 0x88, 0x1c, 0x9a, 0xf2, 0xfd, 0xa6, 0xe7, 0xa2, 0x0b, 0x22, 0x35, 0x48, 0xc4, 0x06, 0x19, + 0x1b, 0x35, 0x62, 0x83, 0xcc, 0x9d, 0x95, 0xe4, 0xf4, 0x28, 0x0d, 0x0d, 0x71, 0x7a, 0xf4, 0x86, + 0x8b, 0x38, 0x3d, 0x86, 0x1e, 0x48, 0x12, 0xe5, 0xa5, 0xae, 0x85, 0x88, 0xf2, 0xf9, 0xbe, 0x88, + 0x88, 0xf2, 0x4a, 0x83, 0x23, 0x51, 0x4d, 0xaf, 0xcb, 0x0b, 0xdc, 0x8d, 0x17, 0x84, 0x05, 0xee, + 0x26, 0x6a, 0xb4, 0x97, 0xd0, 0x30, 0x16, 0xa6, 0xe8, 0x03, 0xbe, 0xae, 0xa8, 0x88, 0xb6, 0xb7, + 0xcb, 0x19, 0x18, 0x5c, 0xbd, 0x32, 0x14, 0x70, 0x8d, 0xf5, 0xab, 0x80, 0x5b, 0x50, 0x52, 0x3e, + 0x80, 0x25, 0xb9, 0x6a, 0x13, 0x47, 0x51, 0xa9, 0x1a, 0xc5, 0x51, 0xd4, 0x4a, 0xbc, 0x23, 0xa8, + 0x2b, 0x75, 0x82, 0xd8, 0x4a, 0xbd, 0x96, 0x11, 0x5b, 0x69, 0x2a, 0x2d, 0x5e, 0x42, 0xc3, 0x58, + 0x77, 0x08, 0xcb, 0x15, 0x55, 0x48, 0xc2, 0x72, 0xc5, 0x65, 0xcb, 0x7d, 0x58, 0x10, 0x64, 0x71, + 0xf6, 0xe5, 0x1c, 0x5f, 0x9c, 0xfd, 0x7c, 0x2a, 0x7e, 0x04, 0x75, 0xe5, 0xa3, 0x42, 0x3b, 0xbd, + 0x4e, 0x10, 0xda, 0x99, 0x92, 0xfa, 0x1f, 0xc1, 0xba, 0x39, 0xef, 0x45, 0xdb, 0xca, 0x75, 0xac, + 0xe5, 0xef, 0xf6, 0xed, 0x6b, 0x38, 0xd8, 0xd5, 0x5d, 0x90, 0x90, 0xca, 0x57, 0x77, 0x41, 0x96, + 0x2c, 0x5f, 0xdd, 0x85, 0x39, 0x2d, 0xf3, 0x15, 0x25, 0xd5, 0x93, 0x7d, 0x45, 0xcf, 0x3f, 0x65, + 0x5f, 0x31, 0xe4, 0x88, 0x7b, 0xf5, 0x97, 0xcb, 0x3b, 0xec, 0xbf, 0xa4, 0x9f, 0xd0, 0xdf, 0x4f, + 0x67, 0xe9, 0x1f, 0x45, 0x3f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x52, 0x12, 0xd4, 0x5c, + 0x67, 0x2a, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index 6f6af9aa9..146852752 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -401,6 +401,16 @@ message GetJoinedSuperGroupListResp { repeated server_api_params.GroupInfo GroupList = 3; } +message GetSuperGroupsInfoReq { + repeated string GroupIDList = 1; + string OperationID = 2; + string OpUserID = 3; //No verification permission +} + +message GetSuperGroupsInfoResp { + CommonResp commonResp = 1; + repeated server_api_params.GroupInfo GroupInfoList = 3; +} service group{ rpc createGroup(CreateGroupReq) returns(CreateGroupResp); @@ -438,6 +448,7 @@ service group{ rpc SetGroupMemberNickname(SetGroupMemberNicknameReq) returns (SetGroupMemberNicknameResp); rpc GetJoinedSuperGroupList(GetJoinedSuperGroupListReq) returns (GetJoinedSuperGroupListResp); + rpc GetSuperGroupsInfo(GetSuperGroupsInfoReq) returns (GetSuperGroupsInfoResp); } From 23c6c8b331aca6ef1e699331b5dbcf0b2b677dd3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 16:29:37 +0800 Subject: [PATCH 019/256] superGroup --- pkg/common/db/mongoModel.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 0e849290d..0a3ef7994 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -985,6 +985,7 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, opts := &options.UpdateOptions{ Upsert: &upsert, } + c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) From 10881c8f5b3dd2b35a2169eb10e5b3b4b720df10 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:12:08 +0800 Subject: [PATCH 020/256] superGroup --- cmd/open_im_api/main.go | 4 ++-- internal/api/group/super_group.go | 9 ++++++++- pkg/common/db/mongoModel.go | 22 +++++++++++++--------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 17400d1cd..cb3fcd9ae 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -92,8 +92,8 @@ func main() { } superGroupRouterGroup := r.Group("/super_group") { - superGroupRouterGroup.POST("/get_joined_super_group_list", group.GetJoinedSuperGroupList) - superGroupRouterGroup.POST("/get_super_groups_info", group.GetSuperGroupsInfo) + superGroupRouterGroup.POST("/get_joined_group_list", group.GetJoinedSuperGroupList) + superGroupRouterGroup.POST("/get_groups_info", group.GetSuperGroupsInfo) } //certificate authRouterGroup := r.Group("/auth") diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index 35fd88f7a..c3b177dae 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -23,7 +23,14 @@ func GetJoinedSuperGroupList(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID} + ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID, OpUserID: opUserID, UserID: req.FromUserID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := rpc.NewGroupClient(etcdConn) rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 0a3ef7994..367502d11 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -986,10 +986,12 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, Upsert: &upsert, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") + for _, userID := range initMemberIDList { + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } } session.CommitTransaction(ctx) return err @@ -1031,10 +1033,12 @@ func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) err opts := &options.UpdateOptions{ Upsert: &upsert, } - _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": userIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") + for _, userID := range userIDList { + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } } session.CommitTransaction(ctx) return err @@ -1102,7 +1106,7 @@ func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID strin }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": groupID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": groupID}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From cf094a2048f277f69f50d0808d14d1cf159d9922 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:30:55 +0800 Subject: [PATCH 021/256] superGroup --- internal/rpc/group/super_group.go | 2 +- pkg/common/db/mongoModel.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 384ec8a23..949e92a91 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -46,7 +46,7 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. func (s *groupServer) GetSuperGroupsInfo(_ context.Context, req *pbGroup.GetSuperGroupsInfoReq) (resp *pbGroup.GetSuperGroupsInfoResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) - resp = &pbGroup.GetSuperGroupsInfoResp{} + resp = &pbGroup.GetSuperGroupsInfoResp{CommonResp: &pbGroup.CommonResp{}} groupsInfoList := make([]*commonPb.GroupInfo, 0) for _, groupID := range req.GroupIDList { groupInfoFromMysql, err := imdb.GetGroupInfoByGroupID(groupID) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 367502d11..8ec3cb952 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -987,7 +987,7 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) for _, userID := range initMemberIDList { - _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") @@ -1034,7 +1034,7 @@ func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) err Upsert: &upsert, } for _, userID := range userIDList { - _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) if err != nil { session.AbortTransaction(ctx) return utils.Wrap(err, "transaction failed") From 8cc6b048fdc940f9a5256cd9f56310a55b17f24c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:39:52 +0800 Subject: [PATCH 022/256] superGroup --- pkg/common/db/mongoModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 8ec3cb952..4325ce02a 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1106,7 +1106,7 @@ func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID strin }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": groupID}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From 25450a41828983df69999943ed8799ef10bb7fe7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 17:46:06 +0800 Subject: [PATCH 023/256] message update --- internal/push/logic/push_rpc_server.go | 8 ++- internal/push/logic/push_to_client.go | 98 ++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/internal/push/logic/push_rpc_server.go b/internal/push/logic/push_rpc_server.go index ba656a7d0..8fbf4e7d1 100644 --- a/internal/push/logic/push_rpc_server.go +++ b/internal/push/logic/push_rpc_server.go @@ -2,6 +2,7 @@ package logic import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" "Open_IM/pkg/proto/push" @@ -63,7 +64,12 @@ func (r *RPCServer) run() { } func (r *RPCServer) PushMsg(_ context.Context, pbData *pbPush.PushMsgReq) (*pbPush.PushMsgResp, error) { //Call push module to send message to the user - MsgToUser(pbData) + switch pbData.MsgData.SessionType { + case constant.SuperGroupChatType: + MsgToSuperGroupUser(pbData) + default: + MsgToUser(pbData) + } return &pbPush.PushMsgResp{ ResultCode: 0, }, nil diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 35618013a..cd72059dc 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -132,6 +132,104 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } +func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { + return + var wsResult []*pbRelay.SingleMsgToUser + isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) + log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) + if len(grpcCons) == 0 { + log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") + grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + } + //Online push message + log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + for _, v := range grpcCons { + msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) + reply, err := msgClient.OnlinePushMsg(context.Background(), &pbRelay.OnlinePushMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserID: pushMsg.PushToUserID}) + if err != nil { + log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + continue + } + if reply != nil && reply.Resp != nil { + wsResult = append(wsResult, reply.Resp...) + } + } + log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + successCount++ + if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { + for _, v := range wsResult { + if v.ResultCode == 0 { + if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + break + } + continue + } + if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + //Use offline push messaging + var UIDList []string + UIDList = append(UIDList, v.RecvID) + customContent := OpenIMContent{ + SessionType: int(pushMsg.MsgData.SessionType), + From: pushMsg.MsgData.SendID, + To: pushMsg.MsgData.RecvID, + Seq: pushMsg.MsgData.Seq, + } + bCustomContent, _ := json.Marshal(customContent) + jsonCustomContent := string(bCustomContent) + var content string + if pushMsg.MsgData.OfflinePushInfo != nil { + content = pushMsg.MsgData.OfflinePushInfo.Title + + } else { + switch pushMsg.MsgData.ContentType { + case constant.Text: + content = constant.ContentType2PushContent[constant.Text] + case constant.Picture: + content = constant.ContentType2PushContent[constant.Picture] + case constant.Voice: + content = constant.ContentType2PushContent[constant.Voice] + case constant.Video: + content = constant.ContentType2PushContent[constant.Video] + case constant.File: + content = constant.ContentType2PushContent[constant.File] + case constant.AtText: + a := AtContent{} + _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + if utils.IsContain(v.RecvID, a.AtUserList) { + content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] + } else { + content = constant.ContentType2PushContent[constant.GroupMsg] + } + default: + content = constant.ContentType2PushContent[constant.Common] + } + } + callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + if callbackResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + break + } + + if offlinePusher == nil { + offlinePusher = jpush.JPushClient + } + pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) + if err != nil { + log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + } else { + log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) + } + break + } + + } + + } +} //func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { // m.MsgID = rpcChat.GetMsgID(m.SendID) From 0168ef40146c6dbef1db56dc2df35963e4c7bc00 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 30 May 2022 17:46:11 +0800 Subject: [PATCH 024/256] superGroup --- pkg/common/db/mongoModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 4325ce02a..81844b9f9 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1106,7 +1106,7 @@ func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID strin }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": bson.M{"$in": userID}}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From 591b292fbf09986d03b358d8e37c1e9caa98fa4b Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 30 May 2022 18:23:12 +0800 Subject: [PATCH 025/256] super group --- pkg/common/constant/constant.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 760afb7c7..895d3c2b6 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -88,7 +88,7 @@ const ( SignalingNotificationEnd = 1649 SuperGroupNotificationBegin = 1650 - SuperGroupUpdateNotification = 1621 + SuperGroupUpdateNotification = 1651 SuperGroupNotificationEnd = 1699 ConversationPrivateChatNotification = 1701 From 5392c9fd388a496c4fd13cb7e457f5a58e64a10a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 19:31:09 +0800 Subject: [PATCH 026/256] log --- internal/msg_gateway/gate/logic.go | 2 +- internal/msg_transfer/logic/persistent_msg_handler.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index af6fa025d..088b5228a 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -115,7 +115,7 @@ func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { rpcReq.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList rpcReq.UserID = m.SendID rpcReq.OperationID = m.OperationID - log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList) + log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList, data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList) grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index 245634d84..6b6955ee2 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -55,6 +55,8 @@ func (pc *PersistentConsumerHandler) handleChatWs2Mysql(cMsg *sarama.ConsumerMes if msgKey == msgFromMQ.MsgData.SendID { tag = true } + case constant.SuperGroupChatType: + tag = true } if tag { log.NewInfo(msgFromMQ.OperationID, "msg_transfer msg persisting", string(msg)) From 0aefab34f18ff17f58ba5c9bc84caae837905096 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 30 May 2022 19:37:54 +0800 Subject: [PATCH 027/256] log --- internal/msg_gateway/gate/logic.go | 3 ++- pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 088b5228a..5a2b26fae 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -107,7 +107,7 @@ func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeq } func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr, m.Data) + log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr) nReply := new(sdk_ws.PullMessageBySeqListResp) isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsgBySeqList) if isPass { @@ -115,6 +115,7 @@ func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { rpcReq.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList rpcReq.UserID = m.SendID rpcReq.OperationID = m.OperationID + rpcReq.GroupSeqList = data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList, data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList) grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) msgClient := pbChat.NewChatClient(grpcConn) diff --git a/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go b/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go index 99c099ac4..5f7ef59f7 100644 --- a/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go +++ b/pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go @@ -26,7 +26,7 @@ func InsertMessageToChatLog(msg pbMsg.MsgDataToMQ) error { chatLog := new(db.ChatLog) copier.Copy(chatLog, msg.MsgData) switch msg.MsgData.SessionType { - case constant.GroupChatType: + case constant.GroupChatType, constant.SuperGroupChatType: chatLog.RecvID = msg.MsgData.GroupID case constant.SingleChatType: chatLog.RecvID = msg.MsgData.RecvID From d00641a73c9caebd8df3268738d3b1e138812b4e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 11:47:35 +0800 Subject: [PATCH 028/256] redis replace go redis --- pkg/common/db/model.go | 15 ++++++++++- pkg/common/db/newRedisModel.go | 44 ++++++++++++++++++++++++++++++++ pkg/common/db/redisModel_test.go | 29 +++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 pkg/common/db/newRedisModel.go diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index f8aaca54a..6e2c9614a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -8,8 +8,8 @@ import ( //"Open_IM/pkg/common/log" "Open_IM/pkg/utils" "fmt" + go_redis "github.com/go-redis/redis/v8" "go.mongodb.org/mongo-driver/mongo/options" - // "context" // "fmt" "github.com/garyburd/redigo/redis" @@ -30,6 +30,7 @@ type DataBases struct { mgoSession *mgo.Session redisPool *redis.Pool mongoClient *mongo.Client + rdb *go_redis.ClusterClient } func key(dbAddress, dbName string) string { @@ -113,6 +114,18 @@ func init() { ) }, } + + DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + Addrs: []string{config.Config.Redis.DBAddress}, + PoolSize: 100, + Password: config.Config.Redis.DBPassWord, + }) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } } func createMongoIndex(client *mongo.Client, collection string, isUnique bool, keys ...string) error { diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go new file mode 100644 index 000000000..f2b5f8930 --- /dev/null +++ b/pkg/common/db/newRedisModel.go @@ -0,0 +1,44 @@ +package db + +import ( + "Open_IM/pkg/common/config" + log2 "Open_IM/pkg/common/log" + pbChat "Open_IM/pkg/proto/chat" + "Open_IM/pkg/utils" + "context" + "errors" + "fmt" + "strconv" + "time" +) + +//func (d * DataBases)pubMessage(channel, msg string) { +// d.rdb.Publish(context.Background(),channel,msg) +//} +//func (d * DataBases)pubMessage(channel, msg string) { +// d.rdb.Publish(context.Background(),channel,msg) +//} + +func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { + ctx := context.Background() + var failedList []pbChat.MsgDataToMQ + for _, msg := range msgList { + key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) + s, err := utils.Pb2Map(msg.MsgData) + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2Map failed", msg.MsgData.String(), uid, err.Error()) + continue + } + log2.NewDebug(operationID, "convert map is ", s) + val, err := d.rdb.HMSet(ctx, key, s).Result() + if err != nil { + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val) + failedList = append(failedList, *msg) + } + d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) + } + if len(failedList) != 0 { + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) + } + return nil +} diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 1d9d254b7..f6f940209 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,6 +1,9 @@ package db import ( + pbChat "Open_IM/pkg/proto/chat" + "context" + "flag" "fmt" "github.com/stretchr/testify/assert" "testing" @@ -25,3 +28,29 @@ func TestDataBases_GetMultiConversationMsgOpt(t *testing.T) { assert.Nil(t, err) fmt.Println(m) } +func Test_GetKeyTTL(t *testing.T) { + ctx := context.Background() + key := flag.String("key", "key", "key value") + flag.Parse() + ttl, err := DB.rdb.TTL(ctx, *key).Result() + assert.Nil(t, err) + fmt.Println(ttl) +} +func Test_HGetAll(t *testing.T) { + ctx := context.Background() + key := flag.String("key", "key", "key value") + flag.Parse() + ttl, err := DB.rdb.TTL(ctx, *key).Result() + assert.Nil(t, err) + fmt.Println(ttl) +} +func Test_NewSetMessageToCache(t *testing.T) { + var msg pbChat.MsgDataToMQ + uid := "test_uid" + msg.MsgData.Seq = 11 + msg.MsgData.ClientMsgID = "23jwhjsdf" + messageList := []*pbChat.MsgDataToMQ{&msg} + err := DB.NewSetMessageToCache(messageList, uid, "test") + assert.Nil(t, err) + +} From ad8086d2b65cf1d654d3205cfc79f938c9868b4f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 11:57:22 +0800 Subject: [PATCH 029/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- pkg/common/db/redisModel.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index f2b5f8930..fd720a45b 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -38,7 +38,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) } return nil } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 92b27c614..da5a79492 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -309,7 +309,7 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, } } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %s", failedList)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) } return nil } From 136cb43cd1f718512201d47330f391ad83f6dbb5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:07:06 +0800 Subject: [PATCH 030/256] redis replace go redis --- pkg/common/db/model.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 6e2c9614a..6d1660807 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -30,7 +30,7 @@ type DataBases struct { mgoSession *mgo.Session redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.ClusterClient + rdb *go_redis.Client } func key(dbAddress, dbName string) string { @@ -114,12 +114,17 @@ func init() { ) }, } - - DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - Addrs: []string{config.Config.Redis.DBAddress}, - PoolSize: 100, - Password: config.Config.Redis.DBPassWord, + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 }) + //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + // Addrs: []string{config.Config.Redis.DBAddress}, + // PoolSize: 100, + // Password: config.Config.Redis.DBPassWord, + //}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() _, err = DB.rdb.Ping(ctx).Result() From 122a3ab4ce938feb3acf3f63bb2f04172d98b83b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:10:24 +0800 Subject: [PATCH 031/256] redis replace go redis --- pkg/common/db/redisModel_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index f6f940209..a7314dce9 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -2,6 +2,7 @@ package db import ( pbChat "Open_IM/pkg/proto/chat" + "Open_IM/pkg/proto/sdk_ws" "context" "flag" "fmt" @@ -46,9 +47,11 @@ func Test_HGetAll(t *testing.T) { } func Test_NewSetMessageToCache(t *testing.T) { var msg pbChat.MsgDataToMQ + var data server_api_params.MsgData uid := "test_uid" - msg.MsgData.Seq = 11 - msg.MsgData.ClientMsgID = "23jwhjsdf" + data.Seq = 11 + data.ClientMsgID = "23jwhjsdf" + msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} err := DB.NewSetMessageToCache(messageList, uid, "test") assert.Nil(t, err) From 1257e96d5ee45895d835234451dcad43475bc79b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:13:12 +0800 Subject: [PATCH 032/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index fd720a45b..3e0ae1664 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -32,13 +32,13 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri log2.NewDebug(operationID, "convert map is ", s) val, err := d.rdb.HMSet(ctx, key, s).Result() if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) failedList = append(failedList, *msg) } d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) } return nil } From 4e609ebc330be3df16281b8c94e1e4c0714a7ef1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:14:40 +0800 Subject: [PATCH 033/256] redis replace go redis --- pkg/common/db/redisModel_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index a7314dce9..c665ac884 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -53,7 +53,7 @@ func Test_NewSetMessageToCache(t *testing.T) { data.ClientMsgID = "23jwhjsdf" msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} - err := DB.NewSetMessageToCache(messageList, uid, "test") + err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") assert.Nil(t, err) } From c28801ff27f2a3ddfa2cad3077d6eb18c0511cb2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:20:40 +0800 Subject: [PATCH 034/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 3e0ae1664..344befcd5 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -22,6 +22,7 @@ import ( func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ + var err error for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) s, err := utils.Pb2Map(msg.MsgData) @@ -38,7 +39,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID) + err.Error()) } return nil } From dda453975bf844360929bd29c384721b5d0919c6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 12:32:26 +0800 Subject: [PATCH 035/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 344befcd5..f8ff63ed2 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -22,7 +22,6 @@ import ( func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ - var err error for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) s, err := utils.Pb2Map(msg.MsgData) @@ -33,13 +32,14 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri log2.NewDebug(operationID, "convert map is ", s) val, err := d.rdb.HMSet(ctx, key, s).Result() if err != nil { + return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) failedList = append(failedList, *msg) } d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID) + err.Error()) + return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) } return nil } From d4c587c66867f9075add019db45b03c364e037c6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:09:33 +0800 Subject: [PATCH 036/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index f8ff63ed2..8db19df2a 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -30,7 +30,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri continue } log2.NewDebug(operationID, "convert map is ", s) - val, err := d.rdb.HMSet(ctx, key, s).Result() + val, err := d.rdb.HSet(ctx, key, s).Result() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) From 47af0d03560b5b6a2ca72af9e7bd684a940ff508 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:20:51 +0800 Subject: [PATCH 037/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 8db19df2a..f00121003 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -30,6 +30,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri continue } log2.NewDebug(operationID, "convert map is ", s) + fmt.Println("ts", s) val, err := d.rdb.HSet(ctx, key, s).Result() if err != nil { return err From f36b2433a038f0c971dbe6f97eb938d1d544cd94 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:24:18 +0800 Subject: [PATCH 038/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index f00121003..57fdb139d 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,7 +31,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - val, err := d.rdb.HSet(ctx, key, s).Result() + val, err := d.rdb.HMSet(ctx, key, s).Result() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) From e693b908be0bb2cece37c6d55c9732d0f09f5f4b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 13:41:06 +0800 Subject: [PATCH 039/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 57fdb139d..1cbceac01 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,10 +31,10 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - val, err := d.rdb.HMSet(ctx, key, s).Result() + err = d.rdb.HMSet(ctx, key, s).Err() if err != nil { return err - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, val, err.Error()) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) failedList = append(failedList, *msg) } d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) From a630653d88897f3f64133573f4dfacd1fb35b26e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:22:42 +0800 Subject: [PATCH 040/256] redis replace go redis --- pkg/common/db/redisModel_test.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index c665ac884..a11f96bcd 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,8 +1,6 @@ package db import ( - pbChat "Open_IM/pkg/proto/chat" - "Open_IM/pkg/proto/sdk_ws" "context" "flag" "fmt" @@ -45,15 +43,17 @@ func Test_HGetAll(t *testing.T) { assert.Nil(t, err) fmt.Println(ttl) } + func Test_NewSetMessageToCache(t *testing.T) { - var msg pbChat.MsgDataToMQ - var data server_api_params.MsgData - uid := "test_uid" - data.Seq = 11 - data.ClientMsgID = "23jwhjsdf" - msg.MsgData = &data - messageList := []*pbChat.MsgDataToMQ{&msg} - err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + //var msg pbChat.MsgDataToMQ + //var data server_api_params.MsgData + //uid := "test_uid" + //data.Seq = 11 + //data.ClientMsgID = "23jwhjsdf" + //msg.MsgData = &data + //messageList := []*pbChat.MsgDataToMQ{&msg} + //err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() assert.Nil(t, err) } From 628984c09d27bf03a7bc1dbd886ec617f84daf13 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:25:52 +0800 Subject: [PATCH 041/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 2 +- pkg/common/db/redisModel_test.go | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 1cbceac01..9aab4ea14 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,7 +31,7 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - err = d.rdb.HMSet(ctx, key, s).Err() + err = d.rdb.HMSet(context.Background(), key, s).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index a11f96bcd..4832dbb09 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,6 +1,8 @@ package db import ( + pbChat "Open_IM/pkg/proto/chat" + server_api_params "Open_IM/pkg/proto/sdk_ws" "context" "flag" "fmt" @@ -45,15 +47,15 @@ func Test_HGetAll(t *testing.T) { } func Test_NewSetMessageToCache(t *testing.T) { - //var msg pbChat.MsgDataToMQ - //var data server_api_params.MsgData - //uid := "test_uid" - //data.Seq = 11 - //data.ClientMsgID = "23jwhjsdf" - //msg.MsgData = &data - //messageList := []*pbChat.MsgDataToMQ{&msg} - //err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") - err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() + var msg pbChat.MsgDataToMQ + var data server_api_params.MsgData + uid := "test_uid" + data.Seq = 11 + data.ClientMsgID = "23jwhjsdf" + msg.MsgData = &data + messageList := []*pbChat.MsgDataToMQ{&msg} + err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + //err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() assert.Nil(t, err) } From 3765661a4e330dc28ca93b4ead5dd9ce4e43820f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:29:16 +0800 Subject: [PATCH 042/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 9aab4ea14..e54eebbdd 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,7 +31,11 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - err = d.rdb.HMSet(context.Background(), key, s).Err() + m := make(map[string]interface{}) + for k, v := range s { + m[k] = v + } + err = d.rdb.HMSet(context.Background(), key, m).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) From 1c2ebb8c5d0edb190cc31b4f9be4fcf7fbf17b23 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:37:47 +0800 Subject: [PATCH 043/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index e54eebbdd..a62f14cc7 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -35,7 +35,8 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri for k, v := range s { m[k] = v } - err = d.rdb.HMSet(context.Background(), key, m).Err() + //err = d.rdb.HMSet(context.Background(), key, m).Err() + err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) From 31e923fc6724984dff4f6fe675fdc52e44b26d19 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:51:25 +0800 Subject: [PATCH 044/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 8 ++------ pkg/common/db/redisModel_test.go | 1 - 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index a62f14cc7..9ef4f1ec4 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -31,12 +31,8 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } log2.NewDebug(operationID, "convert map is ", s) fmt.Println("ts", s) - m := make(map[string]interface{}) - for k, v := range s { - m[k] = v - } - //err = d.rdb.HMSet(context.Background(), key, m).Err() - err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() + err = d.rdb.HMSet(context.Background(), key, s).Err() + //err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 4832dbb09..4e3b0213d 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -55,7 +55,6 @@ func Test_NewSetMessageToCache(t *testing.T) { msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") - //err := DB.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2}).Err() assert.Nil(t, err) } From fcf2427878087a8896ad27d5d6fbc2ca6ce2b8a7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 14:51:37 +0800 Subject: [PATCH 045/256] redis replace go redis --- pkg/utils/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 5346292ac..8626f13cb 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -165,7 +165,7 @@ func Pb2Map(pb proto.Message) (map[string]interface{}, error) { jsonbMarshaller := &jsonpb.Marshaler{ OrigName: true, EnumsAsInts: true, - EmitDefaults: true, + EmitDefaults: false, } _ = jsonbMarshaller.Marshal(&_buffer, pb) jsonCnt := _buffer.Bytes() From 5c979a532f6983d27bb8714fa9882196d8b54732 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 15:13:59 +0800 Subject: [PATCH 046/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 43 ++++++++++++++++++++++++++++++++ pkg/common/db/redisModel_test.go | 13 ++++++++++ 2 files changed, 56 insertions(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 9ef4f1ec4..912902b1e 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -4,10 +4,13 @@ import ( "Open_IM/pkg/common/config" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" + pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "encoding/json" "errors" "fmt" + "github.com/golang/protobuf/proto" "strconv" "time" ) @@ -19,6 +22,46 @@ import ( // d.rdb.Publish(context.Background(),channel,msg) //} +func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { + for _, v := range seqList { + //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 + key := messageCache + userID + "_" + strconv.Itoa(int(v)) + + result, err := d.rdb.HGetAll(context.Background(), key).Result() + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "redis get message error:", err.Error(), v) + } else { + msg, err := Map2Pb(result) + //msg := pbCommon.MsgData{} + //err = jsonpb.UnmarshalString(result, &msg) + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) + } else { + log2.NewDebug(operationID, "redis get msg is ", msg.String()) + seqMsg = append(seqMsg, msg) + } + + } + } + return seqMsg, failedSeqList, errResult +} +func Map2Pb(m map[string]string) (*pbCommon.MsgData, error) { + var data pbCommon.MsgData + b, err := json.Marshal(m) + if err != nil { + return nil, err + } + err = proto.Unmarshal(b, &data) + if err != nil { + return nil, err + } + return &data, nil +} + func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 4e3b0213d..4efc75957 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -58,3 +58,16 @@ func Test_NewSetMessageToCache(t *testing.T) { assert.Nil(t, err) } +func Test_NewGetMessageListBySeq(t *testing.T) { + var msg pbChat.MsgDataToMQ + var data server_api_params.MsgData + uid := "test_uid" + data.Seq = 11 + data.ClientMsgID = "23jwhjsdf" + msg.MsgData = &data + + seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{11}, "cacheTest") + assert.Nil(t, err) + fmt.Println(seqMsg, failedSeqList) + +} From 4c305b7cc0378dd96dec9dca96ea7011db28adbc Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 31 May 2022 15:18:54 +0800 Subject: [PATCH 047/256] redis replace go redis --- pkg/common/db/newRedisModel.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 912902b1e..deb932a0f 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -7,10 +7,9 @@ import ( pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "encoding/json" "errors" "fmt" - "github.com/golang/protobuf/proto" + "github.com/mitchellh/mapstructure" "strconv" "time" ) @@ -51,11 +50,7 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper } func Map2Pb(m map[string]string) (*pbCommon.MsgData, error) { var data pbCommon.MsgData - b, err := json.Marshal(m) - if err != nil { - return nil, err - } - err = proto.Unmarshal(b, &data) + err := mapstructure.Decode(m, &data) if err != nil { return nil, err } From 2b4df5be16e4b8622cc097ff676ebe4a9b20b23f Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 31 May 2022 19:16:29 +0800 Subject: [PATCH 048/256] Clear personal chat history --- cmd/open_im_api/main.go | 1 + internal/api/chat/del_msg.go | 43 +++++- internal/rpc/msg/chat.go | 38 ++++++ pkg/base_info/msg.go | 9 ++ pkg/common/constant/constant.go | 2 +- pkg/common/db/mongoModel.go | 32 +++++ pkg/common/db/newRedisModel.go | 13 ++ pkg/proto/chat/chat.pb.go | 225 ++++++++++++++++++++++++++------ pkg/proto/chat/chat.proto | 11 ++ 9 files changed, 328 insertions(+), 46 deletions(-) create mode 100644 internal/rpc/msg/chat.go diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index cb3fcd9ae..d2a8f22ef 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -119,6 +119,7 @@ func main() { chatGroup.POST("/send_msg", apiChat.SendMsg) chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) chatGroup.POST("/del_msg", apiChat.DelMsg) + chatGroup.POST("/clean_up_msg", apiChat.ClearMsg) } //Manager managementGroup := r.Group("/manager") diff --git a/internal/api/chat/del_msg.go b/internal/api/chat/del_msg.go index d883f095c..bad553938 100644 --- a/internal/api/chat/del_msg.go +++ b/internal/api/chat/del_msg.go @@ -5,8 +5,9 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" - pbChat "Open_IM/pkg/proto/chat" + rpc "Open_IM/pkg/proto/chat" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" @@ -30,7 +31,7 @@ func DelMsg(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) } grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) + msgClient := rpc.NewChatClient(grpcConn) respPb, err := msgClient.DelMsgList(context.Background(), &reqPb) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsgList failed", err.Error(), reqPb) @@ -42,3 +43,41 @@ func DelMsg(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp) c.JSON(http.StatusOK, resp) } + +func ClearMsg(c *gin.Context) { + params := api.CleanUpMsgReq{} + if err := c.BindJSON(¶ms); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + // + req := &rpc.ClearMsgReq{} + utils.CopyStructFields(req, ¶ms) + + var ok bool + var errInfo string + ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) + + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + client := rpc.NewChatClient(etcdConn) + RpcResp, err := client.ClearMsg(context.Background(), req) + if err != nil { + log.NewError(req.OperationID, " CleanUpMsg failed ", err.Error(), req.String(), RpcResp.ErrMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": RpcResp.ErrMsg}) + return + } + + resp := api.CleanUpMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}} + + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp) + c.JSON(http.StatusOK, resp) +} diff --git a/internal/rpc/msg/chat.go b/internal/rpc/msg/chat.go new file mode 100644 index 000000000..40c91c2e9 --- /dev/null +++ b/internal/rpc/msg/chat.go @@ -0,0 +1,38 @@ +package msg + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" + "Open_IM/pkg/proto/chat" + "Open_IM/pkg/utils" + "context" +) + +func (rpc *rpcChat) ClearMsg(_ context.Context, req *pbChat.ClearMsgReq) (*pbChat.ClearMsgResp, error) { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc req: ", req.String()) + if req.OpUserID != req.UserID && !token_verify.IsManagerUserID(req.UserID) { + errMsg := "No permission" + req.OpUserID + req.UserID + log.Error(req.OperationID, errMsg) + return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + log.Debug(req.OperationID, "CleanUpOneUserAllMsgFromRedis args", req.UserID) + err := db.DB.CleanUpOneUserAllMsgFromRedis(req.UserID) + if err != nil { + errMsg := "CleanUpOneUserAllMsgFromRedis failed " + err.Error() + req.OperationID + req.UserID + log.Error(req.OperationID, errMsg) + return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + log.Debug(req.OperationID, "CleanUpUserMsgFromMongo args", req.UserID) + err = db.DB.CleanUpUserMsgFromMongo(req.UserID) + if err != nil { + errMsg := "CleanUpUserMsgFromMongo failed " + err.Error() + req.OperationID + req.UserID + log.Error(req.OperationID, errMsg) + return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + + resp := pbChat.ClearMsgResp{ErrCode: 0} + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + return &resp, nil +} diff --git a/pkg/base_info/msg.go b/pkg/base_info/msg.go index bc80cf304..15941f340 100644 --- a/pkg/base_info/msg.go +++ b/pkg/base_info/msg.go @@ -10,3 +10,12 @@ type DelMsgReq struct { type DelMsgResp struct { CommResp } + +type CleanUpMsgReq struct { + UserID string `json:"userID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` +} + +type CleanUpMsgResp struct { + CommResp +} diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 895d3c2b6..6ab990cb7 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -277,7 +277,7 @@ func GroupIsBanPrivateChat(status int32) bool { return true } -const BigVersion = "v3" +const BigVersion = "v2" const LogFileName = "OpenIM.log" diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 81844b9f9..c46019ab4 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -10,6 +10,7 @@ import ( "context" "errors" "fmt" + "github.com/go-redis/redis/v8" "github.com/gogo/protobuf/sortkeys" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -1136,6 +1137,17 @@ func getSeqUid(uid string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return indexGen(uid, seqSuffix) } + +func getSeqUserIDList(userID string, maxSeq uint32) []string { + seqMaxSuffix := maxSeq / singleGocMsgNum + var seqUserIDList []string + for i := 0; i <= int(seqMaxSuffix); i++ { + seqUserID := indexGen(userID, uint32(i)) + seqUserIDList = append(seqUserIDList, seqUserID) + } + return seqUserIDList +} + func getSeqSuperGroupID(groupID string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return superGroupIndexGen(groupID, seqSuffix) @@ -1180,3 +1192,23 @@ func indexGen(uid string, seqSuffix uint32) string { func superGroupIndexGen(groupID string, seqSuffix uint32) string { return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) } + +func (d *DataBases) CleanUpUserMsgFromMongo(userID string) error { + ctx := context.Background() + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + maxSeq, err := d.GetUserMaxSeq(userID) + if err == redis.Nil { + return nil + } + if err != nil { + return utils.Wrap(err, "") + } + + seqUsers := getSeqUserIDList(userID, uint32(maxSeq)) + //bson.M{"id":bson.M{"$in":list}} + _, err = c.DeleteMany(ctx, bson.M{"uid": bson.M{"$in": seqUsers}}) + if err == mongo.ErrNoDocuments { + return nil + } + return utils.Wrap(err, "") +} diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index deb932a0f..4bc71e47e 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -83,3 +83,16 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri } return nil } + +func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string) error { + ctx := context.Background() + key := messageCache + userID + "_" + "*" + vals, err := d.rdb.Keys(ctx, key).Result() + if err != nil { + return utils.Wrap(err, "") + } + if err = d.rdb.Del(ctx, vals...).Err(); err != nil { + return utils.Wrap(err, "") + } + return nil +} diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index 092fff9ca..b3d53675f 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -37,7 +37,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{0} + return fileDescriptor_chat_9735d58eeaab60cd, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{1} + return fileDescriptor_chat_9735d58eeaab60cd, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{2} + return fileDescriptor_chat_9735d58eeaab60cd, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -210,7 +210,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_chat_732204f30d7bcb33, []int{3} + return fileDescriptor_chat_9735d58eeaab60cd, []int{3} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -258,7 +258,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_chat_732204f30d7bcb33, []int{4} + return fileDescriptor_chat_9735d58eeaab60cd, []int{4} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -319,7 +319,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{5} + return fileDescriptor_chat_9735d58eeaab60cd, []int{5} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_732204f30d7bcb33, []int{6} + return fileDescriptor_chat_9735d58eeaab60cd, []int{6} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -430,6 +430,106 @@ func (m *SendMsgResp) GetSendTime() int64 { return 0 } +type ClearMsgReq struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=opUserID" json:"opUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClearMsgReq) Reset() { *m = ClearMsgReq{} } +func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) } +func (*ClearMsgReq) ProtoMessage() {} +func (*ClearMsgReq) Descriptor() ([]byte, []int) { + return fileDescriptor_chat_9735d58eeaab60cd, []int{7} +} +func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b) +} +func (m *ClearMsgReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClearMsgReq.Marshal(b, m, deterministic) +} +func (dst *ClearMsgReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClearMsgReq.Merge(dst, src) +} +func (m *ClearMsgReq) XXX_Size() int { + return xxx_messageInfo_ClearMsgReq.Size(m) +} +func (m *ClearMsgReq) XXX_DiscardUnknown() { + xxx_messageInfo_ClearMsgReq.DiscardUnknown(m) +} + +var xxx_messageInfo_ClearMsgReq proto.InternalMessageInfo + +func (m *ClearMsgReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *ClearMsgReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *ClearMsgReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type ClearMsgResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClearMsgResp) Reset() { *m = ClearMsgResp{} } +func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) } +func (*ClearMsgResp) ProtoMessage() {} +func (*ClearMsgResp) Descriptor() ([]byte, []int) { + return fileDescriptor_chat_9735d58eeaab60cd, []int{8} +} +func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b) +} +func (m *ClearMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClearMsgResp.Marshal(b, m, deterministic) +} +func (dst *ClearMsgResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClearMsgResp.Merge(dst, src) +} +func (m *ClearMsgResp) XXX_Size() int { + return xxx_messageInfo_ClearMsgResp.Size(m) +} +func (m *ClearMsgResp) XXX_DiscardUnknown() { + xxx_messageInfo_ClearMsgResp.DiscardUnknown(m) +} + +var xxx_messageInfo_ClearMsgResp proto.InternalMessageInfo + +func (m *ClearMsgResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *ClearMsgResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + func init() { proto.RegisterType((*MsgDataToMQ)(nil), "pbChat.MsgDataToMQ") proto.RegisterType((*MsgDataToDB)(nil), "pbChat.MsgDataToDB") @@ -438,6 +538,8 @@ func init() { proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "pbChat.GetMaxAndMinSeqResp") proto.RegisterType((*SendMsgReq)(nil), "pbChat.SendMsgReq") proto.RegisterType((*SendMsgResp)(nil), "pbChat.SendMsgResp") + proto.RegisterType((*ClearMsgReq)(nil), "pbChat.ClearMsgReq") + proto.RegisterType((*ClearMsgResp)(nil), "pbChat.ClearMsgResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -455,6 +557,7 @@ type ChatClient interface { PullMessageBySeqList(ctx context.Context, in *sdk_ws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, opts ...grpc.CallOption) (*sdk_ws.DelMsgListResp, error) + ClearMsg(ctx context.Context, in *ClearMsgReq, opts ...grpc.CallOption) (*ClearMsgResp, error) } type chatClient struct { @@ -501,6 +604,15 @@ func (c *chatClient) DelMsgList(ctx context.Context, in *sdk_ws.DelMsgListReq, o return out, nil } +func (c *chatClient) ClearMsg(ctx context.Context, in *ClearMsgReq, opts ...grpc.CallOption) (*ClearMsgResp, error) { + out := new(ClearMsgResp) + err := grpc.Invoke(ctx, "/pbChat.Chat/ClearMsg", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Chat service type ChatServer interface { @@ -508,6 +620,7 @@ type ChatServer interface { PullMessageBySeqList(context.Context, *sdk_ws.PullMessageBySeqListReq) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error) DelMsgList(context.Context, *sdk_ws.DelMsgListReq) (*sdk_ws.DelMsgListResp, error) + ClearMsg(context.Context, *ClearMsgReq) (*ClearMsgResp, error) } func RegisterChatServer(s *grpc.Server, srv ChatServer) { @@ -586,6 +699,24 @@ func _Chat_DelMsgList_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _Chat_ClearMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClearMsgReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).ClearMsg(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pbChat.Chat/ClearMsg", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).ClearMsg(ctx, req.(*ClearMsgReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Chat_serviceDesc = grpc.ServiceDesc{ ServiceName: "pbChat.Chat", HandlerType: (*ChatServer)(nil), @@ -606,45 +737,53 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ MethodName: "DelMsgList", Handler: _Chat_DelMsgList_Handler, }, + { + MethodName: "ClearMsg", + Handler: _Chat_ClearMsg_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_732204f30d7bcb33) } - -var fileDescriptor_chat_732204f30d7bcb33 = []byte{ - // 508 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xdd, 0x6e, 0xda, 0x30, - 0x14, 0x56, 0x68, 0x0b, 0xe3, 0xb0, 0x0a, 0xc9, 0xad, 0xa6, 0x88, 0xab, 0x34, 0xd2, 0x26, 0xb4, - 0x49, 0x89, 0xc4, 0x76, 0xb7, 0xab, 0xd1, 0x54, 0x13, 0xd2, 0xbc, 0xb6, 0x81, 0xdd, 0xec, 0x86, - 0xb9, 0xcd, 0x51, 0x88, 0x80, 0xc4, 0xf8, 0x84, 0xd1, 0x6d, 0xcf, 0xb0, 0x67, 0xd8, 0xab, 0xed, - 0x51, 0xa6, 0xd8, 0x69, 0x09, 0x05, 0xa9, 0x5c, 0xed, 0x06, 0xe9, 0x7c, 0xfe, 0xfc, 0xfd, 0x18, - 0xc7, 0xd0, 0xbe, 0x9d, 0x88, 0xdc, 0x2f, 0x7e, 0x3c, 0xa9, 0xb2, 0x3c, 0x63, 0x75, 0x79, 0x73, - 0x3e, 0x11, 0x79, 0xe7, 0xec, 0x52, 0x62, 0x3a, 0x1e, 0x70, 0x5f, 0x4e, 0x63, 0x5f, 0x2f, 0xf9, - 0x14, 0x4d, 0xc7, 0x2b, 0xf2, 0x57, 0x64, 0xa8, 0xee, 0x2f, 0x68, 0x71, 0x8a, 0x03, 0x91, 0x8b, - 0x51, 0xc6, 0xaf, 0xd9, 0x29, 0x1c, 0xe5, 0xd9, 0x14, 0x53, 0xdb, 0x72, 0xac, 0x6e, 0x33, 0x34, - 0x03, 0x73, 0xa0, 0x95, 0x49, 0x54, 0x22, 0x4f, 0xb2, 0x74, 0x10, 0xd8, 0x35, 0xbd, 0x56, 0x85, - 0xd8, 0x3b, 0x68, 0xcc, 0x8d, 0x8c, 0x7d, 0xe0, 0x58, 0xdd, 0x56, 0xaf, 0xe3, 0x11, 0xaa, 0xef, - 0xa8, 0xc6, 0x42, 0x26, 0x63, 0x29, 0x94, 0x98, 0x93, 0x57, 0x1a, 0x85, 0xf7, 0x54, 0x17, 0x2b, - 0xe6, 0x41, 0xbf, 0x2a, 0x62, 0xed, 0x2d, 0xf2, 0x74, 0x38, 0xf7, 0xb7, 0x05, 0xed, 0xab, 0x25, - 0x4d, 0xaa, 0x45, 0x1d, 0x68, 0x5d, 0x56, 0x76, 0x99, 0xba, 0x55, 0xa8, 0x9a, 0xa6, 0xb6, 0x7f, - 0x1a, 0x17, 0x9e, 0xcb, 0x25, 0x4d, 0x46, 0xd9, 0x17, 0x42, 0x35, 0x08, 0xf4, 0x69, 0x34, 0xc3, - 0x0d, 0xcc, 0xfd, 0x0c, 0xec, 0x23, 0xe6, 0x5c, 0xdc, 0x7d, 0x48, 0x23, 0x9e, 0xa4, 0x43, 0x5c, - 0x84, 0xb8, 0x60, 0x2f, 0xa0, 0x5e, 0xee, 0x31, 0x61, 0xca, 0xe9, 0x71, 0xd2, 0xda, 0x56, 0x52, - 0x77, 0x05, 0x27, 0x5b, 0x7a, 0x24, 0x99, 0x0d, 0x8d, 0x0b, 0xa5, 0xce, 0xb3, 0x08, 0xb5, 0xe2, - 0x51, 0x78, 0x3f, 0x16, 0x56, 0x17, 0x4a, 0x71, 0x8a, 0x4b, 0xb5, 0x72, 0x2a, 0x70, 0x2e, 0xee, - 0x86, 0xb8, 0xd0, 0xb1, 0x8f, 0xc3, 0x72, 0xd2, 0xb8, 0xd6, 0xb5, 0x0f, 0x4b, 0x5c, 0x4f, 0xee, - 0x4f, 0x80, 0x21, 0xa6, 0x11, 0xa7, 0xb8, 0x28, 0xf0, 0x7f, 0xef, 0xce, 0x1f, 0x0b, 0x5a, 0x0f, - 0xe6, 0xa6, 0x2d, 0x6e, 0xb6, 0xc5, 0x75, 0x5b, 0xdc, 0x68, 0x6b, 0xa6, 0x22, 0x99, 0xf1, 0xe1, - 0x14, 0x0f, 0x02, 0x5d, 0xad, 0x19, 0x56, 0xa1, 0x82, 0x71, 0x3b, 0x4b, 0x30, 0xcd, 0x0d, 0xe3, - 0xc8, 0x30, 0x2a, 0x10, 0xeb, 0xc0, 0x33, 0xc2, 0x34, 0x1a, 0x25, 0x73, 0xb4, 0xeb, 0x8e, 0xd5, - 0x3d, 0x08, 0x1f, 0xe6, 0xde, 0xdf, 0x1a, 0x1c, 0x16, 0x9f, 0x21, 0xfb, 0x06, 0xed, 0x47, 0xff, - 0x0f, 0x7b, 0xb9, 0xa3, 0xe2, 0xf6, 0x9d, 0xe8, 0xbc, 0xda, 0x87, 0x46, 0x92, 0x65, 0x70, 0x7a, - 0xb5, 0x9c, 0xcd, 0x38, 0x12, 0x89, 0x18, 0xfb, 0x3f, 0x86, 0xb8, 0xf8, 0x94, 0x50, 0xce, 0x5e, - 0xef, 0xd8, 0xbf, 0x8b, 0x58, 0x78, 0xbd, 0xd9, 0x9b, 0x4b, 0x92, 0xf5, 0xa0, 0x51, 0x1e, 0x3e, - 0x63, 0x9e, 0x79, 0x6d, 0xbc, 0xf5, 0x55, 0xe8, 0x9c, 0x6c, 0x61, 0x24, 0xd9, 0x35, 0x40, 0x80, - 0x33, 0x4e, 0xb1, 0x8e, 0xe6, 0xec, 0xb0, 0x5b, 0x2f, 0x17, 0x22, 0x67, 0x4f, 0x30, 0x48, 0xf6, - 0xdb, 0x5f, 0x8f, 0x3d, 0xfd, 0xf0, 0xbd, 0x37, 0x7e, 0x37, 0x75, 0xfd, 0xaa, 0xbd, 0xfd, 0x17, - 0x00, 0x00, 0xff, 0xff, 0x9f, 0xc6, 0xef, 0x8e, 0x13, 0x05, 0x00, 0x00, +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_9735d58eeaab60cd) } + +var fileDescriptor_chat_9735d58eeaab60cd = []byte{ + // 563 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xc1, 0x6e, 0xda, 0x40, + 0x10, 0x95, 0x43, 0x42, 0x92, 0x71, 0x22, 0xa4, 0x4d, 0x14, 0x59, 0x3e, 0x39, 0x96, 0x5a, 0xa1, + 0x56, 0x32, 0x12, 0x6d, 0x4f, 0xbd, 0xb4, 0xe0, 0xa8, 0x42, 0xaa, 0x9b, 0xc4, 0xd0, 0x4b, 0x2f, + 0x74, 0x03, 0x23, 0x63, 0x01, 0xf6, 0xe2, 0x31, 0x25, 0x6d, 0xbf, 0xa1, 0xe7, 0x1e, 0xfb, 0xab, + 0x95, 0x77, 0x0d, 0x18, 0x8c, 0x14, 0xd4, 0x43, 0x2f, 0x96, 0xde, 0xdb, 0xf1, 0x7b, 0x6f, 0x76, + 0x47, 0x03, 0xb5, 0xc1, 0x88, 0xa7, 0x8d, 0xec, 0xe3, 0x88, 0x24, 0x4e, 0x63, 0x56, 0x15, 0x0f, + 0xed, 0x11, 0x4f, 0xcd, 0xeb, 0x5b, 0x81, 0x51, 0xbf, 0xe3, 0x35, 0xc4, 0x38, 0x68, 0xc8, 0xa3, + 0x06, 0x0d, 0xc7, 0xfd, 0x05, 0x35, 0x16, 0xa4, 0x4a, 0xed, 0x9f, 0xa0, 0x7b, 0x14, 0xb8, 0x3c, + 0xe5, 0xbd, 0xd8, 0xbb, 0x67, 0x97, 0x70, 0x94, 0xc6, 0x63, 0x8c, 0x0c, 0xcd, 0xd2, 0xea, 0xa7, + 0xbe, 0x02, 0xcc, 0x02, 0x3d, 0x16, 0x98, 0xf0, 0x34, 0x8c, 0xa3, 0x8e, 0x6b, 0x1c, 0xc8, 0xb3, + 0x22, 0xc5, 0x5e, 0xc3, 0xf1, 0x54, 0xc9, 0x18, 0x15, 0x4b, 0xab, 0xeb, 0x4d, 0xd3, 0x21, 0x4c, + 0xbe, 0x61, 0xd2, 0xe7, 0x22, 0xec, 0x0b, 0x9e, 0xf0, 0x29, 0x39, 0xb9, 0x91, 0xbf, 0x2c, 0xb5, + 0xb1, 0x60, 0xee, 0xb6, 0x8a, 0x22, 0xda, 0xde, 0x22, 0x4f, 0x87, 0xb3, 0x7f, 0x69, 0x50, 0xbb, + 0x9b, 0xd3, 0xa8, 0xd8, 0xa8, 0x05, 0xfa, 0x6d, 0xe1, 0x2f, 0xd5, 0x6e, 0x91, 0x2a, 0xa6, 0x39, + 0xd8, 0x3f, 0x8d, 0x0d, 0x67, 0x62, 0x4e, 0xa3, 0x5e, 0xfc, 0x99, 0x30, 0xe9, 0xb8, 0xf2, 0x36, + 0x4e, 0xfd, 0x0d, 0xce, 0xfe, 0x04, 0xec, 0x03, 0xa6, 0x1e, 0x7f, 0x7c, 0x1f, 0x0d, 0xbd, 0x30, + 0xea, 0xe2, 0xcc, 0xc7, 0x19, 0xbb, 0x82, 0x6a, 0xfe, 0x8f, 0x0a, 0x93, 0xa3, 0xed, 0xa4, 0x07, + 0xa5, 0xa4, 0xf6, 0x02, 0x2e, 0x4a, 0x7a, 0x24, 0x98, 0x01, 0xc7, 0x37, 0x49, 0xd2, 0x8e, 0x87, + 0x28, 0x15, 0x8f, 0xfc, 0x25, 0xcc, 0xac, 0x6e, 0x92, 0xc4, 0xa3, 0x20, 0x57, 0xcb, 0x51, 0xc6, + 0x7b, 0xfc, 0xb1, 0x8b, 0x33, 0x19, 0xfb, 0xdc, 0xcf, 0x91, 0xe4, 0xa5, 0xae, 0x71, 0x98, 0xf3, + 0x12, 0xd9, 0x3f, 0x00, 0xba, 0x18, 0x0d, 0x3d, 0x0a, 0xb2, 0x06, 0xfe, 0xef, 0xec, 0xfc, 0xd1, + 0x40, 0x5f, 0x99, 0xab, 0x6e, 0x71, 0xb3, 0x5b, 0x5c, 0x77, 0x8b, 0x1b, 0xdd, 0x2a, 0x94, 0x25, + 0x53, 0x3e, 0x1e, 0x05, 0x1d, 0x57, 0xb6, 0x76, 0xea, 0x17, 0xa9, 0xac, 0x62, 0x30, 0x09, 0x31, + 0x4a, 0x55, 0xc5, 0x91, 0xaa, 0x28, 0x50, 0xcc, 0x84, 0x13, 0xc2, 0x68, 0xd8, 0x0b, 0xa7, 0x68, + 0x54, 0x2d, 0xad, 0x5e, 0xf1, 0x57, 0xd8, 0x1e, 0x80, 0xde, 0x9e, 0x20, 0x4f, 0xf2, 0xeb, 0xb9, + 0x82, 0xea, 0x7c, 0xe3, 0x7d, 0x15, 0xca, 0x24, 0x62, 0x91, 0xbf, 0xbc, 0x0a, 0xb8, 0xc2, 0xdb, + 0x97, 0x57, 0x29, 0xcf, 0xf6, 0x3b, 0x38, 0x5b, 0x9b, 0xfc, 0xcb, 0x35, 0x34, 0x7f, 0x57, 0xe0, + 0x30, 0xdb, 0x16, 0xec, 0x2b, 0xd4, 0xb6, 0xc6, 0x88, 0x3d, 0xdb, 0xf1, 0x12, 0xe5, 0xd1, 0x35, + 0x9f, 0xef, 0x53, 0x46, 0x82, 0xc5, 0x70, 0x79, 0x37, 0x9f, 0x4c, 0x3c, 0x24, 0xe2, 0x01, 0xb6, + 0xbe, 0x77, 0x71, 0xf6, 0x31, 0xa4, 0x94, 0xbd, 0xd8, 0xf1, 0xff, 0xae, 0xc2, 0xcc, 0xeb, 0xe5, + 0xde, 0xb5, 0x24, 0x58, 0x13, 0x8e, 0xf3, 0x19, 0x61, 0xcc, 0x51, 0x4b, 0xd1, 0x59, 0x4f, 0xac, + 0x79, 0x51, 0xe2, 0x48, 0xb0, 0x7b, 0x00, 0x17, 0x27, 0x1e, 0x05, 0x32, 0x9a, 0xb5, 0xc3, 0x6e, + 0x7d, 0x9c, 0x89, 0x5c, 0x3f, 0x51, 0x41, 0x82, 0xbd, 0x81, 0x93, 0xe5, 0x23, 0xb1, 0x95, 0x67, + 0x61, 0x36, 0xcc, 0xcb, 0x32, 0x49, 0xa2, 0x55, 0xfb, 0x72, 0xee, 0xc8, 0xb5, 0xfe, 0x56, 0x9d, + 0x3e, 0x54, 0xe5, 0xce, 0x7e, 0xf5, 0x37, 0x00, 0x00, 0xff, 0xff, 0xee, 0x03, 0xc5, 0x33, 0xf1, + 0x05, 0x00, 0x00, } diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index d30010db2..5fd88be5c 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -69,14 +69,25 @@ message SendMsgResp { string serverMsgID = 4; string clientMsgID = 5; int64 sendTime = 6; +} + +message ClearMsgReq{ + string userID = 1; + string opUserID = 2; + string operationID = 3; } +message ClearMsgResp{ + int32 errCode = 1; + string errMsg = 2; +} service Chat { rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc SendMsg(SendMsgReq) returns(SendMsgResp); rpc DelMsgList(server_api_params.DelMsgListReq) returns(server_api_params.DelMsgListResp); + rpc ClearMsg(ClearMsgReq) returns(ClearMsgResp); } From ab914f46210004d3dcd1c633fb08b5de5dd7f0f1 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 11:18:28 +0800 Subject: [PATCH 049/256] tools --- test/mongo/mongo_utils.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/mongo/mongo_utils.go b/test/mongo/mongo_utils.go index 591143d90..f53a6384c 100644 --- a/test/mongo/mongo_utils.go +++ b/test/mongo/mongo_utils.go @@ -48,7 +48,12 @@ func GetUserAllChat(uid string) { fmt.Println(err.Error(), msg) continue } - fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status, "sendID: ", msgData.SendID, "recvID: ", msgData.RecvID, "sendTime: ", msgData.SendTime) + fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status, + "sendID: ", msgData.SendID, "recvID: ", msgData.RecvID, + "sendTime: ", msgData.SendTime, + "clientMsgID: ", msgData.ClientMsgID, + "serverMsgID: ", msgData.ServerMsgID, + "content: ", string(msgData.Content)) } } } From 1ff7ebb04a88af6af755ffbf7ec9782704654aa2 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:09:20 +0800 Subject: [PATCH 050/256] tools --- cmd/open_im_api/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index d2a8f22ef..8fbc78576 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -119,7 +119,7 @@ func main() { chatGroup.POST("/send_msg", apiChat.SendMsg) chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) chatGroup.POST("/del_msg", apiChat.DelMsg) - chatGroup.POST("/clean_up_msg", apiChat.ClearMsg) + chatGroup.POST("/clear_msg", apiChat.ClearMsg) } //Manager managementGroup := r.Group("/manager") From 8315c61240f7c919e44241c95999e1cd8b4d62b9 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:25:22 +0800 Subject: [PATCH 051/256] Clear msg --- pkg/common/db/newRedisModel.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 4bc71e47e..02c7dd5b5 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -9,6 +9,7 @@ import ( "context" "errors" "fmt" + "github.com/garyburd/redigo/redis" "github.com/mitchellh/mapstructure" "strconv" "time" @@ -88,6 +89,9 @@ func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string) error { ctx := context.Background() key := messageCache + userID + "_" + "*" vals, err := d.rdb.Keys(ctx, key).Result() + if err == redis.ErrNil { + return nil + } if err != nil { return utils.Wrap(err, "") } From b2df6e6d4105ff226f486a2f6e1394181dfc53d7 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:53:14 +0800 Subject: [PATCH 052/256] Clear msg --- internal/rpc/msg/chat.go | 2 +- pkg/common/db/mongoModel.go | 4 ++-- pkg/common/db/newRedisModel.go | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/internal/rpc/msg/chat.go b/internal/rpc/msg/chat.go index 40c91c2e9..559a88681 100644 --- a/internal/rpc/msg/chat.go +++ b/internal/rpc/msg/chat.go @@ -18,7 +18,7 @@ func (rpc *rpcChat) ClearMsg(_ context.Context, req *pbChat.ClearMsgReq) (*pbCha return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } log.Debug(req.OperationID, "CleanUpOneUserAllMsgFromRedis args", req.UserID) - err := db.DB.CleanUpOneUserAllMsgFromRedis(req.UserID) + err := db.DB.CleanUpOneUserAllMsgFromRedis(req.UserID, req.OperationID) if err != nil { errMsg := "CleanUpOneUserAllMsgFromRedis failed " + err.Error() + req.OperationID + req.UserID log.Error(req.OperationID, errMsg) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index c46019ab4..e57b291d4 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -1193,7 +1193,7 @@ func superGroupIndexGen(groupID string, seqSuffix uint32) string { return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) } -func (d *DataBases) CleanUpUserMsgFromMongo(userID string) error { +func (d *DataBases) CleanUpUserMsgFromMongo(userID string, operationID string) error { ctx := context.Background() c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) maxSeq, err := d.GetUserMaxSeq(userID) @@ -1205,7 +1205,7 @@ func (d *DataBases) CleanUpUserMsgFromMongo(userID string) error { } seqUsers := getSeqUserIDList(userID, uint32(maxSeq)) - //bson.M{"id":bson.M{"$in":list}} + log.Error(operationID, "getSeqUserIDList", seqUsers) _, err = c.DeleteMany(ctx, bson.M{"uid": bson.M{"$in": seqUsers}}) if err == mongo.ErrNoDocuments { return nil diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 02c7dd5b5..763409228 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -85,10 +85,11 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri return nil } -func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string) error { +func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID string) error { ctx := context.Background() key := messageCache + userID + "_" + "*" vals, err := d.rdb.Keys(ctx, key).Result() + log2.Debug(operationID, "vals: ", vals) if err == redis.ErrNil { return nil } From da1df91f49ed4951f60b01f2df64a98929b2286d Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 1 Jun 2022 15:54:40 +0800 Subject: [PATCH 053/256] Clear msg --- internal/rpc/msg/chat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/chat.go b/internal/rpc/msg/chat.go index 559a88681..bb83dc055 100644 --- a/internal/rpc/msg/chat.go +++ b/internal/rpc/msg/chat.go @@ -25,7 +25,7 @@ func (rpc *rpcChat) ClearMsg(_ context.Context, req *pbChat.ClearMsgReq) (*pbCha return &pbChat.ClearMsgResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } log.Debug(req.OperationID, "CleanUpUserMsgFromMongo args", req.UserID) - err = db.DB.CleanUpUserMsgFromMongo(req.UserID) + err = db.DB.CleanUpUserMsgFromMongo(req.UserID, req.OperationID) if err != nil { errMsg := "CleanUpUserMsgFromMongo failed " + err.Error() + req.OperationID + req.UserID log.Error(req.OperationID, errMsg) From 48410c428a4600fede140790f13c9734048b2c4d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 14:28:00 +0800 Subject: [PATCH 054/256] redis update --- pkg/common/db/redisModel_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 4efc75957..2d6fb5544 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -1,6 +1,7 @@ package db import ( + "Open_IM/pkg/common/constant" pbChat "Open_IM/pkg/proto/chat" server_api_params "Open_IM/pkg/proto/sdk_ws" "context" @@ -48,10 +49,25 @@ func Test_HGetAll(t *testing.T) { func Test_NewSetMessageToCache(t *testing.T) { var msg pbChat.MsgDataToMQ + m := make(map[string]bool) + var offlinePush server_api_params.OfflinePushInfo + offlinePush.Title = "3" + offlinePush.Ex = "34" + offlinePush.IOSPushSound = "+1" + offlinePush.IOSBadgeCount = true + m[constant.IsPersistent] = true + m[constant.IsHistory] = true var data server_api_params.MsgData uid := "test_uid" data.Seq = 11 data.ClientMsgID = "23jwhjsdf" + data.SendID = "111" + data.RecvID = "222" + data.Content = []byte{1, 2, 3, 4, 5, 6, 7} + data.Seq = 1212 + data.Options = m + data.OfflinePushInfo = &offlinePush + data.AtUserIDList = []string{"1212", "23232"} msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") From a18dcfce9e1d80d094b2047df6cd59ef81340890 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:44:55 +0800 Subject: [PATCH 055/256] ws and push update --- internal/msg_gateway/gate/callback.go | 10 +- internal/msg_gateway/gate/rpc_server.go | 114 +++++++++++++++--- internal/msg_gateway/gate/ws_server.go | 47 ++++---- internal/rpc/auth/auth.go | 2 +- .../constant/platform_number_id_to_name.go | 8 +- pkg/common/db/redisModel.go | 6 +- pkg/common/token_verify/jwt_token.go | 4 +- pkg/proto/relay/relay.proto | 21 +++- pkg/utils/strings.go | 9 +- pkg/utils/utils.go | 2 +- 10 files changed, 163 insertions(+), 60 deletions(-) diff --git a/internal/msg_gateway/gate/callback.go b/internal/msg_gateway/gate/callback.go index 58d3a98b2..f005f26a2 100644 --- a/internal/msg_gateway/gate/callback.go +++ b/internal/msg_gateway/gate/callback.go @@ -8,7 +8,7 @@ import ( http2 "net/http" ) -func callbackUserOnline(operationID, userID string, platformID int32, token string) cbApi.CommonCallbackResp { +func callbackUserOnline(operationID, userID string, platformID int, token string) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackUserOnline.Enable { return callbackResp @@ -19,7 +19,7 @@ func callbackUserOnline(operationID, userID string, platformID int32, token stri CallbackCommand: constant.CallbackUserOnlineCommand, OperationID: operationID, UserID: userID, - PlatformID: platformID, + PlatformID: int32(platformID), Platform: constant.PlatformIDToName(platformID), }} callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: callbackResp} @@ -30,7 +30,7 @@ func callbackUserOnline(operationID, userID string, platformID int32, token stri return callbackResp } -func callbackUserOffline(operationID, userID string, platform string) cbApi.CommonCallbackResp { +func callbackUserOffline(operationID, userID string, platformID int) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackUserOffline.Enable { return callbackResp @@ -39,8 +39,8 @@ func callbackUserOffline(operationID, userID string, platform string) cbApi.Comm CallbackCommand: constant.CallbackUserOfflineCommand, OperationID: operationID, UserID: userID, - PlatformID: constant.PlatformNameToID(platform), - Platform: platform, + PlatformID: int32(platformID), + Platform: constant.PlatformIDToName(platformID), }} callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: callbackResp} if err := http.PostReturn(config.Config.Callback.CallbackUrl, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil { diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 555015bb7..5249bdce8 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -25,6 +25,8 @@ type RPCServer struct { rpcRegisterName string etcdSchema string etcdAddr []string + platformList []int + pushTerminal []int } func (r *RPCServer) onInit(rpcPort int) { @@ -32,6 +34,8 @@ func (r *RPCServer) onInit(rpcPort int) { r.rpcRegisterName = config.Config.RpcRegisterName.OpenImOnlineMessageRelayName r.etcdSchema = config.Config.Etcd.EtcdSchema r.etcdAddr = config.Config.Etcd.EtcdAddr + r.platformList = genPlatformArray() + r.pushTerminal = []int{constant.IOSPlatformID, constant.AndroidPlatformID} } func (r *RPCServer) run() { listenIP := "" @@ -69,7 +73,7 @@ func (r *RPCServer) run() { } func (r *RPCServer) OnlinePushMsg(_ context.Context, in *pbRelay.OnlinePushMsgReq) (*pbRelay.OnlinePushMsgResp, error) { log.NewInfo(in.OperationID, "PushMsgToUser is arriving", in.String()) - var resp []*pbRelay.SingleMsgToUser + var resp []*pbRelay.SingleMsgToUserPlatform msgBytes, _ := proto.Marshal(in.MsgData) mReply := Resp{ ReqIdentifier: constant.WSPushMsg, @@ -84,22 +88,21 @@ func (r *RPCServer) OnlinePushMsg(_ context.Context, in *pbRelay.OnlinePushMsgRe } var tag bool recvID := in.PushToUserID - platformList := genPlatformArray() - for _, v := range platformList { + for _, v := range r.platformList { if conn := ws.getUserConn(recvID, v); conn != nil { tag = true resultCode := sendMsgToUser(conn, replyBytes.Bytes(), in, v, recvID) - temp := &pbRelay.SingleMsgToUser{ + temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: resultCode, RecvID: recvID, - RecvPlatFormID: constant.PlatformNameToID(v), + RecvPlatFormID: int32(v), } resp = append(resp, temp) } else { - temp := &pbRelay.SingleMsgToUser{ + temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: -1, RecvID: recvID, - RecvPlatFormID: constant.PlatformNameToID(v), + RecvPlatFormID: int32(v), } resp = append(resp, temp) } @@ -119,19 +122,19 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser } var resp pbRelay.GetUsersOnlineStatusResp for _, userID := range req.UserIDList { - platformList := genPlatformArray() temp := new(pbRelay.GetUsersOnlineStatusResp_SuccessResult) temp.UserID = userID - for _, platform := range platformList { - if conn := ws.getUserConn(userID, platform); conn != nil { + userConnMap := ws.getUserAllCons(userID) + for platform, userConn := range userConnMap { + if userConn != nil { ps := new(pbRelay.GetUsersOnlineStatusResp_SuccessDetail) - ps.Platform = platform + ps.Platform = constant.PlatformIDToName(platform) ps.Status = constant.OnlineStatus temp.Status = constant.OnlineStatus temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, ps) - } } + if temp.Status == constant.OnlineStatus { resp.SuccessResult = append(resp.SuccessResult, temp) } @@ -139,11 +142,90 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser log.NewInfo(req.OperationID, "GetUsersOnlineStatus rpc return ", resp.String()) return &resp, nil } -func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm, RecvID string) (ResultCode int64) { +func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { + log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) + var singleUserResult []*pbRelay.SingelMsgToUserResultList + msgBytes, _ := proto.Marshal(req.MsgData) + mReply := Resp{ + ReqIdentifier: constant.WSPushMsg, + OperationID: req.OperationID, + Data: msgBytes, + } + var replyBytes bytes.Buffer + enc := gob.NewEncoder(&replyBytes) + err := enc.Encode(mReply) + if err != nil { + log.NewError(req.OperationID, "data encode err", err.Error()) + } + for _, v := range req.PushToUserIDList { + var resp []*pbRelay.SingleMsgToUserPlatform + userConnMap := ws.getUserAllCons(v) + for platform, userConn := range userConnMap { + if userConn != nil { + resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) + if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { //仅仅记录推送成功的平台端 + temp := &pbRelay.SingleMsgToUserPlatform{ + ResultCode: resultCode, + RecvID: v, + RecvPlatFormID: int32(platform), + } + resp = append(resp, temp) + } + + } + } + //for _, x := range r.platformList { + // if conn := ws.getUserConn(v, x); conn != nil { + // resultCode := sendMsgBatchToUser(conn, replyBytes.Bytes(), req, x, v) + // temp := &pbRelay.SingleMsgToUserPlatform{ + // ResultCode: resultCode, + // RecvID: v, + // RecvPlatFormID: constant.PlatformNameToID(x), + // } + // resp = append(resp, temp) + // } else { + // if utils.IsContain(x,r.pushTerminal) { + // temp := &pbRelay.SingleMsgToUserPlatform{ + // ResultCode: -1, + // RecvID: v, + // RecvPlatFormID: constant.PlatformNameToID(x), + // } + // resp = append(resp, temp) + // } + // + // } + //} + tempT := &pbRelay.SingelMsgToUserResultList{ + UserID: v, + Resp: resp, + } + singleUserResult = append(singleUserResult, tempT) + + } + + return &pbRelay.OnlineBatchPushOneMsgResp{ + SinglePushResult: singleUserResult, + }, nil +} +func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { + err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) + if err != nil { + log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), + "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) + ResultCode = -2 + return ResultCode + } else { + log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recvPlatForm", RecvPlatForm, "recvID", RecvID) + ResultCode = 0 + return ResultCode + } + +} +func sendMsgBatchToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlineBatchPushOneMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) if err != nil { log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), - "error", err, "senderPlatform", constant.PlatformIDToName(in.MsgData.SenderPlatformID), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) + "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) ResultCode = -2 return ResultCode } else { @@ -153,9 +235,9 @@ func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, Re } } -func genPlatformArray() (array []string) { +func genPlatformArray() (array []int) { for i := 1; i <= constant.LinuxPlatformID; i++ { - array = append(array, constant.PlatformIDToName(int32(i))) + array = append(array, i) } return array } diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 360b82926..e43a81f5a 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -25,15 +25,15 @@ type WServer struct { wsAddr string wsMaxConnNum int wsUpGrader *websocket.Upgrader - wsConnToUser map[*UserConn]map[string]string - wsUserToConn map[string]map[string]*UserConn + wsConnToUser map[*UserConn]map[int]string + wsUserToConn map[string]map[int]*UserConn } func (ws *WServer) onInit(wsPort int) { ws.wsAddr = ":" + utils.IntToString(wsPort) ws.wsMaxConnNum = config.Config.LongConnSvr.WebsocketMaxConnNum - ws.wsConnToUser = make(map[*UserConn]map[string]string) - ws.wsUserToConn = make(map[string]map[string]*UserConn) + ws.wsConnToUser = make(map[*UserConn]map[int]string) + ws.wsUserToConn = make(map[string]map[int]*UserConn) ws.wsUpGrader = &websocket.Upgrader{ HandshakeTimeout: time.Duration(config.Config.LongConnSvr.WebsocketTimeOut) * time.Second, ReadBufferSize: config.Config.LongConnSvr.WebsocketMaxMsgLen, @@ -62,7 +62,7 @@ func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { //Initialize a lock for each user newConn := &UserConn{conn, new(sync.Mutex)} userCount++ - ws.addUserConn(query["sendID"][0], int32(utils.StringToInt64(query["platformID"][0])), newConn, query["token"][0]) + ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0]) go ws.readMsg(newConn) } } @@ -94,11 +94,11 @@ func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { return conn.WriteMessage(a, msg) } -func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newConn *UserConn, token string, operationID string) { +func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn *UserConn, token string, operationID string) { switch config.Config.MultiLoginPolicy { case constant.AllLoginButSameTermKick: if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] - if oldConn, ok := oldConnMap[constant.PlatformIDToName(platformID)]; ok { + if oldConn, ok := oldConnMap[platformID]; ok { log.NewDebug(operationID, uid, platformID, "kick old conn") ws.sendKickMsg(oldConn, newConn) m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) @@ -122,7 +122,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo return } err = oldConn.Close() - delete(oldConnMap, constant.PlatformIDToName(platformID)) + delete(oldConnMap, platformID) ws.wsUserToConn[uid] = oldConnMap if len(oldConnMap) == 0 { delete(ws.wsUserToConn, uid) @@ -133,7 +133,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo } } else { - log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[constant.PlatformIDToName(platformID)]) + log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[platformID]) } } else { @@ -162,7 +162,7 @@ func (ws *WServer) sendKickMsg(oldConn, newConn *UserConn) { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) } } -func (ws *WServer) addUserConn(uid string, platformID int32, conn *UserConn, token string) { +func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token string) { rwLock.Lock() defer rwLock.Unlock() operationID := utils.OperationIDGenerator() @@ -172,21 +172,21 @@ func (ws *WServer) addUserConn(uid string, platformID int32, conn *UserConn, tok } ws.MultiTerminalLoginChecker(uid, platformID, conn, token, operationID) if oldConnMap, ok := ws.wsUserToConn[uid]; ok { - oldConnMap[constant.PlatformIDToName(platformID)] = conn + oldConnMap[platformID] = conn ws.wsUserToConn[uid] = oldConnMap log.Debug(operationID, "user not first come in, add conn ", uid, platformID, conn, oldConnMap) } else { - i := make(map[string]*UserConn) - i[constant.PlatformIDToName(platformID)] = conn + i := make(map[int]*UserConn) + i[platformID] = conn ws.wsUserToConn[uid] = i log.Debug(operationID, "user first come in, new user, conn", uid, platformID, conn, ws.wsUserToConn[uid]) } if oldStringMap, ok := ws.wsConnToUser[conn]; ok { - oldStringMap[constant.PlatformIDToName(platformID)] = uid + oldStringMap[platformID] = uid ws.wsConnToUser[conn] = oldStringMap } else { - i := make(map[string]string) - i[constant.PlatformIDToName(platformID)] = uid + i := make(map[int]string) + i[platformID] = uid ws.wsConnToUser[conn] = i } count := 0 @@ -200,7 +200,8 @@ func (ws *WServer) delUserConn(conn *UserConn) { rwLock.Lock() defer rwLock.Unlock() operationID := utils.OperationIDGenerator() - var platform, uid string + var uid string + var platform int if oldStringMap, ok := ws.wsConnToUser[conn]; ok { for k, v := range oldStringMap { platform = k @@ -233,7 +234,7 @@ func (ws *WServer) delUserConn(conn *UserConn) { } } -func (ws *WServer) getUserConn(uid string, platform string) *UserConn { +func (ws *WServer) getUserConn(uid string, platform int) *UserConn { rwLock.RLock() defer rwLock.RUnlock() if connMap, ok := ws.wsUserToConn[uid]; ok { @@ -243,7 +244,7 @@ func (ws *WServer) getUserConn(uid string, platform string) *UserConn { } return nil } -func (ws *WServer) getSingleUserAllConn(uid string) map[string]*UserConn { +func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn { rwLock.RLock() defer rwLock.RUnlock() if connMap, ok := ws.wsUserToConn[uid]; ok { @@ -251,7 +252,8 @@ func (ws *WServer) getSingleUserAllConn(uid string) map[string]*UserConn { } return nil } -func (ws *WServer) getUserUid(conn *UserConn) (uid, platform string) { + +func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { rwLock.RLock() defer rwLock.RUnlock() @@ -262,7 +264,7 @@ func (ws *WServer) getUserUid(conn *UserConn) (uid, platform string) { } return uid, platform } - return "", "" + return "", 0 } func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request) bool { status := http.StatusUnauthorized @@ -291,6 +293,3 @@ func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request) bool { return false } } -func genMapKey(uid string, platformID int32) string { - return uid + " " + constant.PlatformIDToName(platformID) -} diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 09b903c68..0066fc8d4 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -47,7 +47,7 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil } - tokens, expTime, err := token_verify.CreateToken(req.FromUserID, req.Platform) + tokens, expTime, err := token_verify.CreateToken(req.FromUserID, int(req.Platform)) if err != nil { errMsg := req.OperationID + " token_verify.CreateToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) log.NewError(req.OperationID, errMsg) diff --git a/pkg/common/constant/platform_number_id_to_name.go b/pkg/common/constant/platform_number_id_to_name.go index c3a970b69..cac93dea8 100644 --- a/pkg/common/constant/platform_number_id_to_name.go +++ b/pkg/common/constant/platform_number_id_to_name.go @@ -27,7 +27,7 @@ const ( TerminalMobile = "Mobile" ) -var PlatformID2Name = map[int32]string{ +var PlatformID2Name = map[int]string{ IOSPlatformID: IOSPlatformStr, AndroidPlatformID: AndroidPlatformStr, WindowsPlatformID: WindowsPlatformStr, @@ -36,7 +36,7 @@ var PlatformID2Name = map[int32]string{ MiniWebPlatformID: MiniWebPlatformStr, LinuxPlatformID: LinuxPlatformStr, } -var PlatformName2ID = map[string]int32{ +var PlatformName2ID = map[string]int{ IOSPlatformStr: IOSPlatformID, AndroidPlatformStr: AndroidPlatformID, WindowsPlatformStr: WindowsPlatformID, @@ -55,10 +55,10 @@ var Platform2class = map[string]string{ LinuxPlatformStr: TerminalPC, } -func PlatformIDToName(num int32) string { +func PlatformIDToName(num int) string { return PlatformID2Name[num] } -func PlatformNameToID(name string) int32 { +func PlatformNameToID(name string) int { return PlatformName2ID[name] } func PlatformNameToClass(name string) string { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index da5a79492..8f978dc3e 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -111,7 +111,7 @@ func (d *DataBases) DelAppleDeviceToken(accountAddress string) (err error) { } //Store userid and platform class to redis -func (d *DataBases) AddTokenFlag(userID string, platformID int32, token string, flag int) error { +func (d *DataBases) AddTokenFlag(userID string, platformID int, token string, flag int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) log2.NewDebug("", "add token key is ", key) _, err1 := d.Exec("HSet", key, token, flag) @@ -123,12 +123,12 @@ func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]i log2.NewDebug("", "get token key is ", key) return redis.IntMap(d.Exec("HGETALL", key)) } -func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int32, m map[string]int) error { +func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) return err } -func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int32, fields []string) error { +func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) return err diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 363feeedc..08ff786aa 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -37,7 +37,7 @@ func BuildClaims(uid, platform string, ttl int64) Claims { }} } -func CreateToken(userID string, platformID int32) (string, int64, error) { +func CreateToken(userID string, platformID int) (string, int64, error) { claims := BuildClaims(userID, constant.PlatformIDToName(platformID), config.Config.TokenPolicy.AccessExpire) token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString([]byte(config.Config.TokenPolicy.AccessSecret)) @@ -233,7 +233,7 @@ func WsVerifyToken(token, uid string, platformID string, operationID string) (bo if claims.UID != uid { return false, utils.Wrap(&constant.ErrTokenUnknown, "uid is not same to token uid"), "uid is not same to token uid" } - if claims.Platform != constant.PlatformIDToName(utils.StringToInt32(platformID)) { + if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { return false, utils.Wrap(&constant.ErrTokenUnknown, "platform is not same to token platform"), "platform is not same to token platform" } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index d8c5f1b7e..b02edfa2c 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -9,8 +9,22 @@ message OnlinePushMsgReq { string pushToUserID = 3; } message OnlinePushMsgResp{ -repeated SingleMsgToUser resp = 1; -}//message SendMsgByWSReq{ +repeated SingleMsgToUserPlatform resp = 1; +} +message SingelMsgToUserResultList{ + string userID =1; + repeated SingleMsgToUserPlatform resp = 2; + +} +message OnlineBatchPushOneMsgReq{ + string OperationID = 1; + server_api_params.MsgData msgData = 2; + repeated string pushToUserIDList = 3; +} +message OnlineBatchPushOneMsgResp{ + repeated SingelMsgToUserResultList singlePushResult= 1; +} +//message SendMsgByWSReq{ // string SendID = 1; // string RecvID = 2; // string Content = 3; @@ -22,7 +36,7 @@ repeated SingleMsgToUser resp = 1; // int64 PlatformID = 9; //} -message SingleMsgToUser{ +message SingleMsgToUserPlatform{ int64 ResultCode = 1; string RecvID = 2; int32 RecvPlatFormID = 3; @@ -56,6 +70,7 @@ message GetUsersOnlineStatusResp{ service OnlineMessageRelayService { rpc OnlinePushMsg(OnlinePushMsgReq) returns(OnlinePushMsgResp); rpc GetUsersOnlineStatus(GetUsersOnlineStatusReq)returns(GetUsersOnlineStatusResp); + rpc OnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); // rpc SendMsgByWS(SendMsgByWSReq) returns(MsgToUserResp); } diff --git a/pkg/utils/strings.go b/pkg/utils/strings.go index a05ba927a..0e7c16106 100644 --- a/pkg/utils/strings.go +++ b/pkg/utils/strings.go @@ -51,7 +51,14 @@ func IsContainInt32(target int32, List []int32) bool { } return false } - +func IsContainInt(target int, List []int) bool { + for _, element := range List { + if target == element { + return true + } + } + return false +} func InterfaceArrayToStringArray(data []interface{}) (i []string) { for _, param := range data { i = append(i, param.(string)) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 8626f13cb..8d144c7e8 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -149,7 +149,7 @@ func String2Pb(s string, pb proto.Message) error { return proto.Unmarshal([]byte(s), pb) } -func Map2Pb(m map[string]interface{}) (pb proto.Message, err error) { +func Map2Pb(m map[string]string) (pb proto.Message, err error) { b, err := json.Marshal(m) if err != nil { return nil, err From febc672e6eab2a2cc4b0f7d3acededdb3eaca78d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:45:48 +0800 Subject: [PATCH 056/256] ws and push update --- internal/push/logic/push_to_client.go | 196 +++++++++++++------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index cd72059dc..91a8478d9 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -36,7 +36,7 @@ type AtContent struct { var grpcCons []*grpc.ClientConn func MsgToUser(pushMsg *pbPush.PushMsgReq) { - var wsResult []*pbRelay.SingleMsgToUser + var wsResult []*pbRelay.SingleMsgToUserPlatform isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) if len(grpcCons) == 0 { @@ -132,104 +132,104 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } -func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { - return - var wsResult []*pbRelay.SingleMsgToUser - isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) - log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) - if len(grpcCons) == 0 { - log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") - grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) - } - //Online push message - log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) - for _, v := range grpcCons { - msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlinePushMsg(context.Background(), &pbRelay.OnlinePushMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserID: pushMsg.PushToUserID}) - if err != nil { - log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) - continue - } - if reply != nil && reply.Resp != nil { - wsResult = append(wsResult, reply.Resp...) - } - } - log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) - successCount++ - if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { - for _, v := range wsResult { - if v.ResultCode == 0 { - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - break - } - continue - } - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - //Use offline push messaging - var UIDList []string - UIDList = append(UIDList, v.RecvID) - customContent := OpenIMContent{ - SessionType: int(pushMsg.MsgData.SessionType), - From: pushMsg.MsgData.SendID, - To: pushMsg.MsgData.RecvID, - Seq: pushMsg.MsgData.Seq, - } - bCustomContent, _ := json.Marshal(customContent) - jsonCustomContent := string(bCustomContent) - var content string - if pushMsg.MsgData.OfflinePushInfo != nil { - content = pushMsg.MsgData.OfflinePushInfo.Title - - } else { - switch pushMsg.MsgData.ContentType { - case constant.Text: - content = constant.ContentType2PushContent[constant.Text] - case constant.Picture: - content = constant.ContentType2PushContent[constant.Picture] - case constant.Voice: - content = constant.ContentType2PushContent[constant.Voice] - case constant.Video: - content = constant.ContentType2PushContent[constant.Video] - case constant.File: - content = constant.ContentType2PushContent[constant.File] - case constant.AtText: - a := AtContent{} - _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) - if utils.IsContain(v.RecvID, a.AtUserList) { - content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] - } else { - content = constant.ContentType2PushContent[constant.GroupMsg] - } - default: - content = constant.ContentType2PushContent[constant.Common] - } - } - callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") - if callbackResp.ErrCode != 0 { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) - } - if callbackResp.ActionCode != constant.ActionAllow { - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") - break - } - if offlinePusher == nil { - offlinePusher = jpush.JPushClient - } - pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) - if err != nil { - log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) - } else { - log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) - } - break - } - - } - - } -} +//func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { +// var wsResult []*pbRelay.SingelMsgToUserResultList +// isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) +// log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) +// if len(grpcCons) == 0 { +// log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") +// grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) +// } +// //Online push message +// log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) +// for _, v := range grpcCons { +// msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) +// reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) +// if err != nil { +// log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) +// continue +// } +// if reply != nil && reply.SinglePushResult != nil { +// wsResult = append(wsResult, reply.SinglePushResult...) +// } +// } +// log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) +// successCount++ +// if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { +// for _, v := range wsResult { +// if v.ResultCode == 0 { +// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { +// break +// } +// continue +// } +// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { +// //Use offline push messaging +// var UIDList []string +// UIDList = append(UIDList, v.RecvID) +// customContent := OpenIMContent{ +// SessionType: int(pushMsg.MsgData.SessionType), +// From: pushMsg.MsgData.SendID, +// To: pushMsg.MsgData.RecvID, +// Seq: pushMsg.MsgData.Seq, +// } +// bCustomContent, _ := json.Marshal(customContent) +// jsonCustomContent := string(bCustomContent) +// var content string +// if pushMsg.MsgData.OfflinePushInfo != nil { +// content = pushMsg.MsgData.OfflinePushInfo.Title +// +// } else { +// switch pushMsg.MsgData.ContentType { +// case constant.Text: +// content = constant.ContentType2PushContent[constant.Text] +// case constant.Picture: +// content = constant.ContentType2PushContent[constant.Picture] +// case constant.Voice: +// content = constant.ContentType2PushContent[constant.Voice] +// case constant.Video: +// content = constant.ContentType2PushContent[constant.Video] +// case constant.File: +// content = constant.ContentType2PushContent[constant.File] +// case constant.AtText: +// a := AtContent{} +// _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) +// if utils.IsContain(v.RecvID, a.AtUserList) { +// content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] +// } else { +// content = constant.ContentType2PushContent[constant.GroupMsg] +// } +// default: +// content = constant.ContentType2PushContent[constant.Common] +// } +// } +// callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) +// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") +// if callbackResp.ErrCode != 0 { +// log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) +// } +// if callbackResp.ActionCode != constant.ActionAllow { +// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") +// break +// } +// +// if offlinePusher == nil { +// offlinePusher = jpush.JPushClient +// } +// pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) +// if err != nil { +// log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) +// } else { +// log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) +// } +// break +// } +// +// } +// +// } +//} //func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { // m.MsgID = rpcChat.GetMsgID(m.SendID) From 14bfd78f63e1e07ea321399a98cd72153a7cf483 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:47:48 +0800 Subject: [PATCH 057/256] ws and push update --- pkg/proto/relay/relay.pb.go | 324 ++++++++++++++++++++++++++++-------- 1 file changed, 252 insertions(+), 72 deletions(-) diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 37334a8b2..122ae56f9 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{0} + return fileDescriptor_relay_72b82cfd7861903a, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -79,17 +79,17 @@ func (m *OnlinePushMsgReq) GetPushToUserID() string { } type OnlinePushMsgResp struct { - Resp []*SingleMsgToUser `protobuf:"bytes,1,rep,name=resp" json:"resp,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Resp []*SingleMsgToUserPlatform `protobuf:"bytes,1,rep,name=resp" json:"resp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{1} + return fileDescriptor_relay_72b82cfd7861903a, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -109,14 +109,152 @@ func (m *OnlinePushMsgResp) XXX_DiscardUnknown() { var xxx_messageInfo_OnlinePushMsgResp proto.InternalMessageInfo -func (m *OnlinePushMsgResp) GetResp() []*SingleMsgToUser { +func (m *OnlinePushMsgResp) GetResp() []*SingleMsgToUserPlatform { if m != nil { return m.Resp } return nil } -type SingleMsgToUser struct { +type SingelMsgToUserResultList struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + Resp []*SingleMsgToUserPlatform `protobuf:"bytes,2,rep,name=resp" json:"resp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResultList{} } +func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } +func (*SingelMsgToUserResultList) ProtoMessage() {} +func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{2} +} +func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) +} +func (m *SingelMsgToUserResultList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SingelMsgToUserResultList.Marshal(b, m, deterministic) +} +func (dst *SingelMsgToUserResultList) XXX_Merge(src proto.Message) { + xxx_messageInfo_SingelMsgToUserResultList.Merge(dst, src) +} +func (m *SingelMsgToUserResultList) XXX_Size() int { + return xxx_messageInfo_SingelMsgToUserResultList.Size(m) +} +func (m *SingelMsgToUserResultList) XXX_DiscardUnknown() { + xxx_messageInfo_SingelMsgToUserResultList.DiscardUnknown(m) +} + +var xxx_messageInfo_SingelMsgToUserResultList proto.InternalMessageInfo + +func (m *SingelMsgToUserResultList) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *SingelMsgToUserResultList) GetResp() []*SingleMsgToUserPlatform { + if m != nil { + return m.Resp + } + return nil +} + +type OnlineBatchPushOneMsgReq struct { + OperationID string `protobuf:"bytes,1,opt,name=OperationID" json:"OperationID,omitempty"` + MsgData *sdk_ws.MsgData `protobuf:"bytes,2,opt,name=msgData" json:"msgData,omitempty"` + PushToUserIDList []string `protobuf:"bytes,3,rep,name=pushToUserIDList" json:"pushToUserIDList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgReq{} } +func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } +func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} +func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{3} +} +func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) +} +func (m *OnlineBatchPushOneMsgReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OnlineBatchPushOneMsgReq.Marshal(b, m, deterministic) +} +func (dst *OnlineBatchPushOneMsgReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_OnlineBatchPushOneMsgReq.Merge(dst, src) +} +func (m *OnlineBatchPushOneMsgReq) XXX_Size() int { + return xxx_messageInfo_OnlineBatchPushOneMsgReq.Size(m) +} +func (m *OnlineBatchPushOneMsgReq) XXX_DiscardUnknown() { + xxx_messageInfo_OnlineBatchPushOneMsgReq.DiscardUnknown(m) +} + +var xxx_messageInfo_OnlineBatchPushOneMsgReq proto.InternalMessageInfo + +func (m *OnlineBatchPushOneMsgReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *OnlineBatchPushOneMsgReq) GetMsgData() *sdk_ws.MsgData { + if m != nil { + return m.MsgData + } + return nil +} + +func (m *OnlineBatchPushOneMsgReq) GetPushToUserIDList() []string { + if m != nil { + return m.PushToUserIDList + } + return nil +} + +type OnlineBatchPushOneMsgResp struct { + SinglePushResult []*SingelMsgToUserResultList `protobuf:"bytes,1,rep,name=singlePushResult" json:"singlePushResult,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsgResp{} } +func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } +func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} +func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{4} +} +func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) +} +func (m *OnlineBatchPushOneMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OnlineBatchPushOneMsgResp.Marshal(b, m, deterministic) +} +func (dst *OnlineBatchPushOneMsgResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_OnlineBatchPushOneMsgResp.Merge(dst, src) +} +func (m *OnlineBatchPushOneMsgResp) XXX_Size() int { + return xxx_messageInfo_OnlineBatchPushOneMsgResp.Size(m) +} +func (m *OnlineBatchPushOneMsgResp) XXX_DiscardUnknown() { + xxx_messageInfo_OnlineBatchPushOneMsgResp.DiscardUnknown(m) +} + +var xxx_messageInfo_OnlineBatchPushOneMsgResp proto.InternalMessageInfo + +func (m *OnlineBatchPushOneMsgResp) GetSinglePushResult() []*SingelMsgToUserResultList { + if m != nil { + return m.SinglePushResult + } + return nil +} + +type SingleMsgToUserPlatform struct { ResultCode int64 `protobuf:"varint,1,opt,name=ResultCode" json:"ResultCode,omitempty"` RecvID string `protobuf:"bytes,2,opt,name=RecvID" json:"RecvID,omitempty"` RecvPlatFormID int32 `protobuf:"varint,3,opt,name=RecvPlatFormID" json:"RecvPlatFormID,omitempty"` @@ -125,45 +263,45 @@ type SingleMsgToUser struct { XXX_sizecache int32 `json:"-"` } -func (m *SingleMsgToUser) Reset() { *m = SingleMsgToUser{} } -func (m *SingleMsgToUser) String() string { return proto.CompactTextString(m) } -func (*SingleMsgToUser) ProtoMessage() {} -func (*SingleMsgToUser) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{2} +func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform{} } +func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } +func (*SingleMsgToUserPlatform) ProtoMessage() {} +func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_72b82cfd7861903a, []int{5} } -func (m *SingleMsgToUser) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SingleMsgToUser.Unmarshal(m, b) +func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) } -func (m *SingleMsgToUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SingleMsgToUser.Marshal(b, m, deterministic) +func (m *SingleMsgToUserPlatform) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SingleMsgToUserPlatform.Marshal(b, m, deterministic) } -func (dst *SingleMsgToUser) XXX_Merge(src proto.Message) { - xxx_messageInfo_SingleMsgToUser.Merge(dst, src) +func (dst *SingleMsgToUserPlatform) XXX_Merge(src proto.Message) { + xxx_messageInfo_SingleMsgToUserPlatform.Merge(dst, src) } -func (m *SingleMsgToUser) XXX_Size() int { - return xxx_messageInfo_SingleMsgToUser.Size(m) +func (m *SingleMsgToUserPlatform) XXX_Size() int { + return xxx_messageInfo_SingleMsgToUserPlatform.Size(m) } -func (m *SingleMsgToUser) XXX_DiscardUnknown() { - xxx_messageInfo_SingleMsgToUser.DiscardUnknown(m) +func (m *SingleMsgToUserPlatform) XXX_DiscardUnknown() { + xxx_messageInfo_SingleMsgToUserPlatform.DiscardUnknown(m) } -var xxx_messageInfo_SingleMsgToUser proto.InternalMessageInfo +var xxx_messageInfo_SingleMsgToUserPlatform proto.InternalMessageInfo -func (m *SingleMsgToUser) GetResultCode() int64 { +func (m *SingleMsgToUserPlatform) GetResultCode() int64 { if m != nil { return m.ResultCode } return 0 } -func (m *SingleMsgToUser) GetRecvID() string { +func (m *SingleMsgToUserPlatform) GetRecvID() string { if m != nil { return m.RecvID } return "" } -func (m *SingleMsgToUser) GetRecvPlatFormID() int32 { +func (m *SingleMsgToUserPlatform) GetRecvPlatFormID() int32 { if m != nil { return m.RecvPlatFormID } @@ -183,7 +321,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{3} + return fileDescriptor_relay_72b82cfd7861903a, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -238,7 +376,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4} + return fileDescriptor_relay_72b82cfd7861903a, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -300,7 +438,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4, 0} + return fileDescriptor_relay_72b82cfd7861903a, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -347,7 +485,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4, 1} + return fileDescriptor_relay_72b82cfd7861903a, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -403,7 +541,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_34094e5333f6005a, []int{4, 2} + return fileDescriptor_relay_72b82cfd7861903a, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -447,7 +585,10 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) GetDetailPlatformStatus() []*Ge func init() { proto.RegisterType((*OnlinePushMsgReq)(nil), "relay.OnlinePushMsgReq") proto.RegisterType((*OnlinePushMsgResp)(nil), "relay.OnlinePushMsgResp") - proto.RegisterType((*SingleMsgToUser)(nil), "relay.SingleMsgToUser") + proto.RegisterType((*SingelMsgToUserResultList)(nil), "relay.SingelMsgToUserResultList") + proto.RegisterType((*OnlineBatchPushOneMsgReq)(nil), "relay.OnlineBatchPushOneMsgReq") + proto.RegisterType((*OnlineBatchPushOneMsgResp)(nil), "relay.OnlineBatchPushOneMsgResp") + proto.RegisterType((*SingleMsgToUserPlatform)(nil), "relay.SingleMsgToUserPlatform") proto.RegisterType((*GetUsersOnlineStatusReq)(nil), "relay.GetUsersOnlineStatusReq") proto.RegisterType((*GetUsersOnlineStatusResp)(nil), "relay.GetUsersOnlineStatusResp") proto.RegisterType((*GetUsersOnlineStatusResp_SuccessDetail)(nil), "relay.GetUsersOnlineStatusResp.SuccessDetail") @@ -468,6 +609,7 @@ const _ = grpc.SupportPackageIsVersion4 type OnlineMessageRelayServiceClient interface { OnlinePushMsg(ctx context.Context, in *OnlinePushMsgReq, opts ...grpc.CallOption) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error) + OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) } type onlineMessageRelayServiceClient struct { @@ -496,11 +638,21 @@ func (c *onlineMessageRelayServiceClient) GetUsersOnlineStatus(ctx context.Conte return out, nil } +func (c *onlineMessageRelayServiceClient) OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) { + out := new(OnlineBatchPushOneMsgResp) + err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/OnlineBatchPushOneMsg", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for OnlineMessageRelayService service type OnlineMessageRelayServiceServer interface { OnlinePushMsg(context.Context, *OnlinePushMsgReq) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(context.Context, *GetUsersOnlineStatusReq) (*GetUsersOnlineStatusResp, error) + OnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) } func RegisterOnlineMessageRelayServiceServer(s *grpc.Server, srv OnlineMessageRelayServiceServer) { @@ -543,6 +695,24 @@ func _OnlineMessageRelayService_GetUsersOnlineStatus_Handler(srv interface{}, ct return interceptor(ctx, in, info, handler) } +func _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OnlineBatchPushOneMsgReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlineMessageRelayServiceServer).OnlineBatchPushOneMsg(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/relay.OnlineMessageRelayService/OnlineBatchPushOneMsg", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlineMessageRelayServiceServer).OnlineBatchPushOneMsg(ctx, req.(*OnlineBatchPushOneMsgReq)) + } + return interceptor(ctx, in, info, handler) +} + var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ ServiceName: "relay.OnlineMessageRelayService", HandlerType: (*OnlineMessageRelayServiceServer)(nil), @@ -555,48 +725,58 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ MethodName: "GetUsersOnlineStatus", Handler: _OnlineMessageRelayService_GetUsersOnlineStatus_Handler, }, + { + MethodName: "OnlineBatchPushOneMsg", + Handler: _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_34094e5333f6005a) } - -var fileDescriptor_relay_34094e5333f6005a = []byte{ - // 554 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x5d, 0x8f, 0xd2, 0x40, - 0x14, 0x4d, 0x65, 0x3f, 0xdc, 0x0b, 0xb8, 0x32, 0xd9, 0xec, 0xd6, 0x3e, 0x20, 0xf6, 0xc1, 0x10, - 0xa3, 0x25, 0x41, 0xdf, 0x7c, 0x30, 0xd9, 0x25, 0x6b, 0x48, 0x6c, 0x20, 0x83, 0x46, 0xe3, 0x0b, - 0x99, 0x85, 0xbb, 0xdd, 0x66, 0x0b, 0x1d, 0xe6, 0xb6, 0x10, 0xff, 0x84, 0x3f, 0xc2, 0x3f, 0xa1, - 0x3f, 0xcf, 0x74, 0xa6, 0x60, 0x4b, 0x58, 0x37, 0xfb, 0x42, 0x38, 0x77, 0xee, 0x3d, 0xf7, 0x9c, - 0xd3, 0x76, 0xa0, 0xa1, 0x30, 0x12, 0x3f, 0x3a, 0xfa, 0xd7, 0x93, 0x2a, 0x4e, 0x62, 0xb6, 0xaf, - 0x81, 0xf3, 0x62, 0x20, 0x71, 0x3e, 0xee, 0xfb, 0x1d, 0x79, 0x1b, 0x74, 0xf4, 0x49, 0x87, 0xa6, - 0xb7, 0xe3, 0x15, 0x75, 0x56, 0x64, 0x3a, 0xdd, 0x9f, 0x16, 0x3c, 0x1d, 0xcc, 0xa3, 0x70, 0x8e, - 0xc3, 0x94, 0x6e, 0x7c, 0x0a, 0x38, 0x2e, 0x58, 0x0b, 0xaa, 0x03, 0x89, 0x4a, 0x24, 0x61, 0x3c, - 0xef, 0xf7, 0x6c, 0xab, 0x65, 0xb5, 0x8f, 0x78, 0xb1, 0xc4, 0xde, 0xc1, 0xe1, 0x8c, 0x82, 0x9e, - 0x48, 0x84, 0xfd, 0xa8, 0x65, 0xb5, 0xab, 0x5d, 0xc7, 0x23, 0x54, 0x4b, 0x54, 0x63, 0x21, 0xc3, - 0xb1, 0x14, 0x4a, 0xcc, 0xc8, 0xf3, 0x4d, 0x07, 0x5f, 0xb7, 0x32, 0x17, 0x6a, 0x32, 0xa5, 0x9b, - 0xcf, 0xf1, 0x17, 0x42, 0xd5, 0xef, 0xd9, 0x15, 0x4d, 0x5c, 0xaa, 0xb9, 0x1f, 0xa0, 0xb1, 0xa5, - 0x87, 0x24, 0x7b, 0x05, 0x7b, 0x0a, 0x49, 0xda, 0x56, 0xab, 0xd2, 0xae, 0x76, 0x4f, 0x3d, 0xe3, - 0x75, 0x14, 0xce, 0x83, 0x08, 0x7d, 0x0a, 0xcc, 0x30, 0xd7, 0x3d, 0xee, 0x02, 0x8e, 0xb7, 0x0e, - 0x58, 0x13, 0x80, 0x23, 0xa5, 0x51, 0x72, 0x11, 0x4f, 0x51, 0xdb, 0xa9, 0xf0, 0x42, 0x85, 0x9d, - 0xc2, 0x01, 0xc7, 0xc9, 0xb2, 0xdf, 0xd3, 0x66, 0x8e, 0x78, 0x8e, 0xd8, 0x4b, 0x78, 0x92, 0xfd, - 0x1b, 0x46, 0x22, 0xb9, 0x8c, 0xd5, 0x2c, 0x57, 0xbc, 0xcf, 0xb7, 0xaa, 0xee, 0x0a, 0xce, 0x3e, - 0x62, 0x92, 0xad, 0x22, 0xa3, 0x7d, 0x94, 0x88, 0x24, 0xa5, 0x2c, 0xca, 0x26, 0x40, 0xaa, 0x8d, - 0x7d, 0x0a, 0x29, 0xd1, 0xfa, 0x8f, 0x78, 0xa1, 0x92, 0x45, 0x1d, 0x17, 0xa2, 0x36, 0xfb, 0x8b, - 0x25, 0xe6, 0xc0, 0xe3, 0x58, 0x96, 0x02, 0xdb, 0x60, 0xf7, 0xf7, 0x1e, 0xd8, 0xbb, 0x37, 0x93, - 0x64, 0x36, 0x1c, 0xa2, 0x52, 0x1b, 0xcb, 0xfb, 0x7c, 0x0d, 0x33, 0xbf, 0xa8, 0x94, 0x4f, 0xc1, - 0xda, 0xaf, 0x41, 0x6c, 0x04, 0x75, 0x4a, 0x27, 0x13, 0x24, 0x32, 0xe1, 0xd8, 0x15, 0x9d, 0xf7, - 0x9b, 0x3c, 0xef, 0xbb, 0x36, 0x79, 0xa3, 0xe2, 0x10, 0x2f, 0x73, 0xb0, 0x21, 0xd4, 0xae, 0x45, - 0x18, 0xe1, 0x34, 0xe7, 0xdc, 0xd3, 0x9c, 0xaf, 0xef, 0xe3, 0xbc, 0xd4, 0x33, 0x3d, 0x4c, 0x44, - 0x18, 0xf1, 0x12, 0x83, 0x73, 0x01, 0xf5, 0x7c, 0xa3, 0x39, 0xce, 0x22, 0x92, 0x91, 0x48, 0xae, - 0x63, 0x35, 0xcb, 0x5f, 0xd6, 0x0d, 0xce, 0xbc, 0x92, 0x66, 0x5d, 0x7b, 0x35, 0xc8, 0xf9, 0x06, - 0xb5, 0xe2, 0x8a, 0xac, 0x2f, 0x2d, 0x86, 0x9c, 0xa3, 0x87, 0xa7, 0xe8, 0xfc, 0xb2, 0x36, 0xfa, - 0xf2, 0x08, 0xfe, 0x71, 0x5b, 0x25, 0xee, 0x3b, 0xb4, 0x31, 0x01, 0x27, 0x53, 0xad, 0x6a, 0x98, - 0xbb, 0x30, 0xb9, 0x3c, 0xf0, 0x71, 0xe4, 0xd9, 0xed, 0xa4, 0xea, 0xfe, 0xb1, 0xe0, 0x99, 0x19, - 0xf4, 0x91, 0x48, 0x04, 0xc8, 0x33, 0xce, 0x11, 0xaa, 0x65, 0x38, 0x41, 0x76, 0x0e, 0xf5, 0xd2, - 0x47, 0xc8, 0xce, 0xf2, 0x9d, 0xdb, 0x57, 0x85, 0x63, 0xef, 0x3e, 0x20, 0xc9, 0xbe, 0xc2, 0xc9, - 0x2e, 0x85, 0xac, 0xf9, 0x5f, 0xf9, 0x0b, 0xe7, 0xf9, 0x3d, 0xf6, 0xce, 0x1b, 0xdf, 0x8f, 0x3d, - 0x73, 0xdb, 0xbd, 0x97, 0x57, 0x5a, 0xf6, 0xd5, 0x81, 0xbe, 0xcc, 0xde, 0xfe, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0x8e, 0xdc, 0xcc, 0x70, 0x0b, 0x05, 0x00, 0x00, +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_72b82cfd7861903a) } + +var fileDescriptor_relay_72b82cfd7861903a = []byte{ + // 656 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4e, + 0x10, 0x95, 0x31, 0x7f, 0x7e, 0x0c, 0xf0, 0x2b, 0xac, 0x68, 0x31, 0x3e, 0x04, 0xd7, 0x87, 0x2a, + 0xaa, 0xda, 0x44, 0x4a, 0x7b, 0xeb, 0x0d, 0x22, 0x50, 0x24, 0xa2, 0xa0, 0x4d, 0xab, 0x56, 0x5c, + 0xa2, 0x25, 0x59, 0x8c, 0x85, 0x13, 0x2f, 0x3b, 0x36, 0x88, 0x2f, 0xd1, 0x53, 0xcf, 0x3d, 0xf4, + 0x4b, 0xf4, 0xeb, 0x55, 0xfb, 0x27, 0xa9, 0x0d, 0x0e, 0x28, 0x87, 0x5e, 0xa2, 0xcc, 0xec, 0xec, + 0x9b, 0xf7, 0xde, 0xec, 0xae, 0x61, 0x47, 0xf2, 0x84, 0xdd, 0x37, 0xf5, 0x6f, 0x43, 0xc8, 0x34, + 0x4b, 0xc9, 0x8a, 0x0e, 0xfc, 0xd7, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa3, 0xa6, + 0x5e, 0x69, 0xe2, 0xe8, 0x7a, 0x70, 0x87, 0xcd, 0x3b, 0x34, 0x95, 0xe1, 0x77, 0x07, 0xb6, 0x7b, + 0x93, 0x24, 0x9e, 0xf0, 0xb3, 0x1c, 0xaf, 0xba, 0x18, 0x51, 0x7e, 0x43, 0x02, 0xd8, 0xe8, 0x09, + 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x4e, 0x8b, 0x29, 0xf2, 0x11, + 0xd6, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0xa5, 0xc0, 0xa9, 0x6f, 0xb4, 0xfc, 0x06, 0x72, 0x79, + 0xcb, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, + 0x10, 0x36, 0x45, 0x8e, 0x57, 0x9f, 0xd3, 0x2f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0x1a, 0xb8, 0x94, + 0x0b, 0x4f, 0x60, 0xe7, 0x01, 0x1f, 0x14, 0xa4, 0x05, 0xcb, 0x92, 0xa3, 0xf0, 0x9c, 0xc0, 0xad, + 0x6f, 0xb4, 0x6a, 0x0d, 0xa3, 0xb5, 0x1f, 0x4f, 0xa2, 0x84, 0x77, 0x31, 0x32, 0x9b, 0xcf, 0x12, + 0x96, 0x5d, 0xa6, 0x72, 0x4c, 0x75, 0x6d, 0x18, 0xc1, 0xbe, 0x2a, 0xe0, 0xc9, 0xac, 0x80, 0x72, + 0xcc, 0x93, 0xec, 0x34, 0xc6, 0x8c, 0xbc, 0x82, 0xd5, 0xdc, 0x70, 0x30, 0xe2, 0x6c, 0x34, 0x6b, + 0xb4, 0xb4, 0x40, 0xa3, 0x9f, 0x0e, 0x78, 0x86, 0xf2, 0x21, 0xcb, 0x86, 0x57, 0x8a, 0x77, 0x6f, + 0xc2, 0xff, 0xb1, 0x95, 0x6f, 0x61, 0xbb, 0x68, 0x9b, 0x12, 0xe5, 0xb9, 0x81, 0x5b, 0x5f, 0xa7, + 0x8f, 0xf2, 0x61, 0x0c, 0xfb, 0x73, 0xf8, 0xa1, 0x20, 0xa7, 0xb0, 0x8d, 0x5a, 0x9e, 0xca, 0x1b, + 0x87, 0xac, 0xcd, 0x41, 0x41, 0x7d, 0xa5, 0x8b, 0xf4, 0xd1, 0xce, 0xf0, 0x1e, 0xf6, 0xe6, 0x98, + 0x45, 0x6a, 0x00, 0xa6, 0xe8, 0x28, 0x1d, 0x71, 0x6d, 0x84, 0x4b, 0x0b, 0x19, 0x35, 0x12, 0xca, + 0x87, 0xb7, 0x9d, 0xb6, 0xb6, 0x61, 0x9d, 0xda, 0x88, 0xbc, 0x81, 0xff, 0xd5, 0x3f, 0x85, 0x73, + 0x9c, 0xca, 0xb1, 0x3d, 0x36, 0x2b, 0xf4, 0x41, 0x36, 0xbc, 0x83, 0xbd, 0x13, 0x9e, 0xa9, 0x96, + 0x68, 0xd4, 0xf6, 0x33, 0x96, 0xe5, 0xa8, 0x86, 0x50, 0x03, 0xc8, 0xff, 0xda, 0xe4, 0x68, 0x9b, + 0x0a, 0x19, 0x35, 0xa4, 0xb4, 0x30, 0x24, 0xd3, 0xbf, 0x98, 0x22, 0x3e, 0xfc, 0x97, 0x8a, 0xd2, + 0xa9, 0x9d, 0xc5, 0xe1, 0xef, 0x65, 0xf0, 0xaa, 0x3b, 0xa3, 0x20, 0x1e, 0xac, 0x71, 0x29, 0x67, + 0x92, 0x57, 0xe8, 0x34, 0x54, 0x7a, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7a, 0x4d, 0x44, 0xfa, 0xb0, + 0x85, 0xf9, 0x70, 0xc8, 0x11, 0xed, 0x34, 0x5c, 0x3d, 0x8d, 0xf7, 0x76, 0x1a, 0xf3, 0x3a, 0x35, + 0xfa, 0xc5, 0x4d, 0xb4, 0x8c, 0x41, 0xce, 0x60, 0xf3, 0x92, 0xc5, 0x09, 0x1f, 0x59, 0xcc, 0x65, + 0x8d, 0xf9, 0xee, 0x39, 0xcc, 0x63, 0xbd, 0xa7, 0xcd, 0x33, 0x16, 0x27, 0xb4, 0x84, 0xe0, 0x1f, + 0xc1, 0x96, 0xed, 0x68, 0x96, 0x95, 0x45, 0xc2, 0xce, 0xda, 0x1e, 0xf3, 0x59, 0xac, 0xb4, 0xa2, + 0x46, 0x9d, 0x6a, 0x35, 0x91, 0xff, 0x0d, 0x36, 0x8b, 0x2d, 0x0a, 0xd7, 0xd2, 0x2d, 0x5d, 0xcb, + 0x85, 0x5d, 0xf4, 0x7f, 0x39, 0x33, 0x7e, 0xd6, 0x82, 0x79, 0x57, 0x7e, 0x0e, 0x37, 0xc2, 0x60, + 0x77, 0xa4, 0x59, 0x4d, 0x4f, 0xb0, 0xf1, 0x65, 0xc1, 0x71, 0x58, 0xef, 0x2a, 0xa1, 0x5a, 0x3f, + 0x96, 0xa6, 0x37, 0xb3, 0xcb, 0x11, 0x59, 0xc4, 0xa9, 0xc2, 0xec, 0x73, 0x79, 0x1b, 0x0f, 0x39, + 0x39, 0x84, 0xad, 0xd2, 0x4b, 0x48, 0xf6, 0x6c, 0xcf, 0x87, 0xef, 0xb5, 0xef, 0x55, 0x2f, 0xa0, + 0x20, 0x5f, 0x61, 0xb7, 0x8a, 0x21, 0xa9, 0x3d, 0x49, 0xff, 0xc6, 0x3f, 0x78, 0x46, 0x1e, 0x39, + 0x87, 0x97, 0x95, 0x6f, 0x0a, 0x39, 0x28, 0x71, 0x79, 0xfc, 0x22, 0xfa, 0xc1, 0xd3, 0x05, 0x28, + 0x0e, 0x77, 0xce, 0x5f, 0x34, 0xcc, 0xe7, 0xec, 0x93, 0xb8, 0xd0, 0x96, 0x5c, 0xac, 0xea, 0xaf, + 0xd5, 0x87, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x04, 0x75, 0xfe, 0xf6, 0xec, 0x06, 0x00, 0x00, } From 5af3ba9db6b1f32a8d2c1cd9130204e96880dfa6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:48:56 +0800 Subject: [PATCH 058/256] ws and push update --- internal/push/logic/push_to_client.go | 195 +++++++++++++------------- 1 file changed, 98 insertions(+), 97 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 91a8478d9..c1d183691 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -133,103 +133,104 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } } -//func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { -// var wsResult []*pbRelay.SingelMsgToUserResultList -// isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) -// log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) -// if len(grpcCons) == 0 { -// log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") -// grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) -// } -// //Online push message -// log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) -// for _, v := range grpcCons { -// msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) -// reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) -// if err != nil { -// log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) -// continue -// } -// if reply != nil && reply.SinglePushResult != nil { -// wsResult = append(wsResult, reply.SinglePushResult...) -// } -// } -// log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) -// successCount++ -// if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { -// for _, v := range wsResult { -// if v.ResultCode == 0 { -// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { -// break -// } -// continue -// } -// if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { -// //Use offline push messaging -// var UIDList []string -// UIDList = append(UIDList, v.RecvID) -// customContent := OpenIMContent{ -// SessionType: int(pushMsg.MsgData.SessionType), -// From: pushMsg.MsgData.SendID, -// To: pushMsg.MsgData.RecvID, -// Seq: pushMsg.MsgData.Seq, -// } -// bCustomContent, _ := json.Marshal(customContent) -// jsonCustomContent := string(bCustomContent) -// var content string -// if pushMsg.MsgData.OfflinePushInfo != nil { -// content = pushMsg.MsgData.OfflinePushInfo.Title -// -// } else { -// switch pushMsg.MsgData.ContentType { -// case constant.Text: -// content = constant.ContentType2PushContent[constant.Text] -// case constant.Picture: -// content = constant.ContentType2PushContent[constant.Picture] -// case constant.Voice: -// content = constant.ContentType2PushContent[constant.Voice] -// case constant.Video: -// content = constant.ContentType2PushContent[constant.Video] -// case constant.File: -// content = constant.ContentType2PushContent[constant.File] -// case constant.AtText: -// a := AtContent{} -// _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) -// if utils.IsContain(v.RecvID, a.AtUserList) { -// content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] -// } else { -// content = constant.ContentType2PushContent[constant.GroupMsg] -// } -// default: -// content = constant.ContentType2PushContent[constant.Common] -// } -// } -// callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) -// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") -// if callbackResp.ErrCode != 0 { -// log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) -// } -// if callbackResp.ActionCode != constant.ActionAllow { -// log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") -// break -// } -// -// if offlinePusher == nil { -// offlinePusher = jpush.JPushClient -// } -// pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) -// if err != nil { -// log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) -// } else { -// log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) -// } -// break -// } -// -// } -// -// } -//} +func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { + return + //var wsResult []*pbRelay.SingelMsgToUserResultList + //isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) + //log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) + //if len(grpcCons) == 0 { + // log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") + // grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + //} + ////Online push message + //log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + //for _, v := range grpcCons { + // msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) + // reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) + // if err != nil { + // log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + // continue + // } + // if reply != nil && reply.SinglePushResult != nil { + // wsResult = append(wsResult, reply.SinglePushResult...) + // } + //} + //log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + //successCount++ + //if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { + // for _, v := range wsResult { + // if v.ResultCode == 0 { + // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + // break + // } + // continue + // } + // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { + // //Use offline push messaging + // var UIDList []string + // UIDList = append(UIDList, v.RecvID) + // customContent := OpenIMContent{ + // SessionType: int(pushMsg.MsgData.SessionType), + // From: pushMsg.MsgData.SendID, + // To: pushMsg.MsgData.RecvID, + // Seq: pushMsg.MsgData.Seq, + // } + // bCustomContent, _ := json.Marshal(customContent) + // jsonCustomContent := string(bCustomContent) + // var content string + // if pushMsg.MsgData.OfflinePushInfo != nil { + // content = pushMsg.MsgData.OfflinePushInfo.Title + // + // } else { + // switch pushMsg.MsgData.ContentType { + // case constant.Text: + // content = constant.ContentType2PushContent[constant.Text] + // case constant.Picture: + // content = constant.ContentType2PushContent[constant.Picture] + // case constant.Voice: + // content = constant.ContentType2PushContent[constant.Voice] + // case constant.Video: + // content = constant.ContentType2PushContent[constant.Video] + // case constant.File: + // content = constant.ContentType2PushContent[constant.File] + // case constant.AtText: + // a := AtContent{} + // _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + // if utils.IsContain(v.RecvID, a.AtUserList) { + // content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] + // } else { + // content = constant.ContentType2PushContent[constant.GroupMsg] + // } + // default: + // content = constant.ContentType2PushContent[constant.Common] + // } + // } + // callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) + // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + // if callbackResp.ErrCode != 0 { + // log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + // } + // if callbackResp.ActionCode != constant.ActionAllow { + // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + // break + // } + // + // if offlinePusher == nil { + // offlinePusher = jpush.JPushClient + // } + // pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) + // if err != nil { + // log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + // } else { + // log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) + // } + // break + // } + // + // } + // + //} +} //func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { // m.MsgID = rpcChat.GetMsgID(m.SendID) From 1aacd3cb23879361dbda3ba6494fc87a3b0feb6b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 16:51:31 +0800 Subject: [PATCH 059/256] ws and push update --- internal/push/logic/callback.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/callback.go b/internal/push/logic/callback.go index 655751dc2..2d445e666 100644 --- a/internal/push/logic/callback.go +++ b/internal/push/logic/callback.go @@ -20,7 +20,7 @@ func callbackOfflinePush(operationID, userID string, info *commonPb.OfflinePushI OperationID: operationID, UserID: userID, PlatformID: platformID, - Platform: constant.PlatformIDToName(platformID), + Platform: constant.PlatformIDToName(int(platformID)), }, OfflinePushInfo: info, } From 0a260a67d5833a5d32d86a2509588df413a073a9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 2 Jun 2022 17:37:00 +0800 Subject: [PATCH 060/256] ws and push update --- internal/msg_gateway/gate/rpc_server.go | 33 ++---- internal/push/logic/push_to_client.go | 129 +++++++++++------------- pkg/proto/relay/relay.pb.go | 121 ++++++++++++---------- pkg/proto/relay/relay.proto | 1 + 4 files changed, 134 insertions(+), 150 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 5249bdce8..2ee614c2d 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -159,11 +159,16 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } for _, v := range req.PushToUserIDList { var resp []*pbRelay.SingleMsgToUserPlatform + tempT := &pbRelay.SingelMsgToUserResultList{ + UserID: v, + } userConnMap := ws.getUserAllCons(v) for platform, userConn := range userConnMap { if userConn != nil { resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) - if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { //仅仅记录推送成功的平台端 + if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { + tempT.OnlinePush = true + log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: resultCode, RecvID: v, @@ -174,31 +179,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } } - //for _, x := range r.platformList { - // if conn := ws.getUserConn(v, x); conn != nil { - // resultCode := sendMsgBatchToUser(conn, replyBytes.Bytes(), req, x, v) - // temp := &pbRelay.SingleMsgToUserPlatform{ - // ResultCode: resultCode, - // RecvID: v, - // RecvPlatFormID: constant.PlatformNameToID(x), - // } - // resp = append(resp, temp) - // } else { - // if utils.IsContain(x,r.pushTerminal) { - // temp := &pbRelay.SingleMsgToUserPlatform{ - // ResultCode: -1, - // RecvID: v, - // RecvPlatFormID: constant.PlatformNameToID(x), - // } - // resp = append(resp, temp) - // } - // - // } - //} - tempT := &pbRelay.SingelMsgToUserResultList{ - UserID: v, - Resp: resp, - } + tempT.Resp = resp singleUserResult = append(singleUserResult, tempT) } diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index c1d183691..589605e02 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -36,7 +36,7 @@ type AtContent struct { var grpcCons []*grpc.ClientConn func MsgToUser(pushMsg *pbPush.PushMsgReq) { - var wsResult []*pbRelay.SingleMsgToUserPlatform + var wsResult []*pbRelay.SingelMsgToUserResultList isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) if len(grpcCons) == 0 { @@ -47,90 +47,83 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlinePushMsg(context.Background(), &pbRelay.OnlinePushMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserID: pushMsg.PushToUserID}) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue } - if reply != nil && reply.Resp != nil { - wsResult = append(wsResult, reply.Resp...) + if reply != nil && reply.SinglePushResult != nil { + wsResult = append(wsResult, reply.SinglePushResult...) } } log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) successCount++ if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { for _, v := range wsResult { - if v.ResultCode == 0 { - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - break - } - continue + if v.OnlinePush { + return } - if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - //Use offline push messaging - var UIDList []string - UIDList = append(UIDList, v.RecvID) - customContent := OpenIMContent{ - SessionType: int(pushMsg.MsgData.SessionType), - From: pushMsg.MsgData.SendID, - To: pushMsg.MsgData.RecvID, - Seq: pushMsg.MsgData.Seq, - } - bCustomContent, _ := json.Marshal(customContent) - jsonCustomContent := string(bCustomContent) - var content string - if pushMsg.MsgData.OfflinePushInfo != nil { - content = pushMsg.MsgData.OfflinePushInfo.Title + } + //Use offline push messaging + var UIDList []string + UIDList = append(UIDList, pushMsg.PushToUserID) + customContent := OpenIMContent{ + SessionType: int(pushMsg.MsgData.SessionType), + From: pushMsg.MsgData.SendID, + To: pushMsg.MsgData.RecvID, + Seq: pushMsg.MsgData.Seq, + } + bCustomContent, _ := json.Marshal(customContent) + jsonCustomContent := string(bCustomContent) + var content string + if pushMsg.MsgData.OfflinePushInfo != nil { + content = pushMsg.MsgData.OfflinePushInfo.Title + } else { + switch pushMsg.MsgData.ContentType { + case constant.Text: + content = constant.ContentType2PushContent[constant.Text] + case constant.Picture: + content = constant.ContentType2PushContent[constant.Picture] + case constant.Voice: + content = constant.ContentType2PushContent[constant.Voice] + case constant.Video: + content = constant.ContentType2PushContent[constant.Video] + case constant.File: + content = constant.ContentType2PushContent[constant.File] + case constant.AtText: + a := AtContent{} + _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + if utils.IsContain(pushMsg.PushToUserID, a.AtUserList) { + content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] } else { - switch pushMsg.MsgData.ContentType { - case constant.Text: - content = constant.ContentType2PushContent[constant.Text] - case constant.Picture: - content = constant.ContentType2PushContent[constant.Picture] - case constant.Voice: - content = constant.ContentType2PushContent[constant.Voice] - case constant.Video: - content = constant.ContentType2PushContent[constant.Video] - case constant.File: - content = constant.ContentType2PushContent[constant.File] - case constant.AtText: - a := AtContent{} - _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) - if utils.IsContain(v.RecvID, a.AtUserList) { - content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] - } else { - content = constant.ContentType2PushContent[constant.GroupMsg] - } - default: - content = constant.ContentType2PushContent[constant.Common] - } - } - callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") - if callbackResp.ErrCode != 0 { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + content = constant.ContentType2PushContent[constant.GroupMsg] } - if callbackResp.ActionCode != constant.ActionAllow { - log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") - break - } - - if offlinePusher == nil { - offlinePusher = jpush.JPushClient - } - pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) - if err != nil { - log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) - } else { - log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) - } - break + default: + content = constant.ContentType2PushContent[constant.Common] } - + } + callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, constant.AndroidPlatformID) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + if callbackResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + return + } + if offlinePusher == nil { + offlinePusher = jpush.JPushClient + } + pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) + if err != nil { + log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + } else { + log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) } } + } func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { @@ -155,7 +148,7 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { // wsResult = append(wsResult, reply.SinglePushResult...) // } //} - //log.NewInfo(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + //log.Debug(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) //successCount++ //if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { // for _, v := range wsResult { diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 122ae56f9..5fecfadd6 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{0} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{1} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -119,6 +119,7 @@ func (m *OnlinePushMsgResp) GetResp() []*SingleMsgToUserPlatform { type SingelMsgToUserResultList struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` Resp []*SingleMsgToUserPlatform `protobuf:"bytes,2,rep,name=resp" json:"resp,omitempty"` + OnlinePush bool `protobuf:"varint,3,opt,name=onlinePush" json:"onlinePush,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -128,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{2} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -162,6 +163,13 @@ func (m *SingelMsgToUserResultList) GetResp() []*SingleMsgToUserPlatform { return nil } +func (m *SingelMsgToUserResultList) GetOnlinePush() bool { + if m != nil { + return m.OnlinePush + } + return false +} + type OnlineBatchPushOneMsgReq struct { OperationID string `protobuf:"bytes,1,opt,name=OperationID" json:"OperationID,omitempty"` MsgData *sdk_ws.MsgData `protobuf:"bytes,2,opt,name=msgData" json:"msgData,omitempty"` @@ -175,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{3} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -227,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{4} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -267,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{5} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -321,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{6} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -376,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -438,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7, 0} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -485,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7, 1} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -541,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_72b82cfd7861903a, []int{7, 2} + return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -734,49 +742,50 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_72b82cfd7861903a) } - -var fileDescriptor_relay_72b82cfd7861903a = []byte{ - // 656 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4e, - 0x10, 0x95, 0x31, 0x7f, 0x7e, 0x0c, 0xf0, 0x2b, 0xac, 0x68, 0x31, 0x3e, 0x04, 0xd7, 0x87, 0x2a, - 0xaa, 0xda, 0x44, 0x4a, 0x7b, 0xeb, 0x0d, 0x22, 0x50, 0x24, 0xa2, 0xa0, 0x4d, 0xab, 0x56, 0x5c, - 0xa2, 0x25, 0x59, 0x8c, 0x85, 0x13, 0x2f, 0x3b, 0x36, 0x88, 0x2f, 0xd1, 0x53, 0xcf, 0x3d, 0xf4, - 0x4b, 0xf4, 0xeb, 0x55, 0xfb, 0x27, 0xa9, 0x0d, 0x0e, 0x28, 0x87, 0x5e, 0xa2, 0xcc, 0xec, 0xec, - 0x9b, 0xf7, 0xde, 0xec, 0xae, 0x61, 0x47, 0xf2, 0x84, 0xdd, 0x37, 0xf5, 0x6f, 0x43, 0xc8, 0x34, - 0x4b, 0xc9, 0x8a, 0x0e, 0xfc, 0xd7, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa3, 0xa6, - 0x5e, 0x69, 0xe2, 0xe8, 0x7a, 0x70, 0x87, 0xcd, 0x3b, 0x34, 0x95, 0xe1, 0x77, 0x07, 0xb6, 0x7b, - 0x93, 0x24, 0x9e, 0xf0, 0xb3, 0x1c, 0xaf, 0xba, 0x18, 0x51, 0x7e, 0x43, 0x02, 0xd8, 0xe8, 0x09, - 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x4e, 0x8b, 0x29, 0xf2, 0x11, - 0xd6, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0xa5, 0xc0, 0xa9, 0x6f, 0xb4, 0xfc, 0x06, 0x72, 0x79, - 0xcb, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, - 0x10, 0x36, 0x45, 0x8e, 0x57, 0x9f, 0xd3, 0x2f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0x1a, 0xb8, 0x94, - 0x0b, 0x4f, 0x60, 0xe7, 0x01, 0x1f, 0x14, 0xa4, 0x05, 0xcb, 0x92, 0xa3, 0xf0, 0x9c, 0xc0, 0xad, - 0x6f, 0xb4, 0x6a, 0x0d, 0xa3, 0xb5, 0x1f, 0x4f, 0xa2, 0x84, 0x77, 0x31, 0x32, 0x9b, 0xcf, 0x12, - 0x96, 0x5d, 0xa6, 0x72, 0x4c, 0x75, 0x6d, 0x18, 0xc1, 0xbe, 0x2a, 0xe0, 0xc9, 0xac, 0x80, 0x72, - 0xcc, 0x93, 0xec, 0x34, 0xc6, 0x8c, 0xbc, 0x82, 0xd5, 0xdc, 0x70, 0x30, 0xe2, 0x6c, 0x34, 0x6b, - 0xb4, 0xb4, 0x40, 0xa3, 0x9f, 0x0e, 0x78, 0x86, 0xf2, 0x21, 0xcb, 0x86, 0x57, 0x8a, 0x77, 0x6f, - 0xc2, 0xff, 0xb1, 0x95, 0x6f, 0x61, 0xbb, 0x68, 0x9b, 0x12, 0xe5, 0xb9, 0x81, 0x5b, 0x5f, 0xa7, - 0x8f, 0xf2, 0x61, 0x0c, 0xfb, 0x73, 0xf8, 0xa1, 0x20, 0xa7, 0xb0, 0x8d, 0x5a, 0x9e, 0xca, 0x1b, - 0x87, 0xac, 0xcd, 0x41, 0x41, 0x7d, 0xa5, 0x8b, 0xf4, 0xd1, 0xce, 0xf0, 0x1e, 0xf6, 0xe6, 0x98, - 0x45, 0x6a, 0x00, 0xa6, 0xe8, 0x28, 0x1d, 0x71, 0x6d, 0x84, 0x4b, 0x0b, 0x19, 0x35, 0x12, 0xca, - 0x87, 0xb7, 0x9d, 0xb6, 0xb6, 0x61, 0x9d, 0xda, 0x88, 0xbc, 0x81, 0xff, 0xd5, 0x3f, 0x85, 0x73, - 0x9c, 0xca, 0xb1, 0x3d, 0x36, 0x2b, 0xf4, 0x41, 0x36, 0xbc, 0x83, 0xbd, 0x13, 0x9e, 0xa9, 0x96, - 0x68, 0xd4, 0xf6, 0x33, 0x96, 0xe5, 0xa8, 0x86, 0x50, 0x03, 0xc8, 0xff, 0xda, 0xe4, 0x68, 0x9b, - 0x0a, 0x19, 0x35, 0xa4, 0xb4, 0x30, 0x24, 0xd3, 0xbf, 0x98, 0x22, 0x3e, 0xfc, 0x97, 0x8a, 0xd2, - 0xa9, 0x9d, 0xc5, 0xe1, 0xef, 0x65, 0xf0, 0xaa, 0x3b, 0xa3, 0x20, 0x1e, 0xac, 0x71, 0x29, 0x67, - 0x92, 0x57, 0xe8, 0x34, 0x54, 0x7a, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7a, 0x4d, 0x44, 0xfa, 0xb0, - 0x85, 0xf9, 0x70, 0xc8, 0x11, 0xed, 0x34, 0x5c, 0x3d, 0x8d, 0xf7, 0x76, 0x1a, 0xf3, 0x3a, 0x35, - 0xfa, 0xc5, 0x4d, 0xb4, 0x8c, 0x41, 0xce, 0x60, 0xf3, 0x92, 0xc5, 0x09, 0x1f, 0x59, 0xcc, 0x65, - 0x8d, 0xf9, 0xee, 0x39, 0xcc, 0x63, 0xbd, 0xa7, 0xcd, 0x33, 0x16, 0x27, 0xb4, 0x84, 0xe0, 0x1f, - 0xc1, 0x96, 0xed, 0x68, 0x96, 0x95, 0x45, 0xc2, 0xce, 0xda, 0x1e, 0xf3, 0x59, 0xac, 0xb4, 0xa2, - 0x46, 0x9d, 0x6a, 0x35, 0x91, 0xff, 0x0d, 0x36, 0x8b, 0x2d, 0x0a, 0xd7, 0xd2, 0x2d, 0x5d, 0xcb, - 0x85, 0x5d, 0xf4, 0x7f, 0x39, 0x33, 0x7e, 0xd6, 0x82, 0x79, 0x57, 0x7e, 0x0e, 0x37, 0xc2, 0x60, - 0x77, 0xa4, 0x59, 0x4d, 0x4f, 0xb0, 0xf1, 0x65, 0xc1, 0x71, 0x58, 0xef, 0x2a, 0xa1, 0x5a, 0x3f, - 0x96, 0xa6, 0x37, 0xb3, 0xcb, 0x11, 0x59, 0xc4, 0xa9, 0xc2, 0xec, 0x73, 0x79, 0x1b, 0x0f, 0x39, - 0x39, 0x84, 0xad, 0xd2, 0x4b, 0x48, 0xf6, 0x6c, 0xcf, 0x87, 0xef, 0xb5, 0xef, 0x55, 0x2f, 0xa0, - 0x20, 0x5f, 0x61, 0xb7, 0x8a, 0x21, 0xa9, 0x3d, 0x49, 0xff, 0xc6, 0x3f, 0x78, 0x46, 0x1e, 0x39, - 0x87, 0x97, 0x95, 0x6f, 0x0a, 0x39, 0x28, 0x71, 0x79, 0xfc, 0x22, 0xfa, 0xc1, 0xd3, 0x05, 0x28, - 0x0e, 0x77, 0xce, 0x5f, 0x34, 0xcc, 0xe7, 0xec, 0x93, 0xb8, 0xd0, 0x96, 0x5c, 0xac, 0xea, 0xaf, - 0xd5, 0x87, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x04, 0x75, 0xfe, 0xf6, 0xec, 0x06, 0x00, 0x00, +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_77ab6a9fe292f32a) } + +var fileDescriptor_relay_77ab6a9fe292f32a = []byte{ + // 668 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4a, + 0x10, 0x97, 0x31, 0x7f, 0x07, 0x78, 0x0f, 0x56, 0xbc, 0x87, 0xf1, 0x21, 0xb8, 0x3e, 0x54, 0x51, + 0xd5, 0x26, 0x52, 0xda, 0x5b, 0x6f, 0x10, 0x81, 0x22, 0x11, 0x05, 0x6d, 0x5a, 0xb5, 0xe2, 0x12, + 0x2d, 0xc9, 0x62, 0x2c, 0x9c, 0x78, 0xd9, 0xb1, 0x41, 0x7c, 0x82, 0xde, 0x7a, 0xea, 0xb9, 0x87, + 0x7e, 0x89, 0x7e, 0xbd, 0x6a, 0xff, 0xc4, 0xb5, 0x21, 0x81, 0x72, 0xe8, 0x25, 0xca, 0xcc, 0xce, + 0xce, 0xfc, 0xfe, 0xec, 0xae, 0x61, 0x5b, 0xf2, 0x84, 0xdd, 0x35, 0xf5, 0x6f, 0x43, 0xc8, 0x34, + 0x4b, 0xc9, 0x92, 0x0e, 0xfc, 0x17, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa2, 0xa6, + 0x5e, 0x69, 0xe2, 0xe8, 0x6a, 0x70, 0x8b, 0xcd, 0x5b, 0x34, 0x95, 0xe1, 0x57, 0x07, 0xb6, 0x7a, + 0x93, 0x24, 0x9e, 0xf0, 0xd3, 0x1c, 0x2f, 0xbb, 0x18, 0x51, 0x7e, 0x4d, 0x02, 0x58, 0xef, 0x09, + 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x46, 0xcb, 0x29, 0xf2, 0x0e, + 0x56, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0x85, 0xc0, 0xa9, 0xaf, 0xb7, 0xfc, 0x06, 0x72, 0x79, + 0xc3, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, + 0x10, 0x36, 0x44, 0x8e, 0x97, 0x1f, 0xd2, 0x8f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0xba, 0x71, 0x25, + 0x17, 0x1e, 0xc3, 0xf6, 0x3d, 0x3c, 0x28, 0x48, 0x0b, 0x16, 0x25, 0x47, 0xe1, 0x39, 0x81, 0x5b, + 0x5f, 0x6f, 0xd5, 0x1a, 0x86, 0x6b, 0x3f, 0x9e, 0x44, 0x09, 0xef, 0x62, 0x64, 0x36, 0x9f, 0x26, + 0x2c, 0xbb, 0x48, 0xe5, 0x98, 0xea, 0xda, 0xf0, 0x8b, 0x03, 0x7b, 0xaa, 0x82, 0x27, 0x45, 0x05, + 0xe5, 0x98, 0x27, 0xd9, 0x49, 0x8c, 0x19, 0xf9, 0x1f, 0x96, 0x73, 0x03, 0xc2, 0xb0, 0xb3, 0x51, + 0x31, 0x69, 0xe1, 0xcf, 0x27, 0x91, 0x1a, 0x40, 0x5a, 0x40, 0xd6, 0xa4, 0x56, 0x69, 0x29, 0x13, + 0x7e, 0x77, 0xc0, 0x33, 0x9c, 0x0e, 0x58, 0x36, 0xbc, 0x54, 0xb9, 0xde, 0x84, 0xff, 0x65, 0xad, + 0x5f, 0xc1, 0x56, 0x59, 0x57, 0x45, 0xda, 0x73, 0x03, 0xb7, 0xbe, 0x46, 0x1f, 0xe4, 0xc3, 0x18, + 0xf6, 0xe6, 0xe0, 0x43, 0x41, 0x4e, 0x60, 0x0b, 0x35, 0x7d, 0x95, 0x37, 0x0a, 0x5a, 0x1f, 0x82, + 0x92, 0x3a, 0x33, 0x55, 0xa6, 0x0f, 0x76, 0x86, 0x77, 0xb0, 0x3b, 0x47, 0x4c, 0x25, 0xa3, 0x29, + 0x3a, 0x4c, 0x47, 0x5c, 0x0b, 0xe1, 0xd2, 0x52, 0x46, 0x59, 0x46, 0xf9, 0xf0, 0xa6, 0xd3, 0xd6, + 0x32, 0xac, 0x51, 0x1b, 0x91, 0x97, 0xf0, 0x8f, 0xfa, 0xa7, 0xfa, 0x1c, 0xa5, 0x72, 0x6c, 0xcf, + 0xd5, 0x12, 0xbd, 0x97, 0x0d, 0x6f, 0x61, 0xf7, 0x98, 0x67, 0x6a, 0x24, 0x1a, 0xb6, 0xfd, 0x8c, + 0x65, 0x39, 0x2a, 0x13, 0x6a, 0x00, 0xf9, 0x6f, 0x99, 0x1c, 0x2d, 0x53, 0x29, 0xa3, 0x4c, 0x4a, + 0x4b, 0x26, 0x99, 0xf9, 0xe5, 0x14, 0xf1, 0x61, 0x35, 0x15, 0x95, 0x63, 0x5d, 0xc4, 0xe1, 0xcf, + 0x45, 0xf0, 0x66, 0x4f, 0x46, 0x41, 0x3c, 0x58, 0xe1, 0x52, 0x16, 0x94, 0x97, 0xe8, 0x34, 0x54, + 0x7c, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7c, 0x4d, 0x44, 0xfa, 0xb0, 0x89, 0xf9, 0x70, 0xc8, 0x11, + 0xad, 0x1b, 0xae, 0x76, 0xe3, 0x8d, 0x75, 0x63, 0xde, 0xa4, 0x46, 0xbf, 0xbc, 0x89, 0x56, 0x7b, + 0x90, 0x53, 0xd8, 0xb8, 0x60, 0x71, 0xc2, 0x47, 0xb6, 0xe7, 0xa2, 0xee, 0xf9, 0xfa, 0xa9, 0x9e, + 0x47, 0x7a, 0x4f, 0x9b, 0x67, 0x2c, 0x4e, 0x68, 0xa5, 0x83, 0x7f, 0x08, 0x9b, 0x76, 0xa2, 0x59, + 0x56, 0x12, 0x09, 0xeb, 0xb5, 0x3d, 0xe6, 0x45, 0xac, 0xb8, 0xa2, 0xee, 0x3a, 0xe5, 0x6a, 0x22, + 0xff, 0x33, 0x6c, 0x94, 0x47, 0x94, 0xae, 0xad, 0x5b, 0xb9, 0xb6, 0xcf, 0x56, 0xd1, 0xff, 0xe1, + 0x14, 0xf8, 0xac, 0x04, 0xf3, 0x9e, 0x84, 0x39, 0xd8, 0x08, 0x83, 0x9d, 0x91, 0x46, 0x35, 0x3d, + 0xc1, 0x46, 0x97, 0x67, 0xda, 0x61, 0xb5, 0x9b, 0xd9, 0xaa, 0xf5, 0x6d, 0x61, 0x7a, 0x33, 0xbb, + 0x1c, 0x91, 0x45, 0x9c, 0xaa, 0x9e, 0x7d, 0x2e, 0x6f, 0xe2, 0x21, 0x27, 0x07, 0xb0, 0x59, 0x79, + 0x2a, 0xc9, 0xae, 0x9d, 0x79, 0xff, 0x41, 0xf7, 0xbd, 0xd9, 0x0b, 0x28, 0xc8, 0x27, 0xd8, 0x99, + 0x85, 0x90, 0xd4, 0x1e, 0x85, 0x7f, 0xed, 0xef, 0x3f, 0x41, 0x8f, 0x9c, 0xc1, 0x7f, 0x33, 0xdf, + 0x14, 0xb2, 0x5f, 0xc1, 0xf2, 0xf0, 0x45, 0xf4, 0x83, 0xc7, 0x0b, 0x50, 0x1c, 0x6c, 0x9f, 0xfd, + 0xdb, 0x30, 0xdf, 0xbb, 0xf7, 0xe2, 0x5c, 0x4b, 0x72, 0xbe, 0xac, 0x3f, 0x67, 0x6f, 0x7f, 0x05, + 0x00, 0x00, 0xff, 0xff, 0x30, 0xa9, 0x4c, 0xde, 0x0d, 0x07, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index b02edfa2c..cee15887c 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -14,6 +14,7 @@ repeated SingleMsgToUserPlatform resp = 1; message SingelMsgToUserResultList{ string userID =1; repeated SingleMsgToUserPlatform resp = 2; + bool onlinePush = 3; } message OnlineBatchPushOneMsgReq{ From 797e2fea1ea2f55d00e1d30e9ba2d0bf71f390ed Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 6 Jun 2022 20:39:45 +0800 Subject: [PATCH 061/256] group info set --- internal/api/auth/auth.go | 26 ++++ internal/rpc/auth/auth.go | 14 ++ internal/rpc/group/group.go | 10 +- internal/rpc/msg/group_notification.go | 10 +- pkg/base_info/auth_api_struct.go | 11 ++ pkg/proto/auth/auth.pb.go | 202 +++++++++++++++++++++---- pkg/proto/auth/auth.proto | 16 ++ 7 files changed, 255 insertions(+), 34 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 59ad579ca..826374188 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -124,3 +124,29 @@ func ParseToken(c *gin.Context) { log.NewInfo(params.OperationID, "ParseToken return ", resp) c.JSON(http.StatusOK, resp) } + +func ForceLogout(c *gin.Context) { + params := api.ForceLogoutReq{} + if err := c.BindJSON(¶ms); err != nil { + errMsg := " BindJSON failed " + err.Error() + log.NewError("0", errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) + return + } + + var ok bool + var errInfo string + var expireTime int64 + ok, _, errInfo, expireTime = token_verify.GetUserIDFromTokenExpireTime(c.Request.Header.Get("token"), params.OperationID) + if !ok { + errMsg := params.OperationID + " " + "GetUserIDFromTokenExpireTime failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(params.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: uint32(expireTime)}} + resp.Data = structs.Map(&resp.ExpireTime) + log.NewInfo(params.OperationID, "ParseToken return ", resp) + c.JSON(http.StatusOK, resp) +} diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 0066fc8d4..02f246004 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -58,6 +58,20 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil } +func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) { + //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) + //err := token_verify.DeleteToken(req.FromUserID, int(req.Platform)) + //if err != nil { + // errMsg := req.OperationID + " imdb.DeleteToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) + // log.NewError(req.OperationID, errMsg) + // return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil + //} + // + //return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil + return nil, nil + +} + type rpcAuth struct { rpcPort int rpcRegisterName string diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 192939c59..3e9b49190 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -887,17 +887,25 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf ////bitwise operators: 0001:groupName; 0010:Notification 0100:Introduction; 1000:FaceUrl; 10000:owner var changedType int32 + groupName := "" + notification := "" + introduction := "" + faceURL := "" if group.GroupName != req.GroupInfo.GroupName && req.GroupInfo.GroupName != "" { changedType = 1 + groupName = req.GroupInfo.GroupName } if group.Notification != req.GroupInfo.Notification && req.GroupInfo.Notification != "" { changedType = changedType | (1 << 1) + notification = req.GroupInfo.Notification } if group.Introduction != req.GroupInfo.Introduction && req.GroupInfo.Introduction != "" { changedType = changedType | (1 << 2) + introduction = req.GroupInfo.Introduction } if group.FaceURL != req.GroupInfo.FaceURL && req.GroupInfo.FaceURL != "" { changedType = changedType | (1 << 3) + faceURL = req.GroupInfo.FaceURL } //only administrators can set group information var groupInfo db.Group @@ -909,7 +917,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf } log.NewInfo(req.OperationID, "SetGroupInfo rpc return ", pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}) if changedType != 0 { - chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID) + chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL) } return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil } diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 5ba2400dd..e8a29b117 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -225,12 +225,20 @@ func GroupCreatedNotification(operationID, opUserID, groupID string, initMemberL } //群信息改变后掉用 -func GroupInfoSetNotification(operationID, opUserID, groupID string) { +//groupName := "" +// notification := "" +// introduction := "" +// faceURL := "" +func GroupInfoSetNotification(operationID, opUserID, groupID string, groupName, notification, introduction, faceURL string) { GroupInfoChangedTips := open_im_sdk.GroupInfoSetTips{Group: &open_im_sdk.GroupInfo{}, OpUser: &open_im_sdk.GroupMemberFullInfo{}} if err := setGroupInfo(groupID, GroupInfoChangedTips.Group); err != nil { log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID) return } + GroupInfoChangedTips.Group.GroupName = groupName + GroupInfoChangedTips.Group.Notification = notification + GroupInfoChangedTips.Group.Introduction = introduction + GroupInfoChangedTips.Group.FaceURL = faceURL if err := setOpUserInfo(opUserID, groupID, GroupInfoChangedTips.OpUser); err != nil { log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID) return diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 431a00c2c..9e46a92d7 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -38,6 +38,17 @@ type UserTokenResp struct { UserToken UserTokenInfo `json:"data"` } +type ForceLogoutReq struct { + Secret string `json:"secret" binding:"required,max=32"` + Platform int32 `json:"platform" binding:"required,min=1,max=8"` + UserID string `json:"userID" binding:"required,min=1,max=64"` + OperationID string `json:"operationID" binding:"required"` +} + +type ForceLogoutResp struct { + CommResp +} + type ParseTokenReq struct { OperationID string `json:"operationID" binding:"required"` } diff --git a/pkg/proto/auth/auth.pb.go b/pkg/proto/auth/auth.pb.go index 3941570ee..09f54b1f9 100644 --- a/pkg/proto/auth/auth.pb.go +++ b/pkg/proto/auth/auth.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{0} + return fileDescriptor_auth_68293efd650e0000, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -82,7 +82,7 @@ func (m *UserRegisterReq) Reset() { *m = UserRegisterReq{} } func (m *UserRegisterReq) String() string { return proto.CompactTextString(m) } func (*UserRegisterReq) ProtoMessage() {} func (*UserRegisterReq) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{1} + return fileDescriptor_auth_68293efd650e0000, []int{1} } func (m *UserRegisterReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserRegisterReq.Unmarshal(m, b) @@ -127,7 +127,7 @@ func (m *UserRegisterResp) Reset() { *m = UserRegisterResp{} } func (m *UserRegisterResp) String() string { return proto.CompactTextString(m) } func (*UserRegisterResp) ProtoMessage() {} func (*UserRegisterResp) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{2} + return fileDescriptor_auth_68293efd650e0000, []int{2} } func (m *UserRegisterResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserRegisterResp.Unmarshal(m, b) @@ -168,7 +168,7 @@ func (m *UserTokenReq) Reset() { *m = UserTokenReq{} } func (m *UserTokenReq) String() string { return proto.CompactTextString(m) } func (*UserTokenReq) ProtoMessage() {} func (*UserTokenReq) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{3} + return fileDescriptor_auth_68293efd650e0000, []int{3} } func (m *UserTokenReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserTokenReq.Unmarshal(m, b) @@ -229,7 +229,7 @@ func (m *UserTokenResp) Reset() { *m = UserTokenResp{} } func (m *UserTokenResp) String() string { return proto.CompactTextString(m) } func (*UserTokenResp) ProtoMessage() {} func (*UserTokenResp) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_88965eda3ab7f34d, []int{4} + return fileDescriptor_auth_68293efd650e0000, []int{4} } func (m *UserTokenResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserTokenResp.Unmarshal(m, b) @@ -270,12 +270,114 @@ func (m *UserTokenResp) GetExpiredTime() int64 { return 0 } +type ForceLogoutReq struct { + Platform int32 `protobuf:"varint,1,opt,name=Platform" json:"Platform,omitempty"` + FromUserID string `protobuf:"bytes,2,opt,name=FromUserID" json:"FromUserID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"` + OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ForceLogoutReq) Reset() { *m = ForceLogoutReq{} } +func (m *ForceLogoutReq) String() string { return proto.CompactTextString(m) } +func (*ForceLogoutReq) ProtoMessage() {} +func (*ForceLogoutReq) Descriptor() ([]byte, []int) { + return fileDescriptor_auth_68293efd650e0000, []int{5} +} +func (m *ForceLogoutReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ForceLogoutReq.Unmarshal(m, b) +} +func (m *ForceLogoutReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ForceLogoutReq.Marshal(b, m, deterministic) +} +func (dst *ForceLogoutReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForceLogoutReq.Merge(dst, src) +} +func (m *ForceLogoutReq) XXX_Size() int { + return xxx_messageInfo_ForceLogoutReq.Size(m) +} +func (m *ForceLogoutReq) XXX_DiscardUnknown() { + xxx_messageInfo_ForceLogoutReq.DiscardUnknown(m) +} + +var xxx_messageInfo_ForceLogoutReq proto.InternalMessageInfo + +func (m *ForceLogoutReq) GetPlatform() int32 { + if m != nil { + return m.Platform + } + return 0 +} + +func (m *ForceLogoutReq) GetFromUserID() string { + if m != nil { + return m.FromUserID + } + return "" +} + +func (m *ForceLogoutReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *ForceLogoutReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +type ForceLogoutResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ForceLogoutResp) Reset() { *m = ForceLogoutResp{} } +func (m *ForceLogoutResp) String() string { return proto.CompactTextString(m) } +func (*ForceLogoutResp) ProtoMessage() {} +func (*ForceLogoutResp) Descriptor() ([]byte, []int) { + return fileDescriptor_auth_68293efd650e0000, []int{6} +} +func (m *ForceLogoutResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ForceLogoutResp.Unmarshal(m, b) +} +func (m *ForceLogoutResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ForceLogoutResp.Marshal(b, m, deterministic) +} +func (dst *ForceLogoutResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForceLogoutResp.Merge(dst, src) +} +func (m *ForceLogoutResp) XXX_Size() int { + return xxx_messageInfo_ForceLogoutResp.Size(m) +} +func (m *ForceLogoutResp) XXX_DiscardUnknown() { + xxx_messageInfo_ForceLogoutResp.DiscardUnknown(m) +} + +var xxx_messageInfo_ForceLogoutResp proto.InternalMessageInfo + +func (m *ForceLogoutResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + func init() { proto.RegisterType((*CommonResp)(nil), "pbAuth.CommonResp") proto.RegisterType((*UserRegisterReq)(nil), "pbAuth.UserRegisterReq") proto.RegisterType((*UserRegisterResp)(nil), "pbAuth.UserRegisterResp") proto.RegisterType((*UserTokenReq)(nil), "pbAuth.UserTokenReq") proto.RegisterType((*UserTokenResp)(nil), "pbAuth.UserTokenResp") + proto.RegisterType((*ForceLogoutReq)(nil), "pbAuth.ForceLogoutReq") + proto.RegisterType((*ForceLogoutResp)(nil), "pbAuth.ForceLogoutResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -291,6 +393,7 @@ const _ = grpc.SupportPackageIsVersion4 type AuthClient interface { UserRegister(ctx context.Context, in *UserRegisterReq, opts ...grpc.CallOption) (*UserRegisterResp, error) UserToken(ctx context.Context, in *UserTokenReq, opts ...grpc.CallOption) (*UserTokenResp, error) + ForceLogout(ctx context.Context, in *ForceLogoutReq, opts ...grpc.CallOption) (*ForceLogoutResp, error) } type authClient struct { @@ -319,11 +422,21 @@ func (c *authClient) UserToken(ctx context.Context, in *UserTokenReq, opts ...gr return out, nil } +func (c *authClient) ForceLogout(ctx context.Context, in *ForceLogoutReq, opts ...grpc.CallOption) (*ForceLogoutResp, error) { + out := new(ForceLogoutResp) + err := grpc.Invoke(ctx, "/pbAuth.Auth/ForceLogout", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Auth service type AuthServer interface { UserRegister(context.Context, *UserRegisterReq) (*UserRegisterResp, error) UserToken(context.Context, *UserTokenReq) (*UserTokenResp, error) + ForceLogout(context.Context, *ForceLogoutReq) (*ForceLogoutResp, error) } func RegisterAuthServer(s *grpc.Server, srv AuthServer) { @@ -366,6 +479,24 @@ func _Auth_UserToken_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } +func _Auth_ForceLogout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ForceLogoutReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).ForceLogout(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pbAuth.Auth/ForceLogout", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).ForceLogout(ctx, req.(*ForceLogoutReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Auth_serviceDesc = grpc.ServiceDesc{ ServiceName: "pbAuth.Auth", HandlerType: (*AuthServer)(nil), @@ -378,37 +509,44 @@ var _Auth_serviceDesc = grpc.ServiceDesc{ MethodName: "UserToken", Handler: _Auth_UserToken_Handler, }, + { + MethodName: "ForceLogout", + Handler: _Auth_ForceLogout_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "auth/auth.proto", } -func init() { proto.RegisterFile("auth/auth.proto", fileDescriptor_auth_88965eda3ab7f34d) } - -var fileDescriptor_auth_88965eda3ab7f34d = []byte{ - // 369 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x52, 0x4d, 0x4b, 0xc3, 0x40, - 0x10, 0x25, 0xf6, 0xc3, 0x76, 0x6a, 0xa9, 0x2c, 0x55, 0x43, 0x04, 0xa9, 0x39, 0xf5, 0x94, 0x40, - 0x3d, 0x28, 0x08, 0x42, 0xad, 0x16, 0x7a, 0x28, 0x95, 0xa5, 0x5e, 0xbc, 0x84, 0x94, 0x6e, 0xdb, - 0x90, 0x26, 0xbb, 0xee, 0xa6, 0x56, 0xf0, 0xe8, 0xc5, 0x9f, 0x2d, 0xbb, 0xf9, 0x70, 0xad, 0x3d, - 0x79, 0x49, 0x98, 0x79, 0x2f, 0xf3, 0xde, 0x9b, 0x0c, 0xb4, 0xfc, 0x4d, 0xb2, 0x72, 0xe5, 0xc3, - 0x61, 0x9c, 0x26, 0x14, 0x55, 0xd9, 0xac, 0xbf, 0x49, 0x56, 0xd6, 0xe5, 0x84, 0x91, 0xd8, 0x1b, - 0x8d, 0x5d, 0x16, 0x2e, 0x5d, 0x05, 0xb9, 0x62, 0x1e, 0x7a, 0x5b, 0xe1, 0x6e, 0x45, 0x4a, 0xb5, - 0xef, 0x00, 0x06, 0x34, 0x8a, 0x68, 0x8c, 0x89, 0x60, 0xc8, 0x84, 0x43, 0xc2, 0xf9, 0x80, 0xce, - 0x89, 0x69, 0x74, 0x8c, 0x6e, 0x05, 0xe7, 0x25, 0x3a, 0x85, 0x2a, 0xe1, 0x7c, 0x2c, 0x96, 0xe6, - 0x41, 0xc7, 0xe8, 0xd6, 0x71, 0x56, 0xd9, 0x6b, 0x68, 0x3d, 0x0b, 0xc2, 0x31, 0x59, 0x06, 0x22, - 0x91, 0xef, 0x57, 0x74, 0x0d, 0x35, 0xd9, 0x1a, 0xc5, 0x0b, 0xaa, 0xa6, 0x34, 0x7a, 0xe7, 0x8e, - 0x20, 0xfc, 0x8d, 0x70, 0xcf, 0x67, 0x81, 0xc7, 0x7c, 0xee, 0x47, 0xc2, 0xc9, 0x29, 0xb8, 0x20, - 0xa3, 0x0e, 0x34, 0x26, 0x8c, 0x70, 0x3f, 0x09, 0x68, 0x3c, 0x7a, 0xc8, 0x84, 0xf4, 0x96, 0x3d, - 0x84, 0xe3, 0xdf, 0x6a, 0x82, 0xa1, 0x9e, 0x9e, 0x20, 0x13, 0x44, 0x4e, 0xba, 0x01, 0xe7, 0x07, - 0xc1, 0x1a, 0xcb, 0xfe, 0x32, 0xe0, 0x48, 0x0e, 0x9a, 0xd2, 0x90, 0xc4, 0xd2, 0xb3, 0x05, 0xb5, - 0xa7, 0xb5, 0x9f, 0x2c, 0x28, 0x8f, 0xb2, 0xe4, 0x45, 0x8d, 0x2e, 0x00, 0x86, 0x9c, 0x46, 0xca, - 0x66, 0xee, 0x4a, 0xeb, 0xc8, 0x6f, 0x27, 0x2c, 0x43, 0x4b, 0x0a, 0x2d, 0xea, 0xdd, 0x48, 0xe5, - 0xbf, 0x91, 0x3e, 0xa0, 0xa9, 0x39, 0xf9, 0x5f, 0x1e, 0xd4, 0x86, 0x8a, 0x1a, 0x90, 0xb9, 0x4b, - 0x0b, 0x29, 0xfe, 0xf8, 0xce, 0x02, 0x4e, 0xe6, 0xd3, 0x20, 0x22, 0xca, 0x5b, 0x09, 0xeb, 0xad, - 0xde, 0xa7, 0x01, 0x65, 0x39, 0x17, 0xf5, 0xd3, 0x7d, 0xe4, 0x8b, 0x45, 0x67, 0xb9, 0xe0, 0xce, - 0xcf, 0xb5, 0xcc, 0xfd, 0x80, 0x60, 0xe8, 0x06, 0xea, 0x45, 0x10, 0xd4, 0xd6, 0x69, 0xf9, 0x96, - 0xad, 0x93, 0x3d, 0x5d, 0xc1, 0xee, 0x5b, 0x2f, 0x4d, 0x47, 0x9d, 0xef, 0x6d, 0x0a, 0xcf, 0xaa, - 0xea, 0x36, 0xaf, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x20, 0x74, 0x9f, 0xd9, 0x02, 0x00, +func init() { proto.RegisterFile("auth/auth.proto", fileDescriptor_auth_68293efd650e0000) } + +var fileDescriptor_auth_68293efd650e0000 = []byte{ + // 417 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x53, 0x5d, 0x8b, 0xda, 0x40, + 0x14, 0x25, 0xf5, 0xa3, 0x7a, 0xad, 0x4d, 0x19, 0xac, 0x86, 0x14, 0x8a, 0xcd, 0x93, 0x4f, 0x09, + 0xd8, 0x87, 0x16, 0x0a, 0x82, 0xb5, 0x0a, 0x42, 0xc5, 0x12, 0xec, 0xcb, 0xbe, 0x84, 0xb8, 0x8e, + 0x31, 0x68, 0x32, 0xb3, 0x33, 0x71, 0x5d, 0xd8, 0x3f, 0xb0, 0xec, 0xdf, 0xda, 0x3f, 0xb6, 0xcc, + 0xe4, 0x63, 0x47, 0xd7, 0x27, 0x5f, 0xf6, 0x25, 0xe1, 0x9e, 0x73, 0x66, 0xee, 0x39, 0x77, 0x66, + 0x40, 0xf7, 0xf7, 0xc9, 0xc6, 0x11, 0x1f, 0x9b, 0x32, 0x92, 0x10, 0x54, 0xa5, 0xcb, 0xe1, 0x3e, + 0xd9, 0x98, 0xdf, 0xe6, 0x14, 0xc7, 0xde, 0x74, 0xe6, 0xd0, 0x6d, 0xe0, 0x48, 0xca, 0xe1, 0xab, + 0xad, 0x77, 0xe0, 0xce, 0x81, 0xa7, 0x52, 0x6b, 0x00, 0x30, 0x22, 0x51, 0x44, 0x62, 0x17, 0x73, + 0x8a, 0x0c, 0x78, 0x8f, 0x19, 0x1b, 0x91, 0x15, 0x36, 0xb4, 0xae, 0xd6, 0xab, 0xb8, 0x79, 0x89, + 0xda, 0x50, 0xc5, 0x8c, 0xcd, 0x78, 0x60, 0xbc, 0xeb, 0x6a, 0xbd, 0xba, 0x9b, 0x55, 0xd6, 0x0e, + 0xf4, 0xff, 0x1c, 0x33, 0x17, 0x07, 0x21, 0x4f, 0xc4, 0xff, 0x06, 0xfd, 0x80, 0x9a, 0x80, 0xa6, + 0xf1, 0x9a, 0xc8, 0x5d, 0x1a, 0xfd, 0x2f, 0x36, 0xc7, 0xec, 0x16, 0x33, 0xcf, 0xa7, 0xa1, 0x47, + 0x7d, 0xe6, 0x47, 0xdc, 0xce, 0x25, 0x6e, 0x21, 0x46, 0x5d, 0x68, 0xcc, 0x29, 0x66, 0x7e, 0x12, + 0x92, 0x78, 0xfa, 0x27, 0x6b, 0xa4, 0x42, 0xd6, 0x04, 0x3e, 0x1d, 0x77, 0xe3, 0x14, 0xf5, 0xd5, + 0x04, 0x59, 0x43, 0x64, 0xa7, 0x13, 0xb0, 0x5f, 0x18, 0x57, 0x51, 0x59, 0x0f, 0x1a, 0x7c, 0x10, + 0x1b, 0x2d, 0xc8, 0x16, 0xc7, 0xc2, 0xb3, 0x09, 0xb5, 0x7f, 0x3b, 0x3f, 0x59, 0x13, 0x16, 0x65, + 0xc9, 0x8b, 0x1a, 0x7d, 0x05, 0x98, 0x30, 0x12, 0x49, 0x9b, 0xb9, 0x2b, 0x05, 0x11, 0x6b, 0xe7, + 0x34, 0x63, 0x4b, 0x92, 0x2d, 0xea, 0xd3, 0x48, 0xe5, 0xd7, 0x91, 0xee, 0xa1, 0xa9, 0x38, 0xb9, + 0x2c, 0x0f, 0x6a, 0x41, 0x45, 0x6e, 0x90, 0xb9, 0x4b, 0x0b, 0xd1, 0x7c, 0x7c, 0x47, 0x43, 0x86, + 0x57, 0x8b, 0x30, 0xc2, 0xd2, 0x5b, 0xc9, 0x55, 0x21, 0xeb, 0x51, 0x83, 0x8f, 0x13, 0xc2, 0xae, + 0xf1, 0x5f, 0x12, 0x90, 0x7d, 0xf2, 0xb6, 0x93, 0x18, 0x83, 0x7e, 0xe4, 0xe5, 0xb2, 0x59, 0xf4, + 0x9f, 0x34, 0x28, 0x0b, 0x1e, 0x0d, 0xd3, 0x33, 0xce, 0x2f, 0x0b, 0xea, 0xe4, 0x0b, 0x4f, 0x2e, + 0xac, 0x69, 0x9c, 0x27, 0x38, 0x45, 0x3f, 0xa1, 0x5e, 0x1c, 0x0e, 0x6a, 0xa9, 0xb2, 0xfc, 0xe6, + 0x98, 0x9f, 0xcf, 0xa0, 0x9c, 0xa2, 0x01, 0x34, 0x94, 0x30, 0xa8, 0x9d, 0xab, 0x8e, 0xa7, 0x6d, + 0x76, 0xce, 0xe2, 0x9c, 0xfe, 0xd6, 0xaf, 0x9a, 0xb6, 0x7c, 0xd2, 0xbf, 0x52, 0xc1, 0xb2, 0x2a, + 0xdf, 0xeb, 0xf7, 0xe7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xed, 0x61, 0xac, 0x2b, 0xed, 0x03, 0x00, 0x00, } diff --git a/pkg/proto/auth/auth.proto b/pkg/proto/auth/auth.proto index c91921fe9..53a14d760 100644 --- a/pkg/proto/auth/auth.proto +++ b/pkg/proto/auth/auth.proto @@ -30,7 +30,23 @@ message UserTokenResp { } + +message ForceLogoutReq { + int32 Platform = 1; + string FromUserID = 2; + string OpUserID = 3; + string OperationID = 4; +} +message ForceLogoutResp { + CommonResp CommonResp = 1; +} + + + + + service Auth { rpc UserRegister(UserRegisterReq) returns(UserRegisterResp); rpc UserToken(UserTokenReq) returns(UserTokenResp); + rpc ForceLogout(ForceLogoutReq) returns(ForceLogoutResp); } From 8bd5db431b938f82323b277ad5aa67b09aee3f7c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 6 Jun 2022 20:54:53 +0800 Subject: [PATCH 062/256] add function --- internal/msg_gateway/gate/rpc_server.go | 4 + pkg/proto/relay/relay.pb.go | 229 ++++++++++++++++++------ pkg/proto/relay/relay.proto | 8 + 3 files changed, 184 insertions(+), 57 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 2ee614c2d..4ad615415 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -29,6 +29,10 @@ type RPCServer struct { pushTerminal []int } +func (r *RPCServer) KickUserOffline(c context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { + panic("implement me") +} + func (r *RPCServer) onInit(rpcPort int) { r.rpcPort = rpcPort r.rpcRegisterName = config.Config.RpcRegisterName.OpenImOnlineMessageRelayName diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 5fecfadd6..810e14a92 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{0} + return fileDescriptor_relay_335282936f1b89e7, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{1} + return fileDescriptor_relay_335282936f1b89e7, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -129,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{2} + return fileDescriptor_relay_335282936f1b89e7, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{3} + return fileDescriptor_relay_335282936f1b89e7, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -235,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{4} + return fileDescriptor_relay_335282936f1b89e7, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{5} + return fileDescriptor_relay_335282936f1b89e7, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{6} + return fileDescriptor_relay_335282936f1b89e7, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -384,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7} + return fileDescriptor_relay_335282936f1b89e7, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -446,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 0} + return fileDescriptor_relay_335282936f1b89e7, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -493,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 1} + return fileDescriptor_relay_335282936f1b89e7, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -549,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_77ab6a9fe292f32a, []int{7, 2} + return fileDescriptor_relay_335282936f1b89e7, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -590,6 +590,82 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) GetDetailPlatformStatus() []*Ge return nil } +type KickUserOfflineReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + KickUserIDList []string `protobuf:"bytes,3,rep,name=kickUserIDList" json:"kickUserIDList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KickUserOfflineReq) Reset() { *m = KickUserOfflineReq{} } +func (m *KickUserOfflineReq) String() string { return proto.CompactTextString(m) } +func (*KickUserOfflineReq) ProtoMessage() {} +func (*KickUserOfflineReq) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_335282936f1b89e7, []int{8} +} +func (m *KickUserOfflineReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KickUserOfflineReq.Unmarshal(m, b) +} +func (m *KickUserOfflineReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KickUserOfflineReq.Marshal(b, m, deterministic) +} +func (dst *KickUserOfflineReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_KickUserOfflineReq.Merge(dst, src) +} +func (m *KickUserOfflineReq) XXX_Size() int { + return xxx_messageInfo_KickUserOfflineReq.Size(m) +} +func (m *KickUserOfflineReq) XXX_DiscardUnknown() { + xxx_messageInfo_KickUserOfflineReq.DiscardUnknown(m) +} + +var xxx_messageInfo_KickUserOfflineReq proto.InternalMessageInfo + +func (m *KickUserOfflineReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *KickUserOfflineReq) GetKickUserIDList() []string { + if m != nil { + return m.KickUserIDList + } + return nil +} + +type KickUserOfflineResp struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KickUserOfflineResp) Reset() { *m = KickUserOfflineResp{} } +func (m *KickUserOfflineResp) String() string { return proto.CompactTextString(m) } +func (*KickUserOfflineResp) ProtoMessage() {} +func (*KickUserOfflineResp) Descriptor() ([]byte, []int) { + return fileDescriptor_relay_335282936f1b89e7, []int{9} +} +func (m *KickUserOfflineResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KickUserOfflineResp.Unmarshal(m, b) +} +func (m *KickUserOfflineResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KickUserOfflineResp.Marshal(b, m, deterministic) +} +func (dst *KickUserOfflineResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_KickUserOfflineResp.Merge(dst, src) +} +func (m *KickUserOfflineResp) XXX_Size() int { + return xxx_messageInfo_KickUserOfflineResp.Size(m) +} +func (m *KickUserOfflineResp) XXX_DiscardUnknown() { + xxx_messageInfo_KickUserOfflineResp.DiscardUnknown(m) +} + +var xxx_messageInfo_KickUserOfflineResp proto.InternalMessageInfo + func init() { proto.RegisterType((*OnlinePushMsgReq)(nil), "relay.OnlinePushMsgReq") proto.RegisterType((*OnlinePushMsgResp)(nil), "relay.OnlinePushMsgResp") @@ -602,6 +678,8 @@ func init() { proto.RegisterType((*GetUsersOnlineStatusResp_SuccessDetail)(nil), "relay.GetUsersOnlineStatusResp.SuccessDetail") proto.RegisterType((*GetUsersOnlineStatusResp_FailedDetail)(nil), "relay.GetUsersOnlineStatusResp.FailedDetail") proto.RegisterType((*GetUsersOnlineStatusResp_SuccessResult)(nil), "relay.GetUsersOnlineStatusResp.SuccessResult") + proto.RegisterType((*KickUserOfflineReq)(nil), "relay.KickUserOfflineReq") + proto.RegisterType((*KickUserOfflineResp)(nil), "relay.KickUserOfflineResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -618,6 +696,7 @@ type OnlineMessageRelayServiceClient interface { OnlinePushMsg(ctx context.Context, in *OnlinePushMsgReq, opts ...grpc.CallOption) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) + KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) } type onlineMessageRelayServiceClient struct { @@ -655,12 +734,22 @@ func (c *onlineMessageRelayServiceClient) OnlineBatchPushOneMsg(ctx context.Cont return out, nil } +func (c *onlineMessageRelayServiceClient) KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) { + out := new(KickUserOfflineResp) + err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/KickUserOffline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for OnlineMessageRelayService service type OnlineMessageRelayServiceServer interface { OnlinePushMsg(context.Context, *OnlinePushMsgReq) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(context.Context, *GetUsersOnlineStatusReq) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) + KickUserOffline(context.Context, *KickUserOfflineReq) (*KickUserOfflineResp, error) } func RegisterOnlineMessageRelayServiceServer(s *grpc.Server, srv OnlineMessageRelayServiceServer) { @@ -721,6 +810,24 @@ func _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler(srv interface{}, c return interceptor(ctx, in, info, handler) } +func _OnlineMessageRelayService_KickUserOffline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(KickUserOfflineReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlineMessageRelayServiceServer).KickUserOffline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/relay.OnlineMessageRelayService/KickUserOffline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlineMessageRelayServiceServer).KickUserOffline(ctx, req.(*KickUserOfflineReq)) + } + return interceptor(ctx, in, info, handler) +} + var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ ServiceName: "relay.OnlineMessageRelayService", HandlerType: (*OnlineMessageRelayServiceServer)(nil), @@ -737,55 +844,63 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ MethodName: "OnlineBatchPushOneMsg", Handler: _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler, }, + { + MethodName: "KickUserOffline", + Handler: _OnlineMessageRelayService_KickUserOffline_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_77ab6a9fe292f32a) } - -var fileDescriptor_relay_77ab6a9fe292f32a = []byte{ - // 668 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4f, 0x4f, 0xdb, 0x4a, - 0x10, 0x97, 0x31, 0x7f, 0x07, 0x78, 0x0f, 0x56, 0xbc, 0x87, 0xf1, 0x21, 0xb8, 0x3e, 0x54, 0x51, - 0xd5, 0x26, 0x52, 0xda, 0x5b, 0x6f, 0x10, 0x81, 0x22, 0x11, 0x05, 0x6d, 0x5a, 0xb5, 0xe2, 0x12, - 0x2d, 0xc9, 0x62, 0x2c, 0x9c, 0x78, 0xd9, 0xb1, 0x41, 0x7c, 0x82, 0xde, 0x7a, 0xea, 0xb9, 0x87, - 0x7e, 0x89, 0x7e, 0xbd, 0x6a, 0xff, 0xc4, 0xb5, 0x21, 0x81, 0x72, 0xe8, 0x25, 0xca, 0xcc, 0xce, - 0xce, 0xfc, 0xfe, 0xec, 0xae, 0x61, 0x5b, 0xf2, 0x84, 0xdd, 0x35, 0xf5, 0x6f, 0x43, 0xc8, 0x34, - 0x4b, 0xc9, 0x92, 0x0e, 0xfc, 0x17, 0x3d, 0xc1, 0x27, 0x83, 0x4e, 0xb7, 0x29, 0xae, 0xa2, 0xa6, - 0x5e, 0x69, 0xe2, 0xe8, 0x6a, 0x70, 0x8b, 0xcd, 0x5b, 0x34, 0x95, 0xe1, 0x57, 0x07, 0xb6, 0x7a, - 0x93, 0x24, 0x9e, 0xf0, 0xd3, 0x1c, 0x2f, 0xbb, 0x18, 0x51, 0x7e, 0x4d, 0x02, 0x58, 0xef, 0x09, - 0x2e, 0x59, 0x16, 0xa7, 0x93, 0x4e, 0xdb, 0x73, 0x02, 0xa7, 0xbe, 0x46, 0xcb, 0x29, 0xf2, 0x0e, - 0x56, 0xc6, 0x18, 0xb5, 0x59, 0xc6, 0xbc, 0x85, 0xc0, 0xa9, 0xaf, 0xb7, 0xfc, 0x06, 0x72, 0x79, - 0xc3, 0xe5, 0x80, 0x89, 0x78, 0x20, 0x98, 0x64, 0x63, 0x6c, 0x74, 0x4d, 0x05, 0x9d, 0x96, 0x92, - 0x10, 0x36, 0x44, 0x8e, 0x97, 0x1f, 0xd2, 0x8f, 0xc8, 0x65, 0xa7, 0xed, 0xb9, 0xba, 0x71, 0x25, - 0x17, 0x1e, 0xc3, 0xf6, 0x3d, 0x3c, 0x28, 0x48, 0x0b, 0x16, 0x25, 0x47, 0xe1, 0x39, 0x81, 0x5b, - 0x5f, 0x6f, 0xd5, 0x1a, 0x86, 0x6b, 0x3f, 0x9e, 0x44, 0x09, 0xef, 0x62, 0x64, 0x36, 0x9f, 0x26, - 0x2c, 0xbb, 0x48, 0xe5, 0x98, 0xea, 0xda, 0xf0, 0x8b, 0x03, 0x7b, 0xaa, 0x82, 0x27, 0x45, 0x05, - 0xe5, 0x98, 0x27, 0xd9, 0x49, 0x8c, 0x19, 0xf9, 0x1f, 0x96, 0x73, 0x03, 0xc2, 0xb0, 0xb3, 0x51, - 0x31, 0x69, 0xe1, 0xcf, 0x27, 0x91, 0x1a, 0x40, 0x5a, 0x40, 0xd6, 0xa4, 0x56, 0x69, 0x29, 0x13, - 0x7e, 0x77, 0xc0, 0x33, 0x9c, 0x0e, 0x58, 0x36, 0xbc, 0x54, 0xb9, 0xde, 0x84, 0xff, 0x65, 0xad, - 0x5f, 0xc1, 0x56, 0x59, 0x57, 0x45, 0xda, 0x73, 0x03, 0xb7, 0xbe, 0x46, 0x1f, 0xe4, 0xc3, 0x18, - 0xf6, 0xe6, 0xe0, 0x43, 0x41, 0x4e, 0x60, 0x0b, 0x35, 0x7d, 0x95, 0x37, 0x0a, 0x5a, 0x1f, 0x82, - 0x92, 0x3a, 0x33, 0x55, 0xa6, 0x0f, 0x76, 0x86, 0x77, 0xb0, 0x3b, 0x47, 0x4c, 0x25, 0xa3, 0x29, - 0x3a, 0x4c, 0x47, 0x5c, 0x0b, 0xe1, 0xd2, 0x52, 0x46, 0x59, 0x46, 0xf9, 0xf0, 0xa6, 0xd3, 0xd6, - 0x32, 0xac, 0x51, 0x1b, 0x91, 0x97, 0xf0, 0x8f, 0xfa, 0xa7, 0xfa, 0x1c, 0xa5, 0x72, 0x6c, 0xcf, - 0xd5, 0x12, 0xbd, 0x97, 0x0d, 0x6f, 0x61, 0xf7, 0x98, 0x67, 0x6a, 0x24, 0x1a, 0xb6, 0xfd, 0x8c, - 0x65, 0x39, 0x2a, 0x13, 0x6a, 0x00, 0xf9, 0x6f, 0x99, 0x1c, 0x2d, 0x53, 0x29, 0xa3, 0x4c, 0x4a, - 0x4b, 0x26, 0x99, 0xf9, 0xe5, 0x14, 0xf1, 0x61, 0x35, 0x15, 0x95, 0x63, 0x5d, 0xc4, 0xe1, 0xcf, - 0x45, 0xf0, 0x66, 0x4f, 0x46, 0x41, 0x3c, 0x58, 0xe1, 0x52, 0x16, 0x94, 0x97, 0xe8, 0x34, 0x54, - 0x7c, 0xb9, 0x94, 0x5d, 0x8c, 0xa6, 0x7c, 0x4d, 0x44, 0xfa, 0xb0, 0x89, 0xf9, 0x70, 0xc8, 0x11, - 0xad, 0x1b, 0xae, 0x76, 0xe3, 0x8d, 0x75, 0x63, 0xde, 0xa4, 0x46, 0xbf, 0xbc, 0x89, 0x56, 0x7b, - 0x90, 0x53, 0xd8, 0xb8, 0x60, 0x71, 0xc2, 0x47, 0xb6, 0xe7, 0xa2, 0xee, 0xf9, 0xfa, 0xa9, 0x9e, - 0x47, 0x7a, 0x4f, 0x9b, 0x67, 0x2c, 0x4e, 0x68, 0xa5, 0x83, 0x7f, 0x08, 0x9b, 0x76, 0xa2, 0x59, - 0x56, 0x12, 0x09, 0xeb, 0xb5, 0x3d, 0xe6, 0x45, 0xac, 0xb8, 0xa2, 0xee, 0x3a, 0xe5, 0x6a, 0x22, - 0xff, 0x33, 0x6c, 0x94, 0x47, 0x94, 0xae, 0xad, 0x5b, 0xb9, 0xb6, 0xcf, 0x56, 0xd1, 0xff, 0xe1, - 0x14, 0xf8, 0xac, 0x04, 0xf3, 0x9e, 0x84, 0x39, 0xd8, 0x08, 0x83, 0x9d, 0x91, 0x46, 0x35, 0x3d, - 0xc1, 0x46, 0x97, 0x67, 0xda, 0x61, 0xb5, 0x9b, 0xd9, 0xaa, 0xf5, 0x6d, 0x61, 0x7a, 0x33, 0xbb, - 0x1c, 0x91, 0x45, 0x9c, 0xaa, 0x9e, 0x7d, 0x2e, 0x6f, 0xe2, 0x21, 0x27, 0x07, 0xb0, 0x59, 0x79, - 0x2a, 0xc9, 0xae, 0x9d, 0x79, 0xff, 0x41, 0xf7, 0xbd, 0xd9, 0x0b, 0x28, 0xc8, 0x27, 0xd8, 0x99, - 0x85, 0x90, 0xd4, 0x1e, 0x85, 0x7f, 0xed, 0xef, 0x3f, 0x41, 0x8f, 0x9c, 0xc1, 0x7f, 0x33, 0xdf, - 0x14, 0xb2, 0x5f, 0xc1, 0xf2, 0xf0, 0x45, 0xf4, 0x83, 0xc7, 0x0b, 0x50, 0x1c, 0x6c, 0x9f, 0xfd, - 0xdb, 0x30, 0xdf, 0xbb, 0xf7, 0xe2, 0x5c, 0x4b, 0x72, 0xbe, 0xac, 0x3f, 0x67, 0x6f, 0x7f, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x30, 0xa9, 0x4c, 0xde, 0x0d, 0x07, 0x00, 0x00, +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_335282936f1b89e7) } + +var fileDescriptor_relay_335282936f1b89e7 = []byte{ + // 725 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x4e, 0x1b, 0x4b, + 0x10, 0xd5, 0x60, 0x9e, 0xc5, 0xbb, 0x2f, 0x5c, 0x86, 0x59, 0x18, 0xdf, 0x59, 0x20, 0xeb, 0x2a, + 0xb1, 0x25, 0x27, 0xbb, 0xec, 0xc0, 0x82, 0x58, 0xc1, 0x32, 0x6a, 0x27, 0x4a, 0xc4, 0x22, 0x56, + 0x63, 0xb7, 0xcd, 0xc8, 0x63, 0x4f, 0xd3, 0x35, 0x06, 0xf1, 0x05, 0xd9, 0xe5, 0x13, 0xb2, 0xc8, + 0x4f, 0xe4, 0x6f, 0xf2, 0x2d, 0x51, 0x3f, 0x3c, 0x99, 0xf1, 0x03, 0xc2, 0x22, 0x1b, 0xcb, 0x55, + 0x5d, 0x75, 0xaa, 0xce, 0xa9, 0x9e, 0x6a, 0xd8, 0x95, 0x3c, 0x64, 0x0f, 0x65, 0xfd, 0x5b, 0x12, + 0x32, 0x8a, 0x23, 0xb2, 0xa4, 0x0d, 0xef, 0xbf, 0x86, 0xe0, 0xc3, 0x56, 0xad, 0x5e, 0x16, 0xfd, + 0x5e, 0x59, 0x9f, 0x94, 0xb1, 0xd3, 0x6f, 0xdd, 0x63, 0xf9, 0x1e, 0x4d, 0xa4, 0xff, 0xd5, 0x81, + 0x9d, 0xc6, 0x30, 0x0c, 0x86, 0xfc, 0x72, 0x84, 0x37, 0x75, 0xec, 0x51, 0x7e, 0x4b, 0x0a, 0xb0, + 0xde, 0x10, 0x5c, 0xb2, 0x38, 0x88, 0x86, 0xb5, 0xaa, 0xeb, 0x14, 0x9c, 0xe2, 0x1a, 0x4d, 0xbb, + 0xc8, 0x6b, 0x58, 0x19, 0x60, 0xaf, 0xca, 0x62, 0xe6, 0x2e, 0x14, 0x9c, 0xe2, 0x7a, 0xc5, 0x2b, + 0x21, 0x97, 0x77, 0x5c, 0xb6, 0x98, 0x08, 0x5a, 0x82, 0x49, 0x36, 0xc0, 0x52, 0xdd, 0x44, 0xd0, + 0x71, 0x28, 0xf1, 0x61, 0x43, 0x8c, 0xf0, 0xe6, 0x7d, 0xf4, 0x01, 0xb9, 0xac, 0x55, 0xdd, 0x9c, + 0x06, 0xce, 0xf8, 0xfc, 0x73, 0xd8, 0x9d, 0xe8, 0x07, 0x05, 0xa9, 0xc0, 0xa2, 0xe4, 0x28, 0x5c, + 0xa7, 0x90, 0x2b, 0xae, 0x57, 0xf2, 0x25, 0xc3, 0xb5, 0x19, 0x0c, 0x7b, 0x21, 0xaf, 0x63, 0xcf, + 0x24, 0x5f, 0x86, 0x2c, 0xee, 0x46, 0x72, 0x40, 0x75, 0xac, 0xff, 0xc5, 0x81, 0x43, 0x15, 0xc1, + 0xc3, 0x24, 0x82, 0x72, 0x1c, 0x85, 0xf1, 0x45, 0x80, 0x31, 0xf9, 0x17, 0x96, 0x47, 0xa6, 0x09, + 0xc3, 0xce, 0x5a, 0x49, 0xa5, 0x85, 0x3f, 0xaf, 0x44, 0xf2, 0x00, 0x51, 0xd2, 0xb2, 0x26, 0xb5, + 0x4a, 0x53, 0x1e, 0xff, 0x9b, 0x03, 0xae, 0xe1, 0x74, 0xc2, 0xe2, 0xf6, 0x8d, 0xf2, 0x35, 0x86, + 0xfc, 0x2f, 0x6b, 0xfd, 0x3f, 0xec, 0xa4, 0x75, 0x55, 0xa4, 0xdd, 0x5c, 0x21, 0x57, 0x5c, 0xa3, + 0x53, 0x7e, 0x3f, 0x80, 0xc3, 0x39, 0xfd, 0xa1, 0x20, 0x17, 0xb0, 0x83, 0x9a, 0xbe, 0xf2, 0x1b, + 0x05, 0xed, 0x1c, 0x0a, 0x29, 0x75, 0x66, 0xaa, 0x4c, 0xa7, 0x32, 0xfd, 0x07, 0x38, 0x98, 0x23, + 0xa6, 0x92, 0xd1, 0x04, 0x9d, 0x46, 0x1d, 0xae, 0x85, 0xc8, 0xd1, 0x94, 0x47, 0x8d, 0x8c, 0xf2, + 0xf6, 0x5d, 0xad, 0xaa, 0x65, 0x58, 0xa3, 0xd6, 0x22, 0xc7, 0xb0, 0xa5, 0xfe, 0x29, 0x9c, 0xb3, + 0x48, 0x0e, 0xec, 0xbd, 0x5a, 0xa2, 0x13, 0x5e, 0xff, 0x1e, 0x0e, 0xce, 0x79, 0xac, 0x4a, 0xa2, + 0x61, 0xdb, 0x8c, 0x59, 0x3c, 0x42, 0x35, 0x84, 0x3c, 0xc0, 0xe8, 0xb7, 0x4c, 0x8e, 0x96, 0x29, + 0xe5, 0x51, 0x43, 0x8a, 0x52, 0x43, 0x32, 0xf5, 0xd3, 0x2e, 0xe2, 0xc1, 0x6a, 0x24, 0x32, 0xd7, + 0x3a, 0xb1, 0xfd, 0x1f, 0x8b, 0xe0, 0xce, 0xae, 0x8c, 0x82, 0xb8, 0xb0, 0xc2, 0xa5, 0x4c, 0x28, + 0x2f, 0xd1, 0xb1, 0xa9, 0xf8, 0x72, 0x29, 0xeb, 0xd8, 0x1b, 0xf3, 0x35, 0x16, 0x69, 0xc2, 0x26, + 0x8e, 0xda, 0x6d, 0x8e, 0x68, 0xa7, 0x91, 0xd3, 0xd3, 0x78, 0x69, 0xa7, 0x31, 0xaf, 0x52, 0xa9, + 0x99, 0x4e, 0xa2, 0x59, 0x0c, 0x72, 0x09, 0x1b, 0x5d, 0x16, 0x84, 0xbc, 0x63, 0x31, 0x17, 0x35, + 0xe6, 0x8b, 0xa7, 0x30, 0xcf, 0x74, 0x4e, 0x95, 0xc7, 0x2c, 0x08, 0x69, 0x06, 0xc1, 0x3b, 0x85, + 0x4d, 0x5b, 0xd1, 0x1c, 0x2b, 0x89, 0x84, 0x9d, 0xb5, 0xbd, 0xe6, 0x89, 0xad, 0xb8, 0xa2, 0x46, + 0x1d, 0x73, 0x35, 0x96, 0xf7, 0x09, 0x36, 0xd2, 0x25, 0x52, 0x9f, 0x6d, 0x2e, 0xf3, 0xd9, 0x3e, + 0x5b, 0x45, 0xef, 0xbb, 0x93, 0xf4, 0x67, 0x25, 0x98, 0xb7, 0x12, 0xe6, 0xf4, 0x46, 0x18, 0xec, + 0x75, 0x74, 0x57, 0xe3, 0x1b, 0x6c, 0x74, 0x79, 0xe6, 0x38, 0xac, 0x76, 0x33, 0xa1, 0xfc, 0xcf, + 0x40, 0xde, 0x05, 0xed, 0xbe, 0x02, 0x68, 0x74, 0xbb, 0x0a, 0xc0, 0xae, 0x8c, 0x68, 0x7a, 0x65, + 0xa4, 0x6f, 0xe3, 0x31, 0x6c, 0xf5, 0x6d, 0x5e, 0xe6, 0xd3, 0x9f, 0xf0, 0xfa, 0xfb, 0xf0, 0xcf, + 0x14, 0x3e, 0x8a, 0xca, 0xcf, 0x85, 0xf1, 0x42, 0xa8, 0x73, 0x44, 0xd6, 0xe3, 0x54, 0x51, 0x69, + 0x72, 0x79, 0x17, 0xb4, 0x39, 0x39, 0x81, 0xcd, 0xcc, 0x86, 0x26, 0x07, 0x96, 0xea, 0xe4, 0x3b, + 0xe2, 0xb9, 0xb3, 0x0f, 0x50, 0x90, 0x8f, 0xb0, 0x37, 0x4b, 0x18, 0x92, 0x7f, 0x54, 0xb5, 0x5b, + 0xef, 0xe8, 0x09, 0x55, 0xc9, 0x15, 0xec, 0xcf, 0x5c, 0x65, 0xe4, 0x28, 0xd3, 0xcb, 0xf4, 0x22, + 0xf6, 0x0a, 0x8f, 0x07, 0xa0, 0x20, 0x6f, 0x61, 0x7b, 0x42, 0x2d, 0x72, 0x68, 0x93, 0xa6, 0xa7, + 0xe4, 0x79, 0xf3, 0x8e, 0x50, 0x9c, 0xec, 0x5e, 0x6d, 0x97, 0xcc, 0x83, 0xfd, 0x46, 0x5c, 0x6b, + 0x71, 0xaf, 0x97, 0xf5, 0x7b, 0xfc, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0x04, 0x58, + 0xb0, 0xce, 0x07, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index cee15887c..b5e1bfe11 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -67,11 +67,19 @@ message GetUsersOnlineStatusResp{ repeated SuccessDetail detailPlatformStatus = 3; } +} +message KickUserOfflineReq{ + string operationID = 1; + repeated string kickUserIDList = 3; +} +message KickUserOfflineResp{ + } service OnlineMessageRelayService { rpc OnlinePushMsg(OnlinePushMsgReq) returns(OnlinePushMsgResp); rpc GetUsersOnlineStatus(GetUsersOnlineStatusReq)returns(GetUsersOnlineStatusResp); rpc OnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); + rpc KickUserOffline(KickUserOfflineReq) returns(KickUserOfflineResp); // rpc SendMsgByWS(SendMsgByWSReq) returns(MsgToUserResp); } From 064b650fac16d184f4b63d13383649eb7509d013 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 6 Jun 2022 23:19:07 +0800 Subject: [PATCH 063/256] group administrator access --- internal/rpc/auth/auth.go | 40 ++++-- internal/rpc/group/group.go | 217 +++++++++++++++++++++++-------- pkg/base_info/auth_api_struct.go | 1 - 3 files changed, 191 insertions(+), 67 deletions(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 02f246004..c9665ead2 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -8,6 +8,7 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbAuth "Open_IM/pkg/proto/auth" + pbRelay "Open_IM/pkg/proto/relay" "Open_IM/pkg/utils" "context" "net" @@ -59,17 +60,36 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA } func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) { - //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) - //err := token_verify.DeleteToken(req.FromUserID, int(req.Platform)) - //if err != nil { - // errMsg := req.OperationID + " imdb.DeleteToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) - // log.NewError(req.OperationID, errMsg) - // return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil - //} - // - //return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil - return nil, nil + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) + if !token_verify.IsManagerUserID(req.OpUserID) { + errMsg := req.OperationID + " IsManagerUserID false " + req.OpUserID + log.NewError(req.OperationID, errMsg) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if err := token_verify.DeleteToken(req.FromUserID, int(req.Platform)); err != nil { + errMsg := req.OperationID + " DeleteToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) + log.NewError(req.OperationID, errMsg) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil + } + if err := rpc.forceKickOff(req.FromUserID, req.Platform, req.OperationID); err != nil { + errMsg := req.OperationID + " forceKickOff failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform) + log.NewError(req.OperationID, errMsg) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}}) + return &pbAuth.ForceLogoutResp{CommonResp: &pbAuth.CommonResp{}}, nil +} + +func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID string) error { + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) + kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}} + _, err := client.KickUserOffline(context.Background(), kickReq) + if err != nil { + return utils.Wrap(err, "") + } + return nil } type rpcAuth struct { diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 3e9b49190..398d5982c 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -452,8 +452,28 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr return &resp, nil } +func (s *groupServer) getGroupUserLevel(groupID, userID string) (int, error) { + opFlag := 0 + if !token_verify.IsManagerUserID(userID) { + opInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID) + if err != nil { + return opFlag, utils.Wrap(err, "") + } + if opInfo.RoleLevel == constant.GroupOrdinaryUsers { + opFlag = 0 + } else if opInfo.RoleLevel == constant.GroupOwner { + opFlag = 2 //owner + } else { + opFlag = 3 //admin + } + } else { + opFlag = 1 //app manager + } + return opFlag, nil +} + func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) { - log.NewInfo(req.OperationID, "KickGroupMember args ", req.String()) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupInfoByGroupID", req.GroupID, err.Error()) @@ -462,54 +482,54 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou var okUserIDList []string var resp pbGroup.KickGroupMemberResp if groupInfo.GroupType != constant.SuperGroup { - ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID) - if err != nil { - log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID) - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil - } - //op is group owner? - var flag = 0 - for _, v := range ownerList { - if v.UserID == req.OpUserID { - flag = 1 - log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID) - break + opFlag := 0 + if !token_verify.IsManagerUserID(req.OpUserID) { + opInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + err.Error() + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } - } - - //op is app manager - if flag != 1 { - if token_verify.IsManagerUserID(req.OpUserID) { - flag = 1 - log.NewDebug(req.OperationID, "is app manager ", req.OpUserID) + if opInfo.RoleLevel == constant.GroupOrdinaryUsers { + errMsg := req.OperationID + " opInfo.RoleLevel == constant.GroupOrdinaryUsers " + opInfo.UserID + opInfo.GroupID + log.Error(req.OperationID, errMsg) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } else if opInfo.RoleLevel == constant.GroupOwner { + opFlag = 2 //owner + } else { + opFlag = 3 //admin } + } else { + opFlag = 1 //app manager } - if flag != 1 { - log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID) - return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil - } - + //op is group owner? if len(req.KickedUserIDList) == 0 { log.NewError(req.OperationID, "failed, kick list 0") return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil } - groupOwnerUserID := "" - for _, v := range ownerList { - if v.RoleLevel == constant.GroupOwner { - groupOwnerUserID = v.UserID - } - } //remove for _, v := range req.KickedUserIDList { - //owner can‘t kicked - if v == groupOwnerUserID { - log.NewError(req.OperationID, "failed, can't kick owner ", v) + kickedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, v) + if err != nil { + log.NewError(req.OperationID, " GetGroupMemberInfoByGroupIDAndUserID failed ", req.GroupID, v, err.Error()) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + continue + } + + if kickedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + log.Error(req.OperationID, "is constant.GroupAdmin, can't kicked ", v) resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) continue } - err := imdb.RemoveGroupMember(req.GroupID, v) + if kickedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + log.NewDebug(req.OperationID, "is constant.GroupOwner, can't kicked ", v) + resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) + continue + } + + err = imdb.RemoveGroupMember(req.GroupID, v) if err != nil { log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v) resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1}) @@ -518,11 +538,6 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0}) okUserIDList = append(okUserIDList, v) } - - //err = db.DB.DelGroupMember(req.GroupID, v) - //if err != nil { - // log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v) - //} } var reqPb pbUser.SetConversationReq var c pbUser.Conversation @@ -1377,14 +1392,36 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.GroupID, req.UserID) - return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.UserID} groupMemberInfo.MuteEndTime = time.Unix(int64(time.Now().Second())+int64(req.MutedSeconds), time.Now().UnixNano()) - err := imdb.UpdateGroupMemberInfo(groupMemberInfo) + err = imdb.UpdateGroupMemberInfo(groupMemberInfo) if err != nil { log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo) return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil @@ -1396,13 +1433,36 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.CancelMuteGroupMemberReq) (*pbGroup.CancelMuteGroupMemberResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.OpUserID, req.GroupID) - return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.UserID} groupMemberInfo.MuteEndTime = time.Unix(0, 0) - err := imdb.UpdateGroupMemberInfo(groupMemberInfo) + err = imdb.UpdateGroupMemberInfo(groupMemberInfo) if err != nil { log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo) return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil @@ -1414,11 +1474,34 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) (*pbGroup.MuteGroupResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.GroupID, req.GroupID) - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - err := imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusMuted) + + err = imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusMuted) if err != nil { log.Error(req.OperationID, "OperateGroupStatus failed ", err.Error(), req.GroupID, constant.GroupStatusMuted) return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil @@ -1430,12 +1513,34 @@ func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMuteGroupReq) (*pbGroup.CancelMuteGroupResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String()) - if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) { - log.Error(req.OperationID, "verify failed ", req.OpUserID, req.GroupID) - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil + + opFlag, err := s.getGroupUserLevel(req.GroupID, req.OpUserID) + if err != nil { + errMsg := req.OperationID + " getGroupUserLevel failed " + req.GroupID + req.OpUserID + err.Error() + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if opFlag == 0 { + errMsg := req.OperationID + "opFlag == 0 " + req.GroupID + req.OpUserID + log.Error(req.OperationID, errMsg) + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + + mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + if err != nil { + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + } + if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - err := imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) + err = imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) if err != nil { log.Error(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), req.GroupID) return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 9e46a92d7..bfd7b5e56 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -39,7 +39,6 @@ type UserTokenResp struct { } type ForceLogoutReq struct { - Secret string `json:"secret" binding:"required,max=32"` Platform int32 `json:"platform" binding:"required,min=1,max=8"` UserID string `json:"userID" binding:"required,min=1,max=64"` OperationID string `json:"operationID" binding:"required"` From 78298e1284f58036ab392cd5b5ae2ce94d1cd161 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 10:11:49 +0800 Subject: [PATCH 064/256] pb file --- pkg/proto/relay/relay.pb.go | 130 +++++++++++++++++++----------------- pkg/proto/relay/relay.proto | 1 + 2 files changed, 70 insertions(+), 61 deletions(-) diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 810e14a92..8a45ede9b 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{0} + return fileDescriptor_relay_022e07b962c41b1c, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{1} + return fileDescriptor_relay_022e07b962c41b1c, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -129,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{2} + return fileDescriptor_relay_022e07b962c41b1c, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{3} + return fileDescriptor_relay_022e07b962c41b1c, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -235,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{4} + return fileDescriptor_relay_022e07b962c41b1c, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{5} + return fileDescriptor_relay_022e07b962c41b1c, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{6} + return fileDescriptor_relay_022e07b962c41b1c, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -384,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7} + return fileDescriptor_relay_022e07b962c41b1c, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -446,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7, 0} + return fileDescriptor_relay_022e07b962c41b1c, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -493,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7, 1} + return fileDescriptor_relay_022e07b962c41b1c, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -549,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{7, 2} + return fileDescriptor_relay_022e07b962c41b1c, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -592,6 +592,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) GetDetailPlatformStatus() []*Ge type KickUserOfflineReq struct { OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + PlatformID int32 `protobuf:"varint,2,opt,name=platformID" json:"platformID,omitempty"` KickUserIDList []string `protobuf:"bytes,3,rep,name=kickUserIDList" json:"kickUserIDList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -602,7 +603,7 @@ func (m *KickUserOfflineReq) Reset() { *m = KickUserOfflineReq{} } func (m *KickUserOfflineReq) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineReq) ProtoMessage() {} func (*KickUserOfflineReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{8} + return fileDescriptor_relay_022e07b962c41b1c, []int{8} } func (m *KickUserOfflineReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineReq.Unmarshal(m, b) @@ -629,6 +630,13 @@ func (m *KickUserOfflineReq) GetOperationID() string { return "" } +func (m *KickUserOfflineReq) GetPlatformID() int32 { + if m != nil { + return m.PlatformID + } + return 0 +} + func (m *KickUserOfflineReq) GetKickUserIDList() []string { if m != nil { return m.KickUserIDList @@ -646,7 +654,7 @@ func (m *KickUserOfflineResp) Reset() { *m = KickUserOfflineResp{} } func (m *KickUserOfflineResp) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineResp) ProtoMessage() {} func (*KickUserOfflineResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_335282936f1b89e7, []int{9} + return fileDescriptor_relay_022e07b962c41b1c, []int{9} } func (m *KickUserOfflineResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineResp.Unmarshal(m, b) @@ -853,54 +861,54 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_335282936f1b89e7) } +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_022e07b962c41b1c) } -var fileDescriptor_relay_335282936f1b89e7 = []byte{ - // 725 bytes of a gzipped FileDescriptorProto +var fileDescriptor_relay_022e07b962c41b1c = []byte{ + // 736 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x4e, 0x1b, 0x4b, - 0x10, 0xd5, 0x60, 0x9e, 0xc5, 0xbb, 0x2f, 0x5c, 0x86, 0x59, 0x18, 0xdf, 0x59, 0x20, 0xeb, 0x2a, - 0xb1, 0x25, 0x27, 0xbb, 0xec, 0xc0, 0x82, 0x58, 0xc1, 0x32, 0x6a, 0x27, 0x4a, 0xc4, 0x22, 0x56, - 0x63, 0xb7, 0xcd, 0xc8, 0x63, 0x4f, 0xd3, 0x35, 0x06, 0xf1, 0x05, 0xd9, 0xe5, 0x13, 0xb2, 0xc8, - 0x4f, 0xe4, 0x6f, 0xf2, 0x2d, 0x51, 0x3f, 0x3c, 0x99, 0xf1, 0x03, 0xc2, 0x22, 0x1b, 0xcb, 0x55, - 0x5d, 0x75, 0xaa, 0xce, 0xa9, 0x9e, 0x6a, 0xd8, 0x95, 0x3c, 0x64, 0x0f, 0x65, 0xfd, 0x5b, 0x12, - 0x32, 0x8a, 0x23, 0xb2, 0xa4, 0x0d, 0xef, 0xbf, 0x86, 0xe0, 0xc3, 0x56, 0xad, 0x5e, 0x16, 0xfd, - 0x5e, 0x59, 0x9f, 0x94, 0xb1, 0xd3, 0x6f, 0xdd, 0x63, 0xf9, 0x1e, 0x4d, 0xa4, 0xff, 0xd5, 0x81, - 0x9d, 0xc6, 0x30, 0x0c, 0x86, 0xfc, 0x72, 0x84, 0x37, 0x75, 0xec, 0x51, 0x7e, 0x4b, 0x0a, 0xb0, - 0xde, 0x10, 0x5c, 0xb2, 0x38, 0x88, 0x86, 0xb5, 0xaa, 0xeb, 0x14, 0x9c, 0xe2, 0x1a, 0x4d, 0xbb, - 0xc8, 0x6b, 0x58, 0x19, 0x60, 0xaf, 0xca, 0x62, 0xe6, 0x2e, 0x14, 0x9c, 0xe2, 0x7a, 0xc5, 0x2b, - 0x21, 0x97, 0x77, 0x5c, 0xb6, 0x98, 0x08, 0x5a, 0x82, 0x49, 0x36, 0xc0, 0x52, 0xdd, 0x44, 0xd0, - 0x71, 0x28, 0xf1, 0x61, 0x43, 0x8c, 0xf0, 0xe6, 0x7d, 0xf4, 0x01, 0xb9, 0xac, 0x55, 0xdd, 0x9c, - 0x06, 0xce, 0xf8, 0xfc, 0x73, 0xd8, 0x9d, 0xe8, 0x07, 0x05, 0xa9, 0xc0, 0xa2, 0xe4, 0x28, 0x5c, - 0xa7, 0x90, 0x2b, 0xae, 0x57, 0xf2, 0x25, 0xc3, 0xb5, 0x19, 0x0c, 0x7b, 0x21, 0xaf, 0x63, 0xcf, - 0x24, 0x5f, 0x86, 0x2c, 0xee, 0x46, 0x72, 0x40, 0x75, 0xac, 0xff, 0xc5, 0x81, 0x43, 0x15, 0xc1, - 0xc3, 0x24, 0x82, 0x72, 0x1c, 0x85, 0xf1, 0x45, 0x80, 0x31, 0xf9, 0x17, 0x96, 0x47, 0xa6, 0x09, - 0xc3, 0xce, 0x5a, 0x49, 0xa5, 0x85, 0x3f, 0xaf, 0x44, 0xf2, 0x00, 0x51, 0xd2, 0xb2, 0x26, 0xb5, - 0x4a, 0x53, 0x1e, 0xff, 0x9b, 0x03, 0xae, 0xe1, 0x74, 0xc2, 0xe2, 0xf6, 0x8d, 0xf2, 0x35, 0x86, - 0xfc, 0x2f, 0x6b, 0xfd, 0x3f, 0xec, 0xa4, 0x75, 0x55, 0xa4, 0xdd, 0x5c, 0x21, 0x57, 0x5c, 0xa3, - 0x53, 0x7e, 0x3f, 0x80, 0xc3, 0x39, 0xfd, 0xa1, 0x20, 0x17, 0xb0, 0x83, 0x9a, 0xbe, 0xf2, 0x1b, - 0x05, 0xed, 0x1c, 0x0a, 0x29, 0x75, 0x66, 0xaa, 0x4c, 0xa7, 0x32, 0xfd, 0x07, 0x38, 0x98, 0x23, - 0xa6, 0x92, 0xd1, 0x04, 0x9d, 0x46, 0x1d, 0xae, 0x85, 0xc8, 0xd1, 0x94, 0x47, 0x8d, 0x8c, 0xf2, - 0xf6, 0x5d, 0xad, 0xaa, 0x65, 0x58, 0xa3, 0xd6, 0x22, 0xc7, 0xb0, 0xa5, 0xfe, 0x29, 0x9c, 0xb3, - 0x48, 0x0e, 0xec, 0xbd, 0x5a, 0xa2, 0x13, 0x5e, 0xff, 0x1e, 0x0e, 0xce, 0x79, 0xac, 0x4a, 0xa2, - 0x61, 0xdb, 0x8c, 0x59, 0x3c, 0x42, 0x35, 0x84, 0x3c, 0xc0, 0xe8, 0xb7, 0x4c, 0x8e, 0x96, 0x29, - 0xe5, 0x51, 0x43, 0x8a, 0x52, 0x43, 0x32, 0xf5, 0xd3, 0x2e, 0xe2, 0xc1, 0x6a, 0x24, 0x32, 0xd7, - 0x3a, 0xb1, 0xfd, 0x1f, 0x8b, 0xe0, 0xce, 0xae, 0x8c, 0x82, 0xb8, 0xb0, 0xc2, 0xa5, 0x4c, 0x28, - 0x2f, 0xd1, 0xb1, 0xa9, 0xf8, 0x72, 0x29, 0xeb, 0xd8, 0x1b, 0xf3, 0x35, 0x16, 0x69, 0xc2, 0x26, - 0x8e, 0xda, 0x6d, 0x8e, 0x68, 0xa7, 0x91, 0xd3, 0xd3, 0x78, 0x69, 0xa7, 0x31, 0xaf, 0x52, 0xa9, - 0x99, 0x4e, 0xa2, 0x59, 0x0c, 0x72, 0x09, 0x1b, 0x5d, 0x16, 0x84, 0xbc, 0x63, 0x31, 0x17, 0x35, - 0xe6, 0x8b, 0xa7, 0x30, 0xcf, 0x74, 0x4e, 0x95, 0xc7, 0x2c, 0x08, 0x69, 0x06, 0xc1, 0x3b, 0x85, - 0x4d, 0x5b, 0xd1, 0x1c, 0x2b, 0x89, 0x84, 0x9d, 0xb5, 0xbd, 0xe6, 0x89, 0xad, 0xb8, 0xa2, 0x46, - 0x1d, 0x73, 0x35, 0x96, 0xf7, 0x09, 0x36, 0xd2, 0x25, 0x52, 0x9f, 0x6d, 0x2e, 0xf3, 0xd9, 0x3e, - 0x5b, 0x45, 0xef, 0xbb, 0x93, 0xf4, 0x67, 0x25, 0x98, 0xb7, 0x12, 0xe6, 0xf4, 0x46, 0x18, 0xec, - 0x75, 0x74, 0x57, 0xe3, 0x1b, 0x6c, 0x74, 0x79, 0xe6, 0x38, 0xac, 0x76, 0x33, 0xa1, 0xfc, 0xcf, - 0x40, 0xde, 0x05, 0xed, 0xbe, 0x02, 0x68, 0x74, 0xbb, 0x0a, 0xc0, 0xae, 0x8c, 0x68, 0x7a, 0x65, - 0xa4, 0x6f, 0xe3, 0x31, 0x6c, 0xf5, 0x6d, 0x5e, 0xe6, 0xd3, 0x9f, 0xf0, 0xfa, 0xfb, 0xf0, 0xcf, - 0x14, 0x3e, 0x8a, 0xca, 0xcf, 0x85, 0xf1, 0x42, 0xa8, 0x73, 0x44, 0xd6, 0xe3, 0x54, 0x51, 0x69, - 0x72, 0x79, 0x17, 0xb4, 0x39, 0x39, 0x81, 0xcd, 0xcc, 0x86, 0x26, 0x07, 0x96, 0xea, 0xe4, 0x3b, - 0xe2, 0xb9, 0xb3, 0x0f, 0x50, 0x90, 0x8f, 0xb0, 0x37, 0x4b, 0x18, 0x92, 0x7f, 0x54, 0xb5, 0x5b, - 0xef, 0xe8, 0x09, 0x55, 0xc9, 0x15, 0xec, 0xcf, 0x5c, 0x65, 0xe4, 0x28, 0xd3, 0xcb, 0xf4, 0x22, - 0xf6, 0x0a, 0x8f, 0x07, 0xa0, 0x20, 0x6f, 0x61, 0x7b, 0x42, 0x2d, 0x72, 0x68, 0x93, 0xa6, 0xa7, - 0xe4, 0x79, 0xf3, 0x8e, 0x50, 0x9c, 0xec, 0x5e, 0x6d, 0x97, 0xcc, 0x83, 0xfd, 0x46, 0x5c, 0x6b, - 0x71, 0xaf, 0x97, 0xf5, 0x7b, 0xfc, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0x04, 0x58, - 0xb0, 0xce, 0x07, 0x00, 0x00, + 0x10, 0xd5, 0x60, 0xcc, 0xa3, 0x80, 0x0b, 0xf4, 0x85, 0xcb, 0x30, 0x0b, 0xe3, 0x3b, 0x8b, 0xc8, + 0x8a, 0x12, 0x5b, 0x72, 0xb2, 0xcb, 0x0e, 0x2c, 0x88, 0x15, 0x2c, 0xa3, 0x76, 0xa2, 0x44, 0x6c, + 0xac, 0xc6, 0x6e, 0x9b, 0x91, 0xc7, 0x9e, 0xa6, 0x6b, 0x0c, 0x62, 0x93, 0x6d, 0x76, 0xf9, 0x84, + 0x2c, 0xf2, 0x13, 0xf9, 0x9b, 0x7c, 0x4b, 0xd4, 0x0f, 0x4f, 0x66, 0xfc, 0x80, 0xb0, 0xc8, 0xc6, + 0x72, 0x55, 0x57, 0x9f, 0xaa, 0x73, 0xaa, 0xa6, 0x1a, 0x76, 0x25, 0x0f, 0xd9, 0x7d, 0x45, 0xff, + 0x96, 0x85, 0x8c, 0xe2, 0x88, 0xe4, 0xb5, 0xe1, 0xfd, 0xdf, 0x14, 0x7c, 0xd4, 0xae, 0x37, 0x2a, + 0x62, 0xd0, 0xaf, 0xe8, 0x93, 0x0a, 0x76, 0x07, 0xed, 0x3b, 0xac, 0xdc, 0xa1, 0x89, 0xf4, 0xbf, + 0x3a, 0xb0, 0xd3, 0x1c, 0x85, 0xc1, 0x88, 0x5f, 0x8c, 0xf1, 0xba, 0x81, 0x7d, 0xca, 0x6f, 0x48, + 0x11, 0x36, 0x9a, 0x82, 0x4b, 0x16, 0x07, 0xd1, 0xa8, 0x5e, 0x73, 0x9d, 0xa2, 0x53, 0x5a, 0xa7, + 0x69, 0x17, 0x79, 0x0d, 0xab, 0x43, 0xec, 0xd7, 0x58, 0xcc, 0xdc, 0xa5, 0xa2, 0x53, 0xda, 0xa8, + 0x7a, 0x65, 0xe4, 0xf2, 0x96, 0xcb, 0x36, 0x13, 0x41, 0x5b, 0x30, 0xc9, 0x86, 0x58, 0x6e, 0x98, + 0x08, 0x3a, 0x09, 0x25, 0x3e, 0x6c, 0x8a, 0x31, 0x5e, 0xbf, 0x8f, 0x3e, 0x20, 0x97, 0xf5, 0x9a, + 0x9b, 0xd3, 0xc0, 0x19, 0x9f, 0x7f, 0x06, 0xbb, 0x53, 0xf5, 0xa0, 0x20, 0x55, 0x58, 0x96, 0x1c, + 0x85, 0xeb, 0x14, 0x73, 0xa5, 0x8d, 0x6a, 0xa1, 0x6c, 0xb8, 0xb6, 0x82, 0x51, 0x3f, 0xe4, 0x0d, + 0xec, 0x9b, 0xcb, 0x17, 0x21, 0x8b, 0x7b, 0x91, 0x1c, 0x52, 0x1d, 0xeb, 0x7f, 0x71, 0xe0, 0x50, + 0x45, 0xf0, 0x30, 0x89, 0xa0, 0x1c, 0xc7, 0x61, 0x7c, 0x1e, 0x60, 0x4c, 0xfe, 0x83, 0x95, 0xb1, + 0x29, 0xc2, 0xb0, 0xb3, 0x56, 0x92, 0x69, 0xe9, 0xcf, 0x33, 0x91, 0x02, 0x40, 0x94, 0x94, 0xac, + 0x49, 0xad, 0xd1, 0x94, 0xc7, 0xff, 0xe6, 0x80, 0x6b, 0x38, 0x1d, 0xb3, 0xb8, 0x73, 0xad, 0x7c, + 0xcd, 0x11, 0xff, 0xcb, 0x5a, 0x3f, 0x87, 0x9d, 0xb4, 0xae, 0x8a, 0xb4, 0x9b, 0x2b, 0xe6, 0x4a, + 0xeb, 0x74, 0xc6, 0xef, 0x07, 0x70, 0xb8, 0xa0, 0x3e, 0x14, 0xe4, 0x1c, 0x76, 0x50, 0xd3, 0x57, + 0x7e, 0xa3, 0xa0, 0xed, 0x43, 0x31, 0xa5, 0xce, 0x5c, 0x95, 0xe9, 0xcc, 0x4d, 0xff, 0x1e, 0x0e, + 0x16, 0x88, 0xa9, 0x64, 0x34, 0x41, 0x27, 0x51, 0x97, 0x6b, 0x21, 0x72, 0x34, 0xe5, 0x51, 0x2d, + 0xa3, 0xbc, 0x73, 0x5b, 0xaf, 0x69, 0x19, 0xd6, 0xa9, 0xb5, 0xc8, 0x33, 0xf8, 0x47, 0xfd, 0x53, + 0x38, 0xa7, 0x91, 0x1c, 0xda, 0xb9, 0xca, 0xd3, 0x29, 0xaf, 0x7f, 0x07, 0x07, 0x67, 0x3c, 0x56, + 0x29, 0xd1, 0xb0, 0x6d, 0xc5, 0x2c, 0x1e, 0xa3, 0x6a, 0x42, 0x01, 0x60, 0xfc, 0x5b, 0x26, 0x47, + 0xcb, 0x94, 0xf2, 0xa8, 0x26, 0x45, 0xa9, 0x26, 0x99, 0xfc, 0x69, 0x17, 0xf1, 0x60, 0x2d, 0x12, + 0x99, 0xb1, 0x4e, 0x6c, 0xff, 0xc7, 0x32, 0xb8, 0xf3, 0x33, 0xa3, 0x20, 0x2e, 0xac, 0x72, 0x29, + 0x13, 0xca, 0x79, 0x3a, 0x31, 0x15, 0x5f, 0x2e, 0x65, 0x03, 0xfb, 0x13, 0xbe, 0xc6, 0x22, 0x2d, + 0xd8, 0xc2, 0x71, 0xa7, 0xc3, 0x11, 0x6d, 0x37, 0x72, 0xba, 0x1b, 0x2f, 0x6d, 0x37, 0x16, 0x65, + 0x2a, 0xb7, 0xd2, 0x97, 0x68, 0x16, 0x83, 0x5c, 0xc0, 0x66, 0x8f, 0x05, 0x21, 0xef, 0x5a, 0xcc, + 0x65, 0x8d, 0xf9, 0xe2, 0x31, 0xcc, 0x53, 0x7d, 0xa7, 0xc6, 0x63, 0x16, 0x84, 0x34, 0x83, 0xe0, + 0x9d, 0xc0, 0x96, 0xcd, 0x68, 0x8e, 0x95, 0x44, 0xc2, 0xf6, 0xda, 0x8e, 0x79, 0x62, 0x2b, 0xae, + 0xa8, 0x51, 0x27, 0x5c, 0x8d, 0xe5, 0x7d, 0x82, 0xcd, 0x74, 0x8a, 0xd4, 0x67, 0x9b, 0xcb, 0x7c, + 0xb6, 0x4f, 0x56, 0xd1, 0xfb, 0xee, 0x24, 0xf5, 0x59, 0x09, 0x16, 0xad, 0x84, 0x05, 0xb5, 0x11, + 0x06, 0x7b, 0x5d, 0x5d, 0xd5, 0x64, 0x82, 0x8d, 0x2e, 0x4f, 0x6c, 0x87, 0xd5, 0x6e, 0x2e, 0x94, + 0xff, 0x19, 0xc8, 0xbb, 0xa0, 0x33, 0x50, 0x00, 0xcd, 0x5e, 0x4f, 0x01, 0xd8, 0x95, 0x11, 0xcd, + 0xae, 0x8c, 0xf4, 0x34, 0x16, 0x00, 0x26, 0xd2, 0xda, 0x71, 0xcd, 0xd3, 0x94, 0x47, 0x7d, 0x32, + 0x03, 0x8b, 0x9b, 0x59, 0x0d, 0x53, 0x5e, 0x7f, 0x1f, 0xfe, 0x9d, 0xc9, 0x8f, 0xa2, 0xfa, 0x73, + 0x69, 0xb2, 0x30, 0x1a, 0x1c, 0x91, 0xf5, 0x39, 0x55, 0x54, 0x5b, 0x5c, 0xde, 0x06, 0x1d, 0x4e, + 0x8e, 0x61, 0x2b, 0xb3, 0xc1, 0xc9, 0x81, 0x95, 0x62, 0xfa, 0x9d, 0xf1, 0xdc, 0xf9, 0x07, 0x28, + 0xc8, 0x47, 0xd8, 0x9b, 0x27, 0x1c, 0x29, 0x3c, 0xa8, 0xea, 0x8d, 0x77, 0xf4, 0x88, 0xea, 0xe4, + 0x12, 0xf6, 0xe7, 0xae, 0x3a, 0x72, 0x94, 0xa9, 0x65, 0x76, 0x51, 0x7b, 0xc5, 0x87, 0x03, 0x50, + 0x90, 0xb7, 0xb0, 0x3d, 0xa5, 0x16, 0x39, 0xb4, 0x97, 0x66, 0xbb, 0xe8, 0x79, 0x8b, 0x8e, 0x50, + 0x1c, 0xef, 0x5e, 0x6e, 0x97, 0xcd, 0x83, 0xfe, 0x46, 0x5c, 0x69, 0x71, 0xaf, 0x56, 0xf4, 0x7b, + 0xfd, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xfe, 0xd8, 0xc1, 0xee, 0x07, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index b5e1bfe11..3074fea68 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -70,6 +70,7 @@ message GetUsersOnlineStatusResp{ } message KickUserOfflineReq{ string operationID = 1; +int32 platformID = 2; repeated string kickUserIDList = 3; } message KickUserOfflineResp{ From 4678189ed473a883198d440e5e8a709616b0bc3a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 10:12:15 +0800 Subject: [PATCH 065/256] pb file --- internal/rpc/auth/auth.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index c9665ead2..425df49ff 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -84,7 +84,7 @@ func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID st etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) - kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}} + kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} _, err := client.KickUserOffline(context.Background(), kickReq) if err != nil { return utils.Wrap(err, "") From 9106e70b375452f871ae81c958924285e911b36e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 10:13:19 +0800 Subject: [PATCH 066/256] group administrator access --- cmd/open_im_api/main.go | 3 ++- internal/rpc/group/group.go | 26 +++++++++++++------------- pkg/common/token_verify/jwt_token.go | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 8fbc78576..af2bab6dc 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -89,6 +89,7 @@ func main() { groupRouterGroup.POST("/mute_group", group.MuteGroup) groupRouterGroup.POST("/cancel_mute_group", group.CancelMuteGroup) groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname) + } superGroupRouterGroup := r.Group("/super_group") { @@ -101,6 +102,7 @@ func main() { authRouterGroup.POST("/user_register", apiAuth.UserRegister) //1 authRouterGroup.POST("/user_token", apiAuth.UserToken) //1 authRouterGroup.POST("/parse_token", apiAuth.ParseToken) //1 + authRouterGroup.POST("/force_logout", apiAuth.ForceLogout) //1 } //Third service thirdGroup := r.Group("/third") @@ -130,7 +132,6 @@ func main() { managementGroup.POST("/get_all_users_uid", manage.GetAllUsersUid) //1 managementGroup.POST("/account_check", manage.AccountCheck) //1 managementGroup.POST("/get_users_online_status", manage.GetUsersOnlineStatus) //1 - } //Conversation conversationGroup := r.Group("/conversation") diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 398d5982c..d544cb04f 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1526,19 +1526,19 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) - if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } + //mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.) + //if err != nil { + // errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} err = imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) if err != nil { diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 08ff786aa..f1e95bba7 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -37,6 +37,25 @@ func BuildClaims(uid, platform string, ttl int64) Claims { }} } +func DeleteToken(userID string, platformID int) error { + m, err := commonDB.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) + if err != nil && err != redis.ErrNil { + return utils.Wrap(err, "") + } + var deleteTokenKey []string + for k, v := range m { + _, err = GetClaimFromToken(k) + if err != nil || v != constant.NormalToken { + deleteTokenKey = append(deleteTokenKey, k) + } + } + if len(deleteTokenKey) != 0 { + err = commonDB.DB.DeleteTokenByUidPid(userID, platformID, deleteTokenKey) + return utils.Wrap(err, "") + } + return nil +} + func CreateToken(userID string, platformID int) (string, int64, error) { claims := BuildClaims(userID, constant.PlatformIDToName(platformID), config.Config.TokenPolicy.AccessExpire) token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) From 3639f943bfe879ae33562cd275e9d95a34cb6df4 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 10:20:56 +0800 Subject: [PATCH 067/256] group administrator access --- internal/rpc/group/group.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index d544cb04f..e9452a813 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1487,19 +1487,19 @@ func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } - mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) - if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } - if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() - return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil - } + //mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) + //if err != nil { + // errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} + //if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { + // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + // return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil + //} err = imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusMuted) if err != nil { From 34e8b79e7e421d80af3374bb3797f7a2333a4479 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 10:38:01 +0800 Subject: [PATCH 068/256] pb file --- internal/msg_gateway/gate/rpc_server.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 4ad615415..94195449a 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -29,10 +29,6 @@ type RPCServer struct { pushTerminal []int } -func (r *RPCServer) KickUserOffline(c context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { - panic("implement me") -} - func (r *RPCServer) onInit(rpcPort int) { r.rpcPort = rpcPort r.rpcRegisterName = config.Config.RpcRegisterName.OpenImOnlineMessageRelayName @@ -192,6 +188,9 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online SinglePushResult: singleUserResult, }, nil } +func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { + panic("implement me") +} func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) if err != nil { From 290ae774e049ee77012a86c922c01de421806552 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 11:42:15 +0800 Subject: [PATCH 069/256] ForceLogout --- internal/api/auth/auth.go | 27 +++++++++++++++++++-------- internal/rpc/auth/auth.go | 6 +----- pkg/base_info/auth_api_struct.go | 2 +- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 826374188..5441cc2ea 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -134,19 +134,30 @@ func ForceLogout(c *gin.Context) { return } + req := &rpc.ForceLogoutReq{} + utils.CopyStructFields(req, ¶ms) + var ok bool var errInfo string - var expireTime int64 - ok, _, errInfo, expireTime = token_verify.GetUserIDFromTokenExpireTime(c.Request.Header.Get("token"), params.OperationID) + ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) if !ok { - errMsg := params.OperationID + " " + "GetUserIDFromTokenExpireTime failed " + errInfo + " token:" + c.Request.Header.Get("token") - log.NewError(params.OperationID, errMsg) + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: uint32(expireTime)}} - resp.Data = structs.Map(&resp.ExpireTime) - log.NewInfo(params.OperationID, "ParseToken return ", resp) - c.JSON(http.StatusOK, resp) + log.NewInfo(req.OperationID, "ForceLogout args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + client := rpc.NewAuthClient(etcdConn) + reply, err := client.ForceLogout(context.Background(), req) + if err != nil { + errMsg := req.OperationID + " UserToken failed " + err.Error() + req.String() + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + log.NewInfo(params.OperationID, utils.GetSelfFuncName(), " return ", reply) + c.JSON(http.StatusOK, reply) } diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 425df49ff..be8c30e86 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -83,13 +83,9 @@ func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) ( func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID string) error { etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) - kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} _, err := client.KickUserOffline(context.Background(), kickReq) - if err != nil { - return utils.Wrap(err, "") - } - return nil + return utils.Wrap(err, "") } type rpcAuth struct { diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index bfd7b5e56..70f0f86c9 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -40,7 +40,7 @@ type UserTokenResp struct { type ForceLogoutReq struct { Platform int32 `json:"platform" binding:"required,min=1,max=8"` - UserID string `json:"userID" binding:"required,min=1,max=64"` + FromUserID string `json:"fromUserID" binding:"required,min=1,max=64"` OperationID string `json:"operationID" binding:"required"` } From eac137a9a9236e96f7c82735c60d2576b23278fa Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 11:50:37 +0800 Subject: [PATCH 070/256] ForceLogout --- internal/rpc/auth/auth.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index be8c30e86..c145f4499 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -11,6 +11,7 @@ import ( pbRelay "Open_IM/pkg/proto/relay" "Open_IM/pkg/utils" "context" + "errors" "net" "strconv" "strings" @@ -81,11 +82,16 @@ func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) ( } func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID string) error { - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) - client := pbRelay.NewOnlineMessageRelayServiceClient(etcdConn) - kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} - _, err := client.KickUserOffline(context.Background(), kickReq) - return utils.Wrap(err, "") + + grpcCons := getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + for _, v := range grpcCons { + client := pbRelay.NewOnlineMessageRelayServiceClient(v) + kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} + _, err := client.KickUserOffline(context.Background(), kickReq) + return utils.Wrap(err, "") + } + + return errors.New("no rpc node ") } type rpcAuth struct { From f8962beca656a05f4456c0f7eae5498da9e3d933 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 16:05:59 +0800 Subject: [PATCH 071/256] kick --- internal/msg_gateway/gate/rpc_server.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 94195449a..3ac358ec9 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -189,7 +189,14 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online }, nil } func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { - panic("implement me") + for _, v := range req.KickUserIDList { + oldConnMap := ws.getUserAllCons(v) + if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] + ws.sendKickMsg(conn, &UserConn{}) + } + } + return nil, nil + } func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) From 89f40fe3dec39f67df5292f745860f09a649d38f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 16:17:08 +0800 Subject: [PATCH 072/256] kick --- internal/msg_gateway/gate/rpc_server.go | 1 + pkg/common/constant/constant.go | 1 + 2 files changed, 2 insertions(+) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 3ac358ec9..788f82956 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -189,6 +189,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online }, nil } func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { + log.NewInfo(req.OperationID, "KickUserOffline is arriving", req.String()) for _, v := range req.KickUserIDList { oldConnMap := ws.getUserAllCons(v) if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 6ab990cb7..fd13886d2 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -214,6 +214,7 @@ const ( AtMe = 1 AtAll = 2 AtAllAtMe = 3 + GroupAnnouncement ) var ContentType2PushContent = map[int64]string{ From 4418d031e16d500ab090e8f57268621f70d9948a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 16:18:23 +0800 Subject: [PATCH 073/256] log --- internal/rpc/auth/auth.go | 1 + internal/rpc/group/group.go | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index c145f4499..768cf980a 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -87,6 +87,7 @@ func (rpc *rpcAuth) forceKickOff(userID string, platformID int32, operationID st for _, v := range grpcCons { client := pbRelay.NewOnlineMessageRelayServiceClient(v) kickReq := &pbRelay.KickUserOfflineReq{OperationID: operationID, KickUserIDList: []string{userID}, PlatformID: platformID} + log.NewInfo(operationID, "KickUserOffline ", client, kickReq.String()) _, err := client.KickUserOffline(context.Background(), kickReq) return utils.Wrap(err, "") } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index e9452a813..c2b2d27ca 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1406,15 +1406,15 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.UserID + err.Error() return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } @@ -1448,15 +1448,15 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca mutedInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.UserID) if err != nil { - errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " GetGroupMemberInfoByGroupIDAndUserID failed " + req.GroupID + req.UserID + err.Error() return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } From f106664952c007445eb549d757cc0909e1f20f68 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 16:27:11 +0800 Subject: [PATCH 074/256] kick --- pkg/common/constant/constant.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index fd13886d2..7be774b2f 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -209,12 +209,12 @@ const ( WorkMomentAtUserNotification = 2 ) const ( - AtAllString = "AtAllTag" - AtNormal = 0 - AtMe = 1 - AtAll = 2 - AtAllAtMe = 3 - GroupAnnouncement + AtAllString = "AtAllTag" + AtNormal = 0 + AtMe = 1 + AtAll = 2 + AtAllAtMe = 3 + GroupNotification = 4 ) var ContentType2PushContent = map[int64]string{ From 3f2638efafd5aed810c2bbbc8723ce1809bce55d Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 16:28:51 +0800 Subject: [PATCH 075/256] KickUserOffline --- internal/msg_gateway/gate/rpc_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 788f82956..b0adb5037 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -196,7 +196,7 @@ func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOffl ws.sendKickMsg(conn, &UserConn{}) } } - return nil, nil + return &pbRelay.KickUserOfflineResp{}, nil } func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { From 2b150e3c1c8fd3cd9b93ab7c3d18323c75cd2aef Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 16:38:42 +0800 Subject: [PATCH 076/256] KickUserOffline --- internal/api/auth/auth.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 5441cc2ea..66a0c3825 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -157,7 +157,7 @@ func ForceLogout(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - - log.NewInfo(params.OperationID, utils.GetSelfFuncName(), " return ", reply) - c.JSON(http.StatusOK, reply) + resp := api.ForceLogoutResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}} + log.NewInfo(params.OperationID, utils.GetSelfFuncName(), " return ", resp) + c.JSON(http.StatusOK, resp) } From ef93a1f42e41a9eed6421d4fda0d9ae80aa1b3f0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 17:45:07 +0800 Subject: [PATCH 077/256] add conversation sync --- internal/rpc/group/group.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index c2b2d27ca..c132c9248 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -12,6 +12,7 @@ import ( cp "Open_IM/pkg/common/utils" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbCache "Open_IM/pkg/proto/cache" + pbConversation "Open_IM/pkg/proto/conversation" pbGroup "Open_IM/pkg/proto/group" open_im_sdk "Open_IM/pkg/proto/sdk_ws" pbUser "Open_IM/pkg/proto/user" @@ -934,6 +935,42 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf if changedType != 0 { chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL) } + if req.GroupInfo.Notification != "" { + //get group member user id + getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: req.OperationID, GroupID: req.GroupInfo.GroupID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + client := pbCache.NewCacheClient(etcdConn) + cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) + if err != nil { + log.NewError(req.OperationID, "GetGroupMemberIDListFromCache rpc call failed ", err.Error()) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil + } + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(req.OperationID, "GetGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String()) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil + } + var conversationReq pbConversation.ModifyConversationFieldReq + + conversation := pbConversation.Conversation{ + OwnerUserID: req.OpUserID, + ConversationID: utils.GetConversationIDBySessionType(req.GroupInfo.GroupID, constant.GroupChatType), + ConversationType: constant.GroupChatType, + GroupID: req.GroupInfo.GroupID, + } + conversationReq.Conversation = &conversation + conversationReq.OperationID = req.OperationID + conversationReq.FieldType = constant.FieldGroupAtType + conversation.GroupAtType = constant.GroupNotification + conversationReq.UserIDList = cacheResp.UserIDList + nEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + nClient := pbConversation.NewConversationClient(nEtcdConn) + conversationReply, err := nClient.ModifyConversationField(context.Background(), &conversationReq) + if err != nil { + log.NewError(conversationReq.OperationID, "ModifyConversationField rpc failed, ", conversationReq.String(), err.Error()) + } else if conversationReply.CommonResp.ErrCode != 0 { + log.NewError(conversationReq.OperationID, "ModifyConversationField rpc failed, ", conversationReq.String(), conversationReply.String()) + } + } return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil } From 6ce1d60ebb03ec6c47797fe73b1a72d80571bdb8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 18:09:11 +0800 Subject: [PATCH 078/256] log --- 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 c2b2d27ca..28ffa119d 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1539,7 +1539,7 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil //} - + log.Debug(req.OperationID, "UpdateGroupInfoDefaultZero ", req.GroupID, map[string]interface{}{"status": constant.GroupOk}) err = imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk}) if err != nil { log.Error(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), req.GroupID) From 0463f5e83d88de56cbd634f0668c9b24e0b2bebc Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 7 Jun 2022 18:25:08 +0800 Subject: [PATCH 079/256] fix bug --- internal/rpc/group/group.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index fb77a2cf1..60127c425 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1448,11 +1448,11 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } @@ -1490,11 +1490,11 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupOwner " + req.GroupID + req.UserID return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } if mutedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 { - errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID + err.Error() + errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.UserID return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil } From e52639d1d4c0f2b8cbdf540566e39c8e88281db1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 7 Jun 2022 18:36:06 +0800 Subject: [PATCH 080/256] fix bug --- 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 7d8a89564..529e7494c 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -858,5 +858,5 @@ func SetGroupMemberInfo(c *gin.Context) { resp.ErrMsg = respPb.CommonResp.ErrMsg resp.ErrCode = respPb.CommonResp.ErrCode log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", resp) - c.JSON(http.StatusInternalServerError, resp) + c.JSON(http.StatusOK, resp) } From a87e41eecd704ad46408dae5a366e744362782b9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 18:39:43 +0800 Subject: [PATCH 081/256] super group push --- internal/push/logic/push_to_client.go | 207 ++++++++++++++------------ 1 file changed, 111 insertions(+), 96 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 271bb4792..386c951e8 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -12,6 +12,7 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbCache "Open_IM/pkg/proto/cache" pbPush "Open_IM/pkg/proto/push" pbRelay "Open_IM/pkg/proto/relay" pbRtc "Open_IM/pkg/proto/rtc" @@ -138,102 +139,116 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { } func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { - return - //var wsResult []*pbRelay.SingelMsgToUserResultList - //isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) - //log.Debug(pushMsg.OperationID, "Get msg from msg_transfer And push msg", pushMsg.String()) - //if len(grpcCons) == 0 { - // log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") - // grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) - //} - ////Online push message - //log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) - //for _, v := range grpcCons { - // msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - // reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: pushMsg.PushToUserID}) - // if err != nil { - // log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) - // continue - // } - // if reply != nil && reply.SinglePushResult != nil { - // wsResult = append(wsResult, reply.SinglePushResult...) - // } - //} - //log.Debug(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) - //successCount++ - //if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID { - // for _, v := range wsResult { - // if v.ResultCode == 0 { - // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - // break - // } - // continue - // } - // if utils.IsContainInt32(v.RecvPlatFormID, pushTerminal) { - // //Use offline push messaging - // var UIDList []string - // UIDList = append(UIDList, v.RecvID) - // customContent := OpenIMContent{ - // SessionType: int(pushMsg.MsgData.SessionType), - // From: pushMsg.MsgData.SendID, - // To: pushMsg.MsgData.RecvID, - // Seq: pushMsg.MsgData.Seq, - // } - // bCustomContent, _ := json.Marshal(customContent) - // jsonCustomContent := string(bCustomContent) - // var content string - // if pushMsg.MsgData.OfflinePushInfo != nil { - // content = pushMsg.MsgData.OfflinePushInfo.Title - // - // } else { - // switch pushMsg.MsgData.ContentType { - // case constant.Text: - // content = constant.ContentType2PushContent[constant.Text] - // case constant.Picture: - // content = constant.ContentType2PushContent[constant.Picture] - // case constant.Voice: - // content = constant.ContentType2PushContent[constant.Voice] - // case constant.Video: - // content = constant.ContentType2PushContent[constant.Video] - // case constant.File: - // content = constant.ContentType2PushContent[constant.File] - // case constant.AtText: - // a := AtContent{} - // _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) - // if utils.IsContain(v.RecvID, a.AtUserList) { - // content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] - // } else { - // content = constant.ContentType2PushContent[constant.GroupMsg] - // } - // default: - // content = constant.ContentType2PushContent[constant.Common] - // } - // } - // callbackResp := callbackOfflinePush(pushMsg.OperationID, UIDList[0], pushMsg.MsgData.OfflinePushInfo, v.RecvPlatFormID) - // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") - // if callbackResp.ErrCode != 0 { - // log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) - // } - // if callbackResp.ActionCode != constant.ActionAllow { - // log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") - // break - // } - // - // if offlinePusher == nil { - // offlinePusher = jpush.JPushClient - // } - // pushResult, err := offlinePusher.Push(UIDList, content, jsonCustomContent, pushMsg.OperationID) - // if err != nil { - // log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) - // } else { - // log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) - // } - // break - // } - // - // } - // - //} + var wsResult []*pbRelay.SingelMsgToUserResultList + isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) + log.Debug(pushMsg.OperationID, "Get super group msg from msg_transfer And push msg", pushMsg.String()) + getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pushMsg.OperationID, GroupID: pushMsg.MsgData.GroupID} + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + client := pbCache.NewCacheClient(etcdConn) + cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) + if err != nil { + log.NewError(pushMsg.OperationID, "GetGroupMemberIDListFromCache rpc call failed ", err.Error()) + return + } + if cacheResp.CommonResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, "GetGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String()) + return + } + if len(grpcCons) == 0 { + log.NewWarn(pushMsg.OperationID, "first GetConn4Unique ") + grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) + } + //Online push message + log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + for _, v := range grpcCons { + msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: cacheResp.UserIDList}) + if err != nil { + log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + continue + } + if reply != nil && reply.SinglePushResult != nil { + wsResult = append(wsResult, reply.SinglePushResult...) + } + } + log.Debug(pushMsg.OperationID, "push_result", wsResult, "sendData", pushMsg.MsgData) + successCount++ + if isOfflinePush { + var onlineSuccessUserIDList []string + onlineSuccessUserIDList = append(onlineSuccessUserIDList, pushMsg.MsgData.SendID) + for _, v := range wsResult { + if v.OnlinePush && v.UserID != pushMsg.MsgData.SendID { + onlineSuccessUserIDList = append(onlineSuccessUserIDList, v.UserID) + } + } + onlineFailedUserIDList := utils.DifferenceString(onlineSuccessUserIDList, cacheResp.UserIDList) + //Use offline push messaging + customContent := OpenIMContent{ + SessionType: int(pushMsg.MsgData.SessionType), + From: pushMsg.MsgData.SendID, + To: pushMsg.MsgData.RecvID, + Seq: pushMsg.MsgData.Seq, + } + bCustomContent, _ := json.Marshal(customContent) + jsonCustomContent := string(bCustomContent) + var content string + if pushMsg.MsgData.OfflinePushInfo != nil { + content = pushMsg.MsgData.OfflinePushInfo.Title + + } else { + switch pushMsg.MsgData.ContentType { + case constant.Text: + content = constant.ContentType2PushContent[constant.Text] + case constant.Picture: + content = constant.ContentType2PushContent[constant.Picture] + case constant.Voice: + content = constant.ContentType2PushContent[constant.Voice] + case constant.Video: + content = constant.ContentType2PushContent[constant.Video] + case constant.File: + content = constant.ContentType2PushContent[constant.File] + case constant.AtText: + a := AtContent{} + _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + if utils.IsContain(pushMsg.PushToUserID, a.AtUserList) { + content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] + } else { + content = constant.ContentType2PushContent[constant.GroupMsg] + } + case constant.SignalingNotification: + content = constant.ContentType2PushContent[constant.SignalMsg] + default: + content = constant.ContentType2PushContent[constant.Common] + + } + } + + callbackResp := callbackOfflinePush(pushMsg.OperationID, onlineFailedUserIDList[0], pushMsg.MsgData) + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp") + if callbackResp.ErrCode != 0 { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp) + } + if callbackResp.ActionCode != constant.ActionAllow { + log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop") + return + } + if offlinePusher == nil { + return + } + opts, err := GetOfflinePushOpts(pushMsg) + if err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error()) + } + log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), onlineFailedUserIDList, content, jsonCustomContent, "opts:", opts) + pushResult, err := offlinePusher.Push(onlineFailedUserIDList, content, jsonCustomContent, pushMsg.OperationID, opts) + if err != nil { + log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error()) + } else { + log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData) + } + + } + } func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err error) { From cfe01bb8200044dab4a1620692be856d544862f7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 18:45:00 +0800 Subject: [PATCH 082/256] super group push --- internal/push/logic/push_to_client.go | 42 --------------------------- 1 file changed, 42 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 386c951e8..896953cd2 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -267,45 +267,3 @@ func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err err } return opts, nil } - -//func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) { -// m.MsgID = rpcChat.GetMsgID(m.SendID) -// m.ClientMsgID = m.MsgID -// switch m.SessionType { -// case constant.SingleChatType: -// sendMsgToKafka(m, m.SendID, "msgKey--sendID") -// sendMsgToKafka(m, m.RecvID, "msgKey--recvID") -// case constant.GroupChatType: -// etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) -// client := pbGroup.NewGroupClient(etcdConn) -// req := &pbGroup.Req{ -// GroupID: m.RecvID, -// Token: config.Config.Secret, -// OperationID: m.OperationID, -// } -// reply, err := client.(context.Background(), req) -// if err != nil { -// log.Error(m.Token, m.OperationID, "rpc getGroupInfo failed, err = %s", err.Error()) -// return -// } -// if reply.ErrorCode != 0 { -// log.Error(m.Token, m.OperationID, "rpc getGroupInfo failed, err = %s", reply.ErrorMsg) -// return -// } -// groupID := m.RecvID -// for i, v := range reply.MemberList { -// m.RecvID = v.UserId + " " + groupID -// sendMsgToKafka(m, utils.IntToString(i), "msgKey--recvID+\" \"+groupID") -// } -// default: -// -// } -//} -// -//func sendMsgToKafka(m *pbChat.WSToMsgSvrChatMsg, key string, flag string) { -// pid, offset, err := producer.SendMessage(m, key) -// if err != nil { -// log.ErrorByKv("kafka send failed", m.OperationID, "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), flag, key) -// } -// -//} From 7d0c8b0c5f9d3e4ee444998b6e8fad28cc44dd44 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 7 Jun 2022 19:02:19 +0800 Subject: [PATCH 083/256] super group add notification --- internal/rpc/group/group.go | 12 +++--------- internal/rpc/msg/send_msg.go | 4 +++- internal/rpc/msg/super_group_notification.go | 9 +++++---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 60127c425..753fc856d 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -200,9 +200,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR if req.GroupInfo.GroupType != constant.SuperGroup { chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList) } else { - for _, userID := range okUserIDList { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) - } + chat.SuperGroupNotification(req.OperationID, req.OpUserID, groupId) } return resp, nil @@ -385,9 +383,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite if groupInfo.GroupType != constant.SuperGroup { chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList) } else { - for _, userID := range okUserIDList { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) - } + chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) } log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ") @@ -589,9 +585,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou if groupInfo.GroupType != constant.SuperGroup { chat.MemberKickedNotification(req, okUserIDList) } else { - for _, userID := range okUserIDList { - chat.SuperGroupNotification(req.OperationID, req.OpUserID, userID) - } + chat.SuperGroupNotification(req.OperationID, req.OpUserID, req.GroupID) } log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String()) return &resp, nil diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index b38e573e2..6290168fb 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -511,7 +511,7 @@ func Notification(n *NotificationMsg) { msg.ClientMsgID = utils.GetMsgID(n.SendID) msg.Options = make(map[string]bool, 7) switch n.SessionType { - case constant.GroupChatType: + case constant.GroupChatType, constant.SuperGroupChatType: msg.RecvID = "" msg.GroupID = n.RecvID } @@ -732,6 +732,8 @@ func Notification(n *NotificationMsg) { unReadCount = config.Config.Notification.ConversationSetPrivate.Conversation.UnreadCount case constant.DeleteMessageNotification: reliabilityLevel = constant.ReliableNotificationNoMsg + case constant.SuperGroupUpdateNotification: + reliabilityLevel = constant.UnreliableNotification } switch reliabilityLevel { case constant.UnreliableNotification: diff --git a/internal/rpc/msg/super_group_notification.go b/internal/rpc/msg/super_group_notification.go index 32e86e167..52e2e17a2 100644 --- a/internal/rpc/msg/super_group_notification.go +++ b/internal/rpc/msg/super_group_notification.go @@ -9,7 +9,8 @@ import ( //"github.com/golang/protobuf/proto" ) -func SuperGroupNotification(operationID, sendID, recvID string) { +func SuperGroupNotification(operationID, sendID, groupID string) { + //var tips sdk.TipsComm //var err error //marshaler := jsonpb.Marshaler{ @@ -20,10 +21,10 @@ func SuperGroupNotification(operationID, sendID, recvID string) { //tips.JsonDetail, _ = marshaler.MarshalToString(m) n := &NotificationMsg{ SendID: sendID, - RecvID: recvID, - MsgFrom: constant.UserMsgType, + RecvID: groupID, + MsgFrom: constant.SysMsgType, ContentType: constant.SuperGroupUpdateNotification, - SessionType: constant.SingleChatType, + SessionType: constant.SuperGroupChatType, OperationID: operationID, } //n.Content, err = proto.Marshal(&tips) From 55e774344a7afc7e0c557b46c70e3b9bcdeed9b8 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 10:32:21 +0800 Subject: [PATCH 084/256] ws pb --- pkg/proto/sdk_ws/ws.pb.go | 5433 ------------------------------------- pkg/proto/sdk_ws/ws.proto | 1 + 2 files changed, 1 insertion(+), 5433 deletions(-) delete mode 100644 pkg/proto/sdk_ws/ws.pb.go diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go deleted file mode 100644 index 6c768fcaa..000000000 --- a/pkg/proto/sdk_ws/ws.pb.go +++ /dev/null @@ -1,5433 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: sdk_ws/ws.proto - -package server_api_params // import "Open_IM/pkg/proto/sdk_ws" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type GroupInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=groupName" json:"groupName,omitempty"` - Notification string `protobuf:"bytes,3,opt,name=notification" json:"notification,omitempty"` - Introduction string `protobuf:"bytes,4,opt,name=introduction" json:"introduction,omitempty"` - FaceURL string `protobuf:"bytes,5,opt,name=faceURL" json:"faceURL,omitempty"` - OwnerUserID string `protobuf:"bytes,6,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - MemberCount uint32 `protobuf:"varint,8,opt,name=memberCount" json:"memberCount,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - Status int32 `protobuf:"varint,10,opt,name=status" json:"status,omitempty"` - CreatorUserID string `protobuf:"bytes,11,opt,name=creatorUserID" json:"creatorUserID,omitempty"` - GroupType int32 `protobuf:"varint,12,opt,name=groupType" json:"groupType,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{0} -} -func (m *GroupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupInfo.Unmarshal(m, b) -} -func (m *GroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupInfo.Marshal(b, m, deterministic) -} -func (dst *GroupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupInfo.Merge(dst, src) -} -func (m *GroupInfo) XXX_Size() int { - return xxx_messageInfo_GroupInfo.Size(m) -} -func (m *GroupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_GroupInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupInfo proto.InternalMessageInfo - -func (m *GroupInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *GroupInfo) GetGroupName() string { - if m != nil { - return m.GroupName - } - return "" -} - -func (m *GroupInfo) GetNotification() string { - if m != nil { - return m.Notification - } - return "" -} - -func (m *GroupInfo) GetIntroduction() string { - if m != nil { - return m.Introduction - } - return "" -} - -func (m *GroupInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *GroupInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *GroupInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *GroupInfo) GetMemberCount() uint32 { - if m != nil { - return m.MemberCount - } - return 0 -} - -func (m *GroupInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *GroupInfo) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *GroupInfo) GetCreatorUserID() string { - if m != nil { - return m.CreatorUserID - } - return "" -} - -func (m *GroupInfo) GetGroupType() int32 { - if m != nil { - return m.GroupType - } - return 0 -} - -type GroupMemberFullInfo struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - RoleLevel int32 `protobuf:"varint,3,opt,name=roleLevel" json:"roleLevel,omitempty"` - JoinTime int32 `protobuf:"varint,4,opt,name=joinTime" json:"joinTime,omitempty"` - Nickname string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,6,opt,name=faceURL" json:"faceURL,omitempty"` - AppMangerLevel int32 `protobuf:"varint,7,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` - JoinSource int32 `protobuf:"varint,8,opt,name=joinSource" json:"joinSource,omitempty"` - OperatorUserID string `protobuf:"bytes,9,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` - MuteEndTime uint32 `protobuf:"varint,11,opt,name=muteEndTime" json:"muteEndTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{1} -} -func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) -} -func (m *GroupMemberFullInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberFullInfo.Marshal(b, m, deterministic) -} -func (dst *GroupMemberFullInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberFullInfo.Merge(dst, src) -} -func (m *GroupMemberFullInfo) XXX_Size() int { - return xxx_messageInfo_GroupMemberFullInfo.Size(m) -} -func (m *GroupMemberFullInfo) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberFullInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberFullInfo proto.InternalMessageInfo - -func (m *GroupMemberFullInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *GroupMemberFullInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *GroupMemberFullInfo) GetRoleLevel() int32 { - if m != nil { - return m.RoleLevel - } - return 0 -} - -func (m *GroupMemberFullInfo) GetJoinTime() int32 { - if m != nil { - return m.JoinTime - } - return 0 -} - -func (m *GroupMemberFullInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *GroupMemberFullInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *GroupMemberFullInfo) GetAppMangerLevel() int32 { - if m != nil { - return m.AppMangerLevel - } - return 0 -} - -func (m *GroupMemberFullInfo) GetJoinSource() int32 { - if m != nil { - return m.JoinSource - } - return 0 -} - -func (m *GroupMemberFullInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *GroupMemberFullInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *GroupMemberFullInfo) GetMuteEndTime() uint32 { - if m != nil { - return m.MuteEndTime - } - return 0 -} - -type PublicUserInfo struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` - Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{2} -} -func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) -} -func (m *PublicUserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PublicUserInfo.Marshal(b, m, deterministic) -} -func (dst *PublicUserInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_PublicUserInfo.Merge(dst, src) -} -func (m *PublicUserInfo) XXX_Size() int { - return xxx_messageInfo_PublicUserInfo.Size(m) -} -func (m *PublicUserInfo) XXX_DiscardUnknown() { - xxx_messageInfo_PublicUserInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_PublicUserInfo proto.InternalMessageInfo - -func (m *PublicUserInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PublicUserInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *PublicUserInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *PublicUserInfo) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *PublicUserInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type UserInfo struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - FaceURL string `protobuf:"bytes,3,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"` - PhoneNumber string `protobuf:"bytes,5,opt,name=phoneNumber" json:"phoneNumber,omitempty"` - Birth uint32 `protobuf:"varint,6,opt,name=birth" json:"birth,omitempty"` - Email string `protobuf:"bytes,7,opt,name=email" json:"email,omitempty"` - Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` - CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` - AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{3} -} -func (m *UserInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfo.Unmarshal(m, b) -} -func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfo.Marshal(b, m, deterministic) -} -func (dst *UserInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfo.Merge(dst, src) -} -func (m *UserInfo) XXX_Size() int { - return xxx_messageInfo_UserInfo.Size(m) -} -func (m *UserInfo) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInfo proto.InternalMessageInfo - -func (m *UserInfo) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *UserInfo) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *UserInfo) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *UserInfo) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *UserInfo) GetPhoneNumber() string { - if m != nil { - return m.PhoneNumber - } - return "" -} - -func (m *UserInfo) GetBirth() uint32 { - if m != nil { - return m.Birth - } - return 0 -} - -func (m *UserInfo) GetEmail() string { - if m != nil { - return m.Email - } - return "" -} - -func (m *UserInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *UserInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *UserInfo) GetAppMangerLevel() int32 { - if m != nil { - return m.AppMangerLevel - } - return 0 -} - -type FriendInfo struct { - OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` - CreateTime uint32 `protobuf:"varint,3,opt,name=createTime" json:"createTime,omitempty"` - FriendUser *UserInfo `protobuf:"bytes,4,opt,name=friendUser" json:"friendUser,omitempty"` - AddSource int32 `protobuf:"varint,5,opt,name=addSource" json:"addSource,omitempty"` - OperatorUserID string `protobuf:"bytes,6,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{4} -} -func (m *FriendInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendInfo.Unmarshal(m, b) -} -func (m *FriendInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendInfo.Marshal(b, m, deterministic) -} -func (dst *FriendInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendInfo.Merge(dst, src) -} -func (m *FriendInfo) XXX_Size() int { - return xxx_messageInfo_FriendInfo.Size(m) -} -func (m *FriendInfo) XXX_DiscardUnknown() { - xxx_messageInfo_FriendInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendInfo proto.InternalMessageInfo - -func (m *FriendInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *FriendInfo) GetRemark() string { - if m != nil { - return m.Remark - } - return "" -} - -func (m *FriendInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *FriendInfo) GetFriendUser() *UserInfo { - if m != nil { - return m.FriendUser - } - return nil -} - -func (m *FriendInfo) GetAddSource() int32 { - if m != nil { - return m.AddSource - } - return 0 -} - -func (m *FriendInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *FriendInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type BlackInfo struct { - OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` - CreateTime uint32 `protobuf:"varint,2,opt,name=createTime" json:"createTime,omitempty"` - BlackUserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=blackUserInfo" json:"blackUserInfo,omitempty"` - AddSource int32 `protobuf:"varint,4,opt,name=addSource" json:"addSource,omitempty"` - OperatorUserID string `protobuf:"bytes,5,opt,name=operatorUserID" json:"operatorUserID,omitempty"` - Ex string `protobuf:"bytes,6,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{5} -} -func (m *BlackInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackInfo.Unmarshal(m, b) -} -func (m *BlackInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackInfo.Marshal(b, m, deterministic) -} -func (dst *BlackInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackInfo.Merge(dst, src) -} -func (m *BlackInfo) XXX_Size() int { - return xxx_messageInfo_BlackInfo.Size(m) -} -func (m *BlackInfo) XXX_DiscardUnknown() { - xxx_messageInfo_BlackInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackInfo proto.InternalMessageInfo - -func (m *BlackInfo) GetOwnerUserID() string { - if m != nil { - return m.OwnerUserID - } - return "" -} - -func (m *BlackInfo) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *BlackInfo) GetBlackUserInfo() *PublicUserInfo { - if m != nil { - return m.BlackUserInfo - } - return nil -} - -func (m *BlackInfo) GetAddSource() int32 { - if m != nil { - return m.AddSource - } - return 0 -} - -func (m *BlackInfo) GetOperatorUserID() string { - if m != nil { - return m.OperatorUserID - } - return "" -} - -func (m *BlackInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type GroupRequest struct { - UserInfo *PublicUserInfo `protobuf:"bytes,1,opt,name=userInfo" json:"userInfo,omitempty"` - GroupInfo *GroupInfo `protobuf:"bytes,2,opt,name=groupInfo" json:"groupInfo,omitempty"` - HandleResult int32 `protobuf:"varint,3,opt,name=handleResult" json:"handleResult,omitempty"` - ReqMsg string `protobuf:"bytes,4,opt,name=reqMsg" json:"reqMsg,omitempty"` - HandleMsg string `protobuf:"bytes,5,opt,name=handleMsg" json:"handleMsg,omitempty"` - ReqTime uint32 `protobuf:"varint,6,opt,name=reqTime" json:"reqTime,omitempty"` - HandleUserID string `protobuf:"bytes,7,opt,name=handleUserID" json:"handleUserID,omitempty"` - HandleTime uint32 `protobuf:"varint,8,opt,name=handleTime" json:"handleTime,omitempty"` - Ex string `protobuf:"bytes,9,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{6} -} -func (m *GroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupRequest.Unmarshal(m, b) -} -func (m *GroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupRequest.Marshal(b, m, deterministic) -} -func (dst *GroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupRequest.Merge(dst, src) -} -func (m *GroupRequest) XXX_Size() int { - return xxx_messageInfo_GroupRequest.Size(m) -} -func (m *GroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupRequest proto.InternalMessageInfo - -func (m *GroupRequest) GetUserInfo() *PublicUserInfo { - if m != nil { - return m.UserInfo - } - return nil -} - -func (m *GroupRequest) GetGroupInfo() *GroupInfo { - if m != nil { - return m.GroupInfo - } - return nil -} - -func (m *GroupRequest) GetHandleResult() int32 { - if m != nil { - return m.HandleResult - } - return 0 -} - -func (m *GroupRequest) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -func (m *GroupRequest) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -func (m *GroupRequest) GetReqTime() uint32 { - if m != nil { - return m.ReqTime - } - return 0 -} - -func (m *GroupRequest) GetHandleUserID() string { - if m != nil { - return m.HandleUserID - } - return "" -} - -func (m *GroupRequest) GetHandleTime() uint32 { - if m != nil { - return m.HandleTime - } - return 0 -} - -func (m *GroupRequest) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type FriendRequest struct { - FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` - FromNickname string `protobuf:"bytes,2,opt,name=fromNickname" json:"fromNickname,omitempty"` - FromFaceURL string `protobuf:"bytes,3,opt,name=fromFaceURL" json:"fromFaceURL,omitempty"` - FromGender int32 `protobuf:"varint,4,opt,name=fromGender" json:"fromGender,omitempty"` - ToUserID string `protobuf:"bytes,5,opt,name=toUserID" json:"toUserID,omitempty"` - ToNickname string `protobuf:"bytes,6,opt,name=toNickname" json:"toNickname,omitempty"` - ToFaceURL string `protobuf:"bytes,7,opt,name=toFaceURL" json:"toFaceURL,omitempty"` - ToGender int32 `protobuf:"varint,8,opt,name=toGender" json:"toGender,omitempty"` - HandleResult int32 `protobuf:"varint,9,opt,name=handleResult" json:"handleResult,omitempty"` - ReqMsg string `protobuf:"bytes,10,opt,name=reqMsg" json:"reqMsg,omitempty"` - CreateTime uint32 `protobuf:"varint,11,opt,name=createTime" json:"createTime,omitempty"` - HandlerUserID string `protobuf:"bytes,12,opt,name=handlerUserID" json:"handlerUserID,omitempty"` - HandleMsg string `protobuf:"bytes,13,opt,name=handleMsg" json:"handleMsg,omitempty"` - HandleTime uint32 `protobuf:"varint,14,opt,name=handleTime" json:"handleTime,omitempty"` - Ex string `protobuf:"bytes,15,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{7} -} -func (m *FriendRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendRequest.Unmarshal(m, b) -} -func (m *FriendRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendRequest.Marshal(b, m, deterministic) -} -func (dst *FriendRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendRequest.Merge(dst, src) -} -func (m *FriendRequest) XXX_Size() int { - return xxx_messageInfo_FriendRequest.Size(m) -} -func (m *FriendRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FriendRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendRequest proto.InternalMessageInfo - -func (m *FriendRequest) GetFromUserID() string { - if m != nil { - return m.FromUserID - } - return "" -} - -func (m *FriendRequest) GetFromNickname() string { - if m != nil { - return m.FromNickname - } - return "" -} - -func (m *FriendRequest) GetFromFaceURL() string { - if m != nil { - return m.FromFaceURL - } - return "" -} - -func (m *FriendRequest) GetFromGender() int32 { - if m != nil { - return m.FromGender - } - return 0 -} - -func (m *FriendRequest) GetToUserID() string { - if m != nil { - return m.ToUserID - } - return "" -} - -func (m *FriendRequest) GetToNickname() string { - if m != nil { - return m.ToNickname - } - return "" -} - -func (m *FriendRequest) GetToFaceURL() string { - if m != nil { - return m.ToFaceURL - } - return "" -} - -func (m *FriendRequest) GetToGender() int32 { - if m != nil { - return m.ToGender - } - return 0 -} - -func (m *FriendRequest) GetHandleResult() int32 { - if m != nil { - return m.HandleResult - } - return 0 -} - -func (m *FriendRequest) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -func (m *FriendRequest) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *FriendRequest) GetHandlerUserID() string { - if m != nil { - return m.HandlerUserID - } - return "" -} - -func (m *FriendRequest) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -func (m *FriendRequest) GetHandleTime() uint32 { - if m != nil { - return m.HandleTime - } - return 0 -} - -func (m *FriendRequest) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type Department struct { - DepartmentID string `protobuf:"bytes,1,opt,name=departmentID" json:"departmentID,omitempty"` - FaceURL string `protobuf:"bytes,2,opt,name=faceURL" json:"faceURL,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` - ParentID string `protobuf:"bytes,4,opt,name=parentID" json:"parentID,omitempty"` - Order int32 `protobuf:"varint,5,opt,name=order" json:"order,omitempty"` - DepartmentType int32 `protobuf:"varint,6,opt,name=departmentType" json:"departmentType,omitempty"` - CreateTime uint32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - SubDepartmentNum uint32 `protobuf:"varint,8,opt,name=subDepartmentNum" json:"subDepartmentNum,omitempty"` - MemberNum uint32 `protobuf:"varint,9,opt,name=memberNum" json:"memberNum,omitempty"` - Ex string `protobuf:"bytes,10,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{8} -} -func (m *Department) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Department.Unmarshal(m, b) -} -func (m *Department) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Department.Marshal(b, m, deterministic) -} -func (dst *Department) XXX_Merge(src proto.Message) { - xxx_messageInfo_Department.Merge(dst, src) -} -func (m *Department) XXX_Size() int { - return xxx_messageInfo_Department.Size(m) -} -func (m *Department) XXX_DiscardUnknown() { - xxx_messageInfo_Department.DiscardUnknown(m) -} - -var xxx_messageInfo_Department proto.InternalMessageInfo - -func (m *Department) GetDepartmentID() string { - if m != nil { - return m.DepartmentID - } - return "" -} - -func (m *Department) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *Department) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Department) GetParentID() string { - if m != nil { - return m.ParentID - } - return "" -} - -func (m *Department) GetOrder() int32 { - if m != nil { - return m.Order - } - return 0 -} - -func (m *Department) GetDepartmentType() int32 { - if m != nil { - return m.DepartmentType - } - return 0 -} - -func (m *Department) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *Department) GetSubDepartmentNum() uint32 { - if m != nil { - return m.SubDepartmentNum - } - return 0 -} - -func (m *Department) GetMemberNum() uint32 { - if m != nil { - return m.MemberNum - } - return 0 -} - -func (m *Department) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type OrganizationUser struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - EnglishName string `protobuf:"bytes,3,opt,name=englishName" json:"englishName,omitempty"` - FaceURL string `protobuf:"bytes,4,opt,name=faceURL" json:"faceURL,omitempty"` - Gender int32 `protobuf:"varint,5,opt,name=gender" json:"gender,omitempty"` - Mobile string `protobuf:"bytes,6,opt,name=mobile" json:"mobile,omitempty"` - Telephone string `protobuf:"bytes,7,opt,name=telephone" json:"telephone,omitempty"` - Birth uint32 `protobuf:"varint,8,opt,name=birth" json:"birth,omitempty"` - Email string `protobuf:"bytes,9,opt,name=email" json:"email,omitempty"` - CreateTime uint32 `protobuf:"varint,10,opt,name=createTime" json:"createTime,omitempty"` - Ex string `protobuf:"bytes,11,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{9} -} -func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) -} -func (m *OrganizationUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OrganizationUser.Marshal(b, m, deterministic) -} -func (dst *OrganizationUser) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrganizationUser.Merge(dst, src) -} -func (m *OrganizationUser) XXX_Size() int { - return xxx_messageInfo_OrganizationUser.Size(m) -} -func (m *OrganizationUser) XXX_DiscardUnknown() { - xxx_messageInfo_OrganizationUser.DiscardUnknown(m) -} - -var xxx_messageInfo_OrganizationUser proto.InternalMessageInfo - -func (m *OrganizationUser) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *OrganizationUser) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *OrganizationUser) GetEnglishName() string { - if m != nil { - return m.EnglishName - } - return "" -} - -func (m *OrganizationUser) GetFaceURL() string { - if m != nil { - return m.FaceURL - } - return "" -} - -func (m *OrganizationUser) GetGender() int32 { - if m != nil { - return m.Gender - } - return 0 -} - -func (m *OrganizationUser) GetMobile() string { - if m != nil { - return m.Mobile - } - return "" -} - -func (m *OrganizationUser) GetTelephone() string { - if m != nil { - return m.Telephone - } - return "" -} - -func (m *OrganizationUser) GetBirth() uint32 { - if m != nil { - return m.Birth - } - return 0 -} - -func (m *OrganizationUser) GetEmail() string { - if m != nil { - return m.Email - } - return "" -} - -func (m *OrganizationUser) GetCreateTime() uint32 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *OrganizationUser) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type DepartmentMember struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - DepartmentID string `protobuf:"bytes,2,opt,name=departmentID" json:"departmentID,omitempty"` - Order int32 `protobuf:"varint,3,opt,name=order" json:"order,omitempty"` - Position string `protobuf:"bytes,4,opt,name=position" json:"position,omitempty"` - Leader int32 `protobuf:"varint,5,opt,name=leader" json:"leader,omitempty"` - Status int32 `protobuf:"varint,6,opt,name=status" json:"status,omitempty"` - Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{10} -} -func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) -} -func (m *DepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DepartmentMember.Marshal(b, m, deterministic) -} -func (dst *DepartmentMember) XXX_Merge(src proto.Message) { - xxx_messageInfo_DepartmentMember.Merge(dst, src) -} -func (m *DepartmentMember) XXX_Size() int { - return xxx_messageInfo_DepartmentMember.Size(m) -} -func (m *DepartmentMember) XXX_DiscardUnknown() { - xxx_messageInfo_DepartmentMember.DiscardUnknown(m) -} - -var xxx_messageInfo_DepartmentMember proto.InternalMessageInfo - -func (m *DepartmentMember) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DepartmentMember) GetDepartmentID() string { - if m != nil { - return m.DepartmentID - } - return "" -} - -func (m *DepartmentMember) GetOrder() int32 { - if m != nil { - return m.Order - } - return 0 -} - -func (m *DepartmentMember) GetPosition() string { - if m != nil { - return m.Position - } - return "" -} - -func (m *DepartmentMember) GetLeader() int32 { - if m != nil { - return m.Leader - } - return 0 -} - -func (m *DepartmentMember) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *DepartmentMember) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -type UserDepartmentMember struct { - OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` - DepartmentMember *DepartmentMember `protobuf:"bytes,2,opt,name=departmentMember" json:"departmentMember,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{11} -} -func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) -} -func (m *UserDepartmentMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserDepartmentMember.Marshal(b, m, deterministic) -} -func (dst *UserDepartmentMember) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserDepartmentMember.Merge(dst, src) -} -func (m *UserDepartmentMember) XXX_Size() int { - return xxx_messageInfo_UserDepartmentMember.Size(m) -} -func (m *UserDepartmentMember) XXX_DiscardUnknown() { - xxx_messageInfo_UserDepartmentMember.DiscardUnknown(m) -} - -var xxx_messageInfo_UserDepartmentMember proto.InternalMessageInfo - -func (m *UserDepartmentMember) GetOrganizationUser() *OrganizationUser { - if m != nil { - return m.OrganizationUser - } - return nil -} - -func (m *UserDepartmentMember) GetDepartmentMember() *DepartmentMember { - if m != nil { - return m.DepartmentMember - } - return nil -} - -type UserInDepartment struct { - OrganizationUser *OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` - DepartmentMemberList []*DepartmentMember `protobuf:"bytes,2,rep,name=departmentMemberList" json:"departmentMemberList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{12} -} -func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) -} -func (m *UserInDepartment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInDepartment.Marshal(b, m, deterministic) -} -func (dst *UserInDepartment) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInDepartment.Merge(dst, src) -} -func (m *UserInDepartment) XXX_Size() int { - return xxx_messageInfo_UserInDepartment.Size(m) -} -func (m *UserInDepartment) XXX_DiscardUnknown() { - xxx_messageInfo_UserInDepartment.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInDepartment proto.InternalMessageInfo - -func (m *UserInDepartment) GetOrganizationUser() *OrganizationUser { - if m != nil { - return m.OrganizationUser - } - return nil -} - -func (m *UserInDepartment) GetDepartmentMemberList() []*DepartmentMember { - if m != nil { - return m.DepartmentMemberList - } - return nil -} - -// /////////////////////////////////base end///////////////////////////////////// -type PullMessageBySeqListReq struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - GroupSeqList map[string]*SeqList `protobuf:"bytes,4,rep,name=groupSeqList" json:"groupSeqList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{13} -} -func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) -} -func (m *PullMessageBySeqListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListReq.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListReq.Merge(dst, src) -} -func (m *PullMessageBySeqListReq) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListReq.Size(m) -} -func (m *PullMessageBySeqListReq) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListReq proto.InternalMessageInfo - -func (m *PullMessageBySeqListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -func (m *PullMessageBySeqListReq) GetGroupSeqList() map[string]*SeqList { - if m != nil { - return m.GroupSeqList - } - return nil -} - -type SeqList struct { - SeqList []uint32 `protobuf:"varint,1,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{14} -} -func (m *SeqList) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SeqList.Unmarshal(m, b) -} -func (m *SeqList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SeqList.Marshal(b, m, deterministic) -} -func (dst *SeqList) XXX_Merge(src proto.Message) { - xxx_messageInfo_SeqList.Merge(dst, src) -} -func (m *SeqList) XXX_Size() int { - return xxx_messageInfo_SeqList.Size(m) -} -func (m *SeqList) XXX_DiscardUnknown() { - xxx_messageInfo_SeqList.DiscardUnknown(m) -} - -var xxx_messageInfo_SeqList proto.InternalMessageInfo - -func (m *SeqList) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -type MsgDataList struct { - MsgDataList []*MsgData `protobuf:"bytes,1,rep,name=msgDataList" json:"msgDataList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{15} -} -func (m *MsgDataList) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MsgDataList.Unmarshal(m, b) -} -func (m *MsgDataList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MsgDataList.Marshal(b, m, deterministic) -} -func (dst *MsgDataList) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgDataList.Merge(dst, src) -} -func (m *MsgDataList) XXX_Size() int { - return xxx_messageInfo_MsgDataList.Size(m) -} -func (m *MsgDataList) XXX_DiscardUnknown() { - xxx_messageInfo_MsgDataList.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgDataList proto.InternalMessageInfo - -func (m *MsgDataList) GetMsgDataList() []*MsgData { - if m != nil { - return m.MsgDataList - } - return nil -} - -type PullMessageBySeqListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - List []*MsgData `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"` - GroupMsgDataList map[string]*MsgDataList `protobuf:"bytes,4,rep,name=groupMsgDataList" json:"groupMsgDataList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListResp{} } -func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } -func (*PullMessageBySeqListResp) ProtoMessage() {} -func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{16} -} -func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) -} -func (m *PullMessageBySeqListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageBySeqListResp.Marshal(b, m, deterministic) -} -func (dst *PullMessageBySeqListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageBySeqListResp.Merge(dst, src) -} -func (m *PullMessageBySeqListResp) XXX_Size() int { - return xxx_messageInfo_PullMessageBySeqListResp.Size(m) -} -func (m *PullMessageBySeqListResp) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageBySeqListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageBySeqListResp proto.InternalMessageInfo - -func (m *PullMessageBySeqListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *PullMessageBySeqListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *PullMessageBySeqListResp) GetList() []*MsgData { - if m != nil { - return m.List - } - return nil -} - -func (m *PullMessageBySeqListResp) GetGroupMsgDataList() map[string]*MsgDataList { - if m != nil { - return m.GroupMsgDataList - } - return nil -} - -type GetMaxAndMinSeqReq struct { - GroupIDList []string `protobuf:"bytes,1,rep,name=groupIDList" json:"groupIDList,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{17} -} -func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) -} -func (m *GetMaxAndMinSeqReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetMaxAndMinSeqReq.Marshal(b, m, deterministic) -} -func (dst *GetMaxAndMinSeqReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetMaxAndMinSeqReq.Merge(dst, src) -} -func (m *GetMaxAndMinSeqReq) XXX_Size() int { - return xxx_messageInfo_GetMaxAndMinSeqReq.Size(m) -} -func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { - xxx_messageInfo_GetMaxAndMinSeqReq.DiscardUnknown(m) -} - -var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo - -func (m *GetMaxAndMinSeqReq) GetGroupIDList() []string { - if m != nil { - return m.GroupIDList - } - return nil -} - -func (m *GetMaxAndMinSeqReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *GetMaxAndMinSeqReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -type MaxAndMinSeq struct { - MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{18} -} -func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) -} -func (m *MaxAndMinSeq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MaxAndMinSeq.Marshal(b, m, deterministic) -} -func (dst *MaxAndMinSeq) XXX_Merge(src proto.Message) { - xxx_messageInfo_MaxAndMinSeq.Merge(dst, src) -} -func (m *MaxAndMinSeq) XXX_Size() int { - return xxx_messageInfo_MaxAndMinSeq.Size(m) -} -func (m *MaxAndMinSeq) XXX_DiscardUnknown() { - xxx_messageInfo_MaxAndMinSeq.DiscardUnknown(m) -} - -var xxx_messageInfo_MaxAndMinSeq proto.InternalMessageInfo - -func (m *MaxAndMinSeq) GetMaxSeq() uint32 { - if m != nil { - return m.MaxSeq - } - return 0 -} - -func (m *MaxAndMinSeq) GetMinSeq() uint32 { - if m != nil { - return m.MinSeq - } - return 0 -} - -type GetMaxAndMinSeqResp struct { - MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` - ErrCode int32 `protobuf:"varint,3,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,4,opt,name=errMsg" json:"errMsg,omitempty"` - GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,5,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{19} -} -func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) -} -func (m *GetMaxAndMinSeqResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetMaxAndMinSeqResp.Marshal(b, m, deterministic) -} -func (dst *GetMaxAndMinSeqResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetMaxAndMinSeqResp.Merge(dst, src) -} -func (m *GetMaxAndMinSeqResp) XXX_Size() int { - return xxx_messageInfo_GetMaxAndMinSeqResp.Size(m) -} -func (m *GetMaxAndMinSeqResp) XXX_DiscardUnknown() { - xxx_messageInfo_GetMaxAndMinSeqResp.DiscardUnknown(m) -} - -var xxx_messageInfo_GetMaxAndMinSeqResp proto.InternalMessageInfo - -func (m *GetMaxAndMinSeqResp) GetMaxSeq() uint32 { - if m != nil { - return m.MaxSeq - } - return 0 -} - -func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { - if m != nil { - return m.MinSeq - } - return 0 -} - -func (m *GetMaxAndMinSeqResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *GetMaxAndMinSeqResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *GetMaxAndMinSeqResp) GetGroupMaxAndMinSeq() map[string]*MaxAndMinSeq { - if m != nil { - return m.GroupMaxAndMinSeq - } - return nil -} - -type UserSendMsgResp struct { - ServerMsgID string `protobuf:"bytes,1,opt,name=serverMsgID" json:"serverMsgID,omitempty"` - ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` - SendTime int64 `protobuf:"varint,3,opt,name=sendTime" json:"sendTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{20} -} -func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) -} -func (m *UserSendMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserSendMsgResp.Marshal(b, m, deterministic) -} -func (dst *UserSendMsgResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserSendMsgResp.Merge(dst, src) -} -func (m *UserSendMsgResp) XXX_Size() int { - return xxx_messageInfo_UserSendMsgResp.Size(m) -} -func (m *UserSendMsgResp) XXX_DiscardUnknown() { - xxx_messageInfo_UserSendMsgResp.DiscardUnknown(m) -} - -var xxx_messageInfo_UserSendMsgResp proto.InternalMessageInfo - -func (m *UserSendMsgResp) GetServerMsgID() string { - if m != nil { - return m.ServerMsgID - } - return "" -} - -func (m *UserSendMsgResp) GetClientMsgID() string { - if m != nil { - return m.ClientMsgID - } - return "" -} - -func (m *UserSendMsgResp) GetSendTime() int64 { - if m != nil { - return m.SendTime - } - return 0 -} - -type MsgData struct { - SendID string `protobuf:"bytes,1,opt,name=sendID" json:"sendID,omitempty"` - RecvID string `protobuf:"bytes,2,opt,name=recvID" json:"recvID,omitempty"` - GroupID string `protobuf:"bytes,3,opt,name=groupID" json:"groupID,omitempty"` - ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID" json:"clientMsgID,omitempty"` - ServerMsgID string `protobuf:"bytes,5,opt,name=serverMsgID" json:"serverMsgID,omitempty"` - SenderPlatformID int32 `protobuf:"varint,6,opt,name=senderPlatformID" json:"senderPlatformID,omitempty"` - SenderNickname string `protobuf:"bytes,7,opt,name=senderNickname" json:"senderNickname,omitempty"` - SenderFaceURL string `protobuf:"bytes,8,opt,name=senderFaceURL" json:"senderFaceURL,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` - MsgFrom int32 `protobuf:"varint,10,opt,name=msgFrom" json:"msgFrom,omitempty"` - ContentType int32 `protobuf:"varint,11,opt,name=contentType" json:"contentType,omitempty"` - Content []byte `protobuf:"bytes,12,opt,name=content,proto3" json:"content,omitempty"` - Seq uint32 `protobuf:"varint,14,opt,name=seq" json:"seq,omitempty"` - SendTime int64 `protobuf:"varint,15,opt,name=sendTime" json:"sendTime,omitempty"` - CreateTime int64 `protobuf:"varint,16,opt,name=createTime" json:"createTime,omitempty"` - Status int32 `protobuf:"varint,17,opt,name=status" json:"status,omitempty"` - Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{21} -} -func (m *MsgData) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MsgData.Unmarshal(m, b) -} -func (m *MsgData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MsgData.Marshal(b, m, deterministic) -} -func (dst *MsgData) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgData.Merge(dst, src) -} -func (m *MsgData) XXX_Size() int { - return xxx_messageInfo_MsgData.Size(m) -} -func (m *MsgData) XXX_DiscardUnknown() { - xxx_messageInfo_MsgData.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgData proto.InternalMessageInfo - -func (m *MsgData) GetSendID() string { - if m != nil { - return m.SendID - } - return "" -} - -func (m *MsgData) GetRecvID() string { - if m != nil { - return m.RecvID - } - return "" -} - -func (m *MsgData) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *MsgData) GetClientMsgID() string { - if m != nil { - return m.ClientMsgID - } - return "" -} - -func (m *MsgData) GetServerMsgID() string { - if m != nil { - return m.ServerMsgID - } - return "" -} - -func (m *MsgData) GetSenderPlatformID() int32 { - if m != nil { - return m.SenderPlatformID - } - return 0 -} - -func (m *MsgData) GetSenderNickname() string { - if m != nil { - return m.SenderNickname - } - return "" -} - -func (m *MsgData) GetSenderFaceURL() string { - if m != nil { - return m.SenderFaceURL - } - return "" -} - -func (m *MsgData) GetSessionType() int32 { - if m != nil { - return m.SessionType - } - return 0 -} - -func (m *MsgData) GetMsgFrom() int32 { - if m != nil { - return m.MsgFrom - } - return 0 -} - -func (m *MsgData) GetContentType() int32 { - if m != nil { - return m.ContentType - } - return 0 -} - -func (m *MsgData) GetContent() []byte { - if m != nil { - return m.Content - } - return nil -} - -func (m *MsgData) GetSeq() uint32 { - if m != nil { - return m.Seq - } - return 0 -} - -func (m *MsgData) GetSendTime() int64 { - if m != nil { - return m.SendTime - } - return 0 -} - -func (m *MsgData) GetCreateTime() int64 { - if m != nil { - return m.CreateTime - } - return 0 -} - -func (m *MsgData) GetStatus() int32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *MsgData) GetOptions() map[string]bool { - if m != nil { - return m.Options - } - return nil -} - -func (m *MsgData) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *MsgData) GetAtUserIDList() []string { - if m != nil { - return m.AtUserIDList - } - return nil -} - -type OfflinePushInfo struct { - Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Desc string `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"` - Ex string `protobuf:"bytes,3,opt,name=ex" json:"ex,omitempty"` - IOSPushSound string `protobuf:"bytes,4,opt,name=iOSPushSound" json:"iOSPushSound,omitempty"` - IOSBadgeCount bool `protobuf:"varint,5,opt,name=iOSBadgeCount" json:"iOSBadgeCount,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{22} -} -func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) -} -func (m *OfflinePushInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OfflinePushInfo.Marshal(b, m, deterministic) -} -func (dst *OfflinePushInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_OfflinePushInfo.Merge(dst, src) -} -func (m *OfflinePushInfo) XXX_Size() int { - return xxx_messageInfo_OfflinePushInfo.Size(m) -} -func (m *OfflinePushInfo) XXX_DiscardUnknown() { - xxx_messageInfo_OfflinePushInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_OfflinePushInfo proto.InternalMessageInfo - -func (m *OfflinePushInfo) GetTitle() string { - if m != nil { - return m.Title - } - return "" -} - -func (m *OfflinePushInfo) GetDesc() string { - if m != nil { - return m.Desc - } - return "" -} - -func (m *OfflinePushInfo) GetEx() string { - if m != nil { - return m.Ex - } - return "" -} - -func (m *OfflinePushInfo) GetIOSPushSound() string { - if m != nil { - return m.IOSPushSound - } - return "" -} - -func (m *OfflinePushInfo) GetIOSBadgeCount() bool { - if m != nil { - return m.IOSBadgeCount - } - return false -} - -type TipsComm struct { - Detail []byte `protobuf:"bytes,1,opt,name=detail,proto3" json:"detail,omitempty"` - DefaultTips string `protobuf:"bytes,2,opt,name=defaultTips" json:"defaultTips,omitempty"` - JsonDetail string `protobuf:"bytes,3,opt,name=jsonDetail" json:"jsonDetail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{23} -} -func (m *TipsComm) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_TipsComm.Unmarshal(m, b) -} -func (m *TipsComm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_TipsComm.Marshal(b, m, deterministic) -} -func (dst *TipsComm) XXX_Merge(src proto.Message) { - xxx_messageInfo_TipsComm.Merge(dst, src) -} -func (m *TipsComm) XXX_Size() int { - return xxx_messageInfo_TipsComm.Size(m) -} -func (m *TipsComm) XXX_DiscardUnknown() { - xxx_messageInfo_TipsComm.DiscardUnknown(m) -} - -var xxx_messageInfo_TipsComm proto.InternalMessageInfo - -func (m *TipsComm) GetDetail() []byte { - if m != nil { - return m.Detail - } - return nil -} - -func (m *TipsComm) GetDefaultTips() string { - if m != nil { - return m.DefaultTips - } - return "" -} - -func (m *TipsComm) GetJsonDetail() string { - if m != nil { - return m.JsonDetail - } - return "" -} - -// OnGroupCreated() -type GroupCreatedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - MemberList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=memberList" json:"memberList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - GroupOwnerUser *GroupMemberFullInfo `protobuf:"bytes,5,opt,name=groupOwnerUser" json:"groupOwnerUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{24} -} -func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) -} -func (m *GroupCreatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupCreatedTips.Marshal(b, m, deterministic) -} -func (dst *GroupCreatedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupCreatedTips.Merge(dst, src) -} -func (m *GroupCreatedTips) XXX_Size() int { - return xxx_messageInfo_GroupCreatedTips.Size(m) -} -func (m *GroupCreatedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupCreatedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupCreatedTips proto.InternalMessageInfo - -func (m *GroupCreatedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupCreatedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupCreatedTips) GetMemberList() []*GroupMemberFullInfo { - if m != nil { - return m.MemberList - } - return nil -} - -func (m *GroupCreatedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupCreatedTips) GetGroupOwnerUser() *GroupMemberFullInfo { - if m != nil { - return m.GroupOwnerUser - } - return nil -} - -// OnGroupInfoSet() -type GroupInfoSetTips struct { - OpUser *GroupMemberFullInfo `protobuf:"bytes,1,opt,name=opUser" json:"opUser,omitempty"` - MuteTime int64 `protobuf:"varint,2,opt,name=muteTime" json:"muteTime,omitempty"` - Group *GroupInfo `protobuf:"bytes,3,opt,name=group" json:"group,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{25} -} -func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) -} -func (m *GroupInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupInfoSetTips.Marshal(b, m, deterministic) -} -func (dst *GroupInfoSetTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupInfoSetTips.Merge(dst, src) -} -func (m *GroupInfoSetTips) XXX_Size() int { - return xxx_messageInfo_GroupInfoSetTips.Size(m) -} -func (m *GroupInfoSetTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupInfoSetTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupInfoSetTips proto.InternalMessageInfo - -func (m *GroupInfoSetTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupInfoSetTips) GetMuteTime() int64 { - if m != nil { - return m.MuteTime - } - return 0 -} - -func (m *GroupInfoSetTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -// OnJoinGroupApplication() -type JoinGroupApplicationTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - Applicant *PublicUserInfo `protobuf:"bytes,2,opt,name=applicant" json:"applicant,omitempty"` - ReqMsg string `protobuf:"bytes,3,opt,name=reqMsg" json:"reqMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTips{} } -func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } -func (*JoinGroupApplicationTips) ProtoMessage() {} -func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{26} -} -func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) -} -func (m *JoinGroupApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_JoinGroupApplicationTips.Marshal(b, m, deterministic) -} -func (dst *JoinGroupApplicationTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinGroupApplicationTips.Merge(dst, src) -} -func (m *JoinGroupApplicationTips) XXX_Size() int { - return xxx_messageInfo_JoinGroupApplicationTips.Size(m) -} -func (m *JoinGroupApplicationTips) XXX_DiscardUnknown() { - xxx_messageInfo_JoinGroupApplicationTips.DiscardUnknown(m) -} - -var xxx_messageInfo_JoinGroupApplicationTips proto.InternalMessageInfo - -func (m *JoinGroupApplicationTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *JoinGroupApplicationTips) GetApplicant() *PublicUserInfo { - if m != nil { - return m.Applicant - } - return nil -} - -func (m *JoinGroupApplicationTips) GetReqMsg() string { - if m != nil { - return m.ReqMsg - } - return "" -} - -// OnQuitGroup() -// Actively leave the group -type MemberQuitTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - QuitUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=quitUser" json:"quitUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{27} -} -func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) -} -func (m *MemberQuitTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberQuitTips.Marshal(b, m, deterministic) -} -func (dst *MemberQuitTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberQuitTips.Merge(dst, src) -} -func (m *MemberQuitTips) XXX_Size() int { - return xxx_messageInfo_MemberQuitTips.Size(m) -} -func (m *MemberQuitTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberQuitTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberQuitTips proto.InternalMessageInfo - -func (m *MemberQuitTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberQuitTips) GetQuitUser() *GroupMemberFullInfo { - if m != nil { - return m.QuitUser - } - return nil -} - -func (m *MemberQuitTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnApplicationGroupAccepted() -type GroupApplicationAcceptedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAcceptedTips{} } -func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } -func (*GroupApplicationAcceptedTips) ProtoMessage() {} -func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{28} -} -func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) -} -func (m *GroupApplicationAcceptedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupApplicationAcceptedTips.Marshal(b, m, deterministic) -} -func (dst *GroupApplicationAcceptedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupApplicationAcceptedTips.Merge(dst, src) -} -func (m *GroupApplicationAcceptedTips) XXX_Size() int { - return xxx_messageInfo_GroupApplicationAcceptedTips.Size(m) -} -func (m *GroupApplicationAcceptedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupApplicationAcceptedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupApplicationAcceptedTips proto.InternalMessageInfo - -func (m *GroupApplicationAcceptedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupApplicationAcceptedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupApplicationAcceptedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// OnApplicationGroupRejected() -type GroupApplicationRejectedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - HandleMsg string `protobuf:"bytes,4,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRejectedTips{} } -func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } -func (*GroupApplicationRejectedTips) ProtoMessage() {} -func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{29} -} -func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) -} -func (m *GroupApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupApplicationRejectedTips.Marshal(b, m, deterministic) -} -func (dst *GroupApplicationRejectedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupApplicationRejectedTips.Merge(dst, src) -} -func (m *GroupApplicationRejectedTips) XXX_Size() int { - return xxx_messageInfo_GroupApplicationRejectedTips.Size(m) -} -func (m *GroupApplicationRejectedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupApplicationRejectedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupApplicationRejectedTips proto.InternalMessageInfo - -func (m *GroupApplicationRejectedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupApplicationRejectedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupApplicationRejectedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// OnTransferGroupOwner() -type GroupOwnerTransferredTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - NewGroupOwner *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=newGroupOwner" json:"newGroupOwner,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferredTips{} } -func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } -func (*GroupOwnerTransferredTips) ProtoMessage() {} -func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{30} -} -func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) -} -func (m *GroupOwnerTransferredTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupOwnerTransferredTips.Marshal(b, m, deterministic) -} -func (dst *GroupOwnerTransferredTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupOwnerTransferredTips.Merge(dst, src) -} -func (m *GroupOwnerTransferredTips) XXX_Size() int { - return xxx_messageInfo_GroupOwnerTransferredTips.Size(m) -} -func (m *GroupOwnerTransferredTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupOwnerTransferredTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupOwnerTransferredTips proto.InternalMessageInfo - -func (m *GroupOwnerTransferredTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetNewGroupOwner() *GroupMemberFullInfo { - if m != nil { - return m.NewGroupOwner - } - return nil -} - -func (m *GroupOwnerTransferredTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnMemberKicked() -type MemberKickedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - KickedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=kickedUserList" json:"kickedUserList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{31} -} -func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) -} -func (m *MemberKickedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberKickedTips.Marshal(b, m, deterministic) -} -func (dst *MemberKickedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberKickedTips.Merge(dst, src) -} -func (m *MemberKickedTips) XXX_Size() int { - return xxx_messageInfo_MemberKickedTips.Size(m) -} -func (m *MemberKickedTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberKickedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberKickedTips proto.InternalMessageInfo - -func (m *MemberKickedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberKickedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *MemberKickedTips) GetKickedUserList() []*GroupMemberFullInfo { - if m != nil { - return m.KickedUserList - } - return nil -} - -func (m *MemberKickedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// OnMemberInvited() -type MemberInvitedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - InvitedUserList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=invitedUserList" json:"invitedUserList,omitempty"` - OperationTime int64 `protobuf:"varint,4,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{32} -} -func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) -} -func (m *MemberInvitedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberInvitedTips.Marshal(b, m, deterministic) -} -func (dst *MemberInvitedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberInvitedTips.Merge(dst, src) -} -func (m *MemberInvitedTips) XXX_Size() int { - return xxx_messageInfo_MemberInvitedTips.Size(m) -} -func (m *MemberInvitedTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberInvitedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberInvitedTips proto.InternalMessageInfo - -func (m *MemberInvitedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberInvitedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *MemberInvitedTips) GetInvitedUserList() []*GroupMemberFullInfo { - if m != nil { - return m.InvitedUserList - } - return nil -} - -func (m *MemberInvitedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -// Actively join the group -type MemberEnterTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - EntrantUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=entrantUser" json:"entrantUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{33} -} -func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) -} -func (m *MemberEnterTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MemberEnterTips.Marshal(b, m, deterministic) -} -func (dst *MemberEnterTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_MemberEnterTips.Merge(dst, src) -} -func (m *MemberEnterTips) XXX_Size() int { - return xxx_messageInfo_MemberEnterTips.Size(m) -} -func (m *MemberEnterTips) XXX_DiscardUnknown() { - xxx_messageInfo_MemberEnterTips.DiscardUnknown(m) -} - -var xxx_messageInfo_MemberEnterTips proto.InternalMessageInfo - -func (m *MemberEnterTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *MemberEnterTips) GetEntrantUser() *GroupMemberFullInfo { - if m != nil { - return m.EntrantUser - } - return nil -} - -func (m *MemberEnterTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupDismissedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{34} -} -func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) -} -func (m *GroupDismissedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupDismissedTips.Marshal(b, m, deterministic) -} -func (dst *GroupDismissedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupDismissedTips.Merge(dst, src) -} -func (m *GroupDismissedTips) XXX_Size() int { - return xxx_messageInfo_GroupDismissedTips.Size(m) -} -func (m *GroupDismissedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupDismissedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupDismissedTips proto.InternalMessageInfo - -func (m *GroupDismissedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupDismissedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupDismissedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupMemberMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` - MutedSeconds uint32 `protobuf:"varint,5,opt,name=mutedSeconds" json:"mutedSeconds,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{35} -} -func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) -} -func (m *GroupMemberMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberMutedTips.Merge(dst, src) -} -func (m *GroupMemberMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberMutedTips.Size(m) -} -func (m *GroupMemberMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberMutedTips proto.InternalMessageInfo - -func (m *GroupMemberMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberMutedTips) GetMutedUser() *GroupMemberFullInfo { - if m != nil { - return m.MutedUser - } - return nil -} - -func (m *GroupMemberMutedTips) GetMutedSeconds() uint32 { - if m != nil { - return m.MutedSeconds - } - return 0 -} - -type GroupMemberCancelMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - MutedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=mutedUser" json:"mutedUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMutedTips{} } -func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } -func (*GroupMemberCancelMutedTips) ProtoMessage() {} -func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{36} -} -func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) -} -func (m *GroupMemberCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberCancelMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberCancelMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberCancelMutedTips.Merge(dst, src) -} -func (m *GroupMemberCancelMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberCancelMutedTips.Size(m) -} -func (m *GroupMemberCancelMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberCancelMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberCancelMutedTips proto.InternalMessageInfo - -func (m *GroupMemberCancelMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberCancelMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberCancelMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberCancelMutedTips) GetMutedUser() *GroupMemberFullInfo { - if m != nil { - return m.MutedUser - } - return nil -} - -type GroupMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{37} -} -func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) -} -func (m *GroupMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMutedTips.Merge(dst, src) -} -func (m *GroupMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupMutedTips.Size(m) -} -func (m *GroupMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMutedTips proto.InternalMessageInfo - -func (m *GroupMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupCancelMutedTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{38} -} -func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) -} -func (m *GroupCancelMutedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupCancelMutedTips.Marshal(b, m, deterministic) -} -func (dst *GroupCancelMutedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupCancelMutedTips.Merge(dst, src) -} -func (m *GroupCancelMutedTips) XXX_Size() int { - return xxx_messageInfo_GroupCancelMutedTips.Size(m) -} -func (m *GroupCancelMutedTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupCancelMutedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupCancelMutedTips proto.InternalMessageInfo - -func (m *GroupCancelMutedTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupCancelMutedTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupCancelMutedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type GroupMemberInfoSetTips struct { - Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - ChangedUser *GroupMemberFullInfo `protobuf:"bytes,4,opt,name=changedUser" json:"changedUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{39} -} -func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) -} -func (m *GroupMemberInfoSetTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberInfoSetTips.Marshal(b, m, deterministic) -} -func (dst *GroupMemberInfoSetTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberInfoSetTips.Merge(dst, src) -} -func (m *GroupMemberInfoSetTips) XXX_Size() int { - return xxx_messageInfo_GroupMemberInfoSetTips.Size(m) -} -func (m *GroupMemberInfoSetTips) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberInfoSetTips.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupMemberInfoSetTips proto.InternalMessageInfo - -func (m *GroupMemberInfoSetTips) GetGroup() *GroupInfo { - if m != nil { - return m.Group - } - return nil -} - -func (m *GroupMemberInfoSetTips) GetOpUser() *GroupMemberFullInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *GroupMemberInfoSetTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *GroupMemberInfoSetTips) GetChangedUser() *GroupMemberFullInfo { - if m != nil { - return m.ChangedUser - } - return nil -} - -type OrganizationChangedTips struct { - OpUser *UserInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{40} -} -func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) -} -func (m *OrganizationChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OrganizationChangedTips.Marshal(b, m, deterministic) -} -func (dst *OrganizationChangedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrganizationChangedTips.Merge(dst, src) -} -func (m *OrganizationChangedTips) XXX_Size() int { - return xxx_messageInfo_OrganizationChangedTips.Size(m) -} -func (m *OrganizationChangedTips) XXX_DiscardUnknown() { - xxx_messageInfo_OrganizationChangedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_OrganizationChangedTips proto.InternalMessageInfo - -func (m *OrganizationChangedTips) GetOpUser() *UserInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *OrganizationChangedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -type FriendApplication struct { - AddTime int64 `protobuf:"varint,1,opt,name=addTime" json:"addTime,omitempty"` - AddSource string `protobuf:"bytes,2,opt,name=addSource" json:"addSource,omitempty"` - AddWording string `protobuf:"bytes,3,opt,name=addWording" json:"addWording,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{41} -} -func (m *FriendApplication) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplication.Unmarshal(m, b) -} -func (m *FriendApplication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplication.Marshal(b, m, deterministic) -} -func (dst *FriendApplication) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplication.Merge(dst, src) -} -func (m *FriendApplication) XXX_Size() int { - return xxx_messageInfo_FriendApplication.Size(m) -} -func (m *FriendApplication) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplication.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplication proto.InternalMessageInfo - -func (m *FriendApplication) GetAddTime() int64 { - if m != nil { - return m.AddTime - } - return 0 -} - -func (m *FriendApplication) GetAddSource() string { - if m != nil { - return m.AddSource - } - return "" -} - -func (m *FriendApplication) GetAddWording() string { - if m != nil { - return m.AddWording - } - return "" -} - -type FromToUserID struct { - FromUserID string `protobuf:"bytes,1,opt,name=fromUserID" json:"fromUserID,omitempty"` - ToUserID string `protobuf:"bytes,2,opt,name=toUserID" json:"toUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{42} -} -func (m *FromToUserID) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FromToUserID.Unmarshal(m, b) -} -func (m *FromToUserID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FromToUserID.Marshal(b, m, deterministic) -} -func (dst *FromToUserID) XXX_Merge(src proto.Message) { - xxx_messageInfo_FromToUserID.Merge(dst, src) -} -func (m *FromToUserID) XXX_Size() int { - return xxx_messageInfo_FromToUserID.Size(m) -} -func (m *FromToUserID) XXX_DiscardUnknown() { - xxx_messageInfo_FromToUserID.DiscardUnknown(m) -} - -var xxx_messageInfo_FromToUserID proto.InternalMessageInfo - -func (m *FromToUserID) GetFromUserID() string { - if m != nil { - return m.FromUserID - } - return "" -} - -func (m *FromToUserID) GetToUserID() string { - if m != nil { - return m.ToUserID - } - return "" -} - -// FromUserID apply to add ToUserID -type FriendApplicationTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{43} -} -func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) -} -func (m *FriendApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationTips.Merge(dst, src) -} -func (m *FriendApplicationTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationTips.Size(m) -} -func (m *FriendApplicationTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationTips proto.InternalMessageInfo - -func (m *FriendApplicationTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -// FromUserID accept or reject ToUserID -type FriendApplicationApprovedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplicationApprovedTips{} } -func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationApprovedTips) ProtoMessage() {} -func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{44} -} -func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) -} -func (m *FriendApplicationApprovedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationApprovedTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationApprovedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationApprovedTips.Merge(dst, src) -} -func (m *FriendApplicationApprovedTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationApprovedTips.Size(m) -} -func (m *FriendApplicationApprovedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationApprovedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationApprovedTips proto.InternalMessageInfo - -func (m *FriendApplicationApprovedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -func (m *FriendApplicationApprovedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// FromUserID accept or reject ToUserID -type FriendApplicationRejectedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - HandleMsg string `protobuf:"bytes,2,opt,name=handleMsg" json:"handleMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplicationRejectedTips{} } -func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } -func (*FriendApplicationRejectedTips) ProtoMessage() {} -func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{45} -} -func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) -} -func (m *FriendApplicationRejectedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendApplicationRejectedTips.Marshal(b, m, deterministic) -} -func (dst *FriendApplicationRejectedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendApplicationRejectedTips.Merge(dst, src) -} -func (m *FriendApplicationRejectedTips) XXX_Size() int { - return xxx_messageInfo_FriendApplicationRejectedTips.Size(m) -} -func (m *FriendApplicationRejectedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendApplicationRejectedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendApplicationRejectedTips proto.InternalMessageInfo - -func (m *FriendApplicationRejectedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -func (m *FriendApplicationRejectedTips) GetHandleMsg() string { - if m != nil { - return m.HandleMsg - } - return "" -} - -// FromUserID Added a friend ToUserID -type FriendAddedTips struct { - Friend *FriendInfo `protobuf:"bytes,1,opt,name=friend" json:"friend,omitempty"` - OperationTime int64 `protobuf:"varint,2,opt,name=operationTime" json:"operationTime,omitempty"` - OpUser *PublicUserInfo `protobuf:"bytes,3,opt,name=opUser" json:"opUser,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{46} -} -func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) -} -func (m *FriendAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendAddedTips.Marshal(b, m, deterministic) -} -func (dst *FriendAddedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendAddedTips.Merge(dst, src) -} -func (m *FriendAddedTips) XXX_Size() int { - return xxx_messageInfo_FriendAddedTips.Size(m) -} -func (m *FriendAddedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendAddedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendAddedTips proto.InternalMessageInfo - -func (m *FriendAddedTips) GetFriend() *FriendInfo { - if m != nil { - return m.Friend - } - return nil -} - -func (m *FriendAddedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - -func (m *FriendAddedTips) GetOpUser() *PublicUserInfo { - if m != nil { - return m.OpUser - } - return nil -} - -// FromUserID deleted a friend ToUserID -type FriendDeletedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{47} -} -func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) -} -func (m *FriendDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendDeletedTips.Marshal(b, m, deterministic) -} -func (dst *FriendDeletedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendDeletedTips.Merge(dst, src) -} -func (m *FriendDeletedTips) XXX_Size() int { - return xxx_messageInfo_FriendDeletedTips.Size(m) -} -func (m *FriendDeletedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendDeletedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendDeletedTips proto.InternalMessageInfo - -func (m *FriendDeletedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type BlackAddedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{48} -} -func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) -} -func (m *BlackAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackAddedTips.Marshal(b, m, deterministic) -} -func (dst *BlackAddedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackAddedTips.Merge(dst, src) -} -func (m *BlackAddedTips) XXX_Size() int { - return xxx_messageInfo_BlackAddedTips.Size(m) -} -func (m *BlackAddedTips) XXX_DiscardUnknown() { - xxx_messageInfo_BlackAddedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackAddedTips proto.InternalMessageInfo - -func (m *BlackAddedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type BlackDeletedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{49} -} -func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) -} -func (m *BlackDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BlackDeletedTips.Marshal(b, m, deterministic) -} -func (dst *BlackDeletedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlackDeletedTips.Merge(dst, src) -} -func (m *BlackDeletedTips) XXX_Size() int { - return xxx_messageInfo_BlackDeletedTips.Size(m) -} -func (m *BlackDeletedTips) XXX_DiscardUnknown() { - xxx_messageInfo_BlackDeletedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_BlackDeletedTips proto.InternalMessageInfo - -func (m *BlackDeletedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -type FriendInfoChangedTips struct { - FromToUserID *FromToUserID `protobuf:"bytes,1,opt,name=fromToUserID" json:"fromToUserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{50} -} -func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) -} -func (m *FriendInfoChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FriendInfoChangedTips.Marshal(b, m, deterministic) -} -func (dst *FriendInfoChangedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_FriendInfoChangedTips.Merge(dst, src) -} -func (m *FriendInfoChangedTips) XXX_Size() int { - return xxx_messageInfo_FriendInfoChangedTips.Size(m) -} -func (m *FriendInfoChangedTips) XXX_DiscardUnknown() { - xxx_messageInfo_FriendInfoChangedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_FriendInfoChangedTips proto.InternalMessageInfo - -func (m *FriendInfoChangedTips) GetFromToUserID() *FromToUserID { - if m != nil { - return m.FromToUserID - } - return nil -} - -// ////////////////////user///////////////////// -type UserInfoUpdatedTips struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{51} -} -func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) -} -func (m *UserInfoUpdatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfoUpdatedTips.Marshal(b, m, deterministic) -} -func (dst *UserInfoUpdatedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfoUpdatedTips.Merge(dst, src) -} -func (m *UserInfoUpdatedTips) XXX_Size() int { - return xxx_messageInfo_UserInfoUpdatedTips.Size(m) -} -func (m *UserInfoUpdatedTips) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfoUpdatedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_UserInfoUpdatedTips proto.InternalMessageInfo - -func (m *UserInfoUpdatedTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -// ////////////////////conversation///////////////////// -type ConversationUpdateTips struct { - UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{52} -} -func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) -} -func (m *ConversationUpdateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ConversationUpdateTips.Marshal(b, m, deterministic) -} -func (dst *ConversationUpdateTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConversationUpdateTips.Merge(dst, src) -} -func (m *ConversationUpdateTips) XXX_Size() int { - return xxx_messageInfo_ConversationUpdateTips.Size(m) -} -func (m *ConversationUpdateTips) XXX_DiscardUnknown() { - xxx_messageInfo_ConversationUpdateTips.DiscardUnknown(m) -} - -var xxx_messageInfo_ConversationUpdateTips proto.InternalMessageInfo - -func (m *ConversationUpdateTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -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"` - IsPrivate bool `protobuf:"varint,3,opt,name=isPrivate" json:"isPrivate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPrivateTips{} } -func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } -func (*ConversationSetPrivateTips) ProtoMessage() {} -func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{53} -} -func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) -} -func (m *ConversationSetPrivateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ConversationSetPrivateTips.Marshal(b, m, deterministic) -} -func (dst *ConversationSetPrivateTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConversationSetPrivateTips.Merge(dst, src) -} -func (m *ConversationSetPrivateTips) XXX_Size() int { - return xxx_messageInfo_ConversationSetPrivateTips.Size(m) -} -func (m *ConversationSetPrivateTips) XXX_DiscardUnknown() { - xxx_messageInfo_ConversationSetPrivateTips.DiscardUnknown(m) -} - -var xxx_messageInfo_ConversationSetPrivateTips proto.InternalMessageInfo - -func (m *ConversationSetPrivateTips) GetRecvID() string { - if m != nil { - return m.RecvID - } - return "" -} - -func (m *ConversationSetPrivateTips) GetSendID() string { - if m != nil { - return m.SendID - } - return "" -} - -func (m *ConversationSetPrivateTips) GetIsPrivate() bool { - if m != nil { - return m.IsPrivate - } - return false -} - -// //////////////////message/////////////////////// -type DeleteMessageTips struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{54} -} -func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) -} -func (m *DeleteMessageTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteMessageTips.Marshal(b, m, deterministic) -} -func (dst *DeleteMessageTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteMessageTips.Merge(dst, src) -} -func (m *DeleteMessageTips) XXX_Size() int { - return xxx_messageInfo_DeleteMessageTips.Size(m) -} -func (m *DeleteMessageTips) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteMessageTips.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteMessageTips proto.InternalMessageInfo - -func (m *DeleteMessageTips) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *DeleteMessageTips) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DeleteMessageTips) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -// /cms -type RequestPagination struct { - PageNumber int32 `protobuf:"varint,1,opt,name=pageNumber" json:"pageNumber,omitempty"` - ShowNumber int32 `protobuf:"varint,2,opt,name=showNumber" json:"showNumber,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{55} -} -func (m *RequestPagination) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RequestPagination.Unmarshal(m, b) -} -func (m *RequestPagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RequestPagination.Marshal(b, m, deterministic) -} -func (dst *RequestPagination) XXX_Merge(src proto.Message) { - xxx_messageInfo_RequestPagination.Merge(dst, src) -} -func (m *RequestPagination) XXX_Size() int { - return xxx_messageInfo_RequestPagination.Size(m) -} -func (m *RequestPagination) XXX_DiscardUnknown() { - xxx_messageInfo_RequestPagination.DiscardUnknown(m) -} - -var xxx_messageInfo_RequestPagination proto.InternalMessageInfo - -func (m *RequestPagination) GetPageNumber() int32 { - if m != nil { - return m.PageNumber - } - return 0 -} - -func (m *RequestPagination) GetShowNumber() int32 { - if m != nil { - return m.ShowNumber - } - return 0 -} - -type ResponsePagination struct { - CurrentPage int32 `protobuf:"varint,5,opt,name=CurrentPage" json:"CurrentPage,omitempty"` - ShowNumber int32 `protobuf:"varint,6,opt,name=ShowNumber" json:"ShowNumber,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{56} -} -func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) -} -func (m *ResponsePagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponsePagination.Marshal(b, m, deterministic) -} -func (dst *ResponsePagination) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponsePagination.Merge(dst, src) -} -func (m *ResponsePagination) XXX_Size() int { - return xxx_messageInfo_ResponsePagination.Size(m) -} -func (m *ResponsePagination) XXX_DiscardUnknown() { - xxx_messageInfo_ResponsePagination.DiscardUnknown(m) -} - -var xxx_messageInfo_ResponsePagination proto.InternalMessageInfo - -func (m *ResponsePagination) GetCurrentPage() int32 { - if m != nil { - return m.CurrentPage - } - return 0 -} - -func (m *ResponsePagination) GetShowNumber() int32 { - if m != nil { - return m.ShowNumber - } - return 0 -} - -// /////////////////signal////////////// -type SignalReq struct { - // Types that are valid to be assigned to Payload: - // *SignalReq_Invite - // *SignalReq_InviteInGroup - // *SignalReq_Cancel - // *SignalReq_Accept - // *SignalReq_HungUp - // *SignalReq_Reject - Payload isSignalReq_Payload `protobuf_oneof:"payload"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{57} -} -func (m *SignalReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalReq.Unmarshal(m, b) -} -func (m *SignalReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalReq.Marshal(b, m, deterministic) -} -func (dst *SignalReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalReq.Merge(dst, src) -} -func (m *SignalReq) XXX_Size() int { - return xxx_messageInfo_SignalReq.Size(m) -} -func (m *SignalReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalReq proto.InternalMessageInfo - -type isSignalReq_Payload interface { - isSignalReq_Payload() -} - -type SignalReq_Invite struct { - Invite *SignalInviteReq `protobuf:"bytes,1,opt,name=invite,oneof"` -} -type SignalReq_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReq `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` -} -type SignalReq_Cancel struct { - Cancel *SignalCancelReq `protobuf:"bytes,3,opt,name=cancel,oneof"` -} -type SignalReq_Accept struct { - Accept *SignalAcceptReq `protobuf:"bytes,4,opt,name=accept,oneof"` -} -type SignalReq_HungUp struct { - HungUp *SignalHungUpReq `protobuf:"bytes,5,opt,name=hungUp,oneof"` -} -type SignalReq_Reject struct { - Reject *SignalRejectReq `protobuf:"bytes,6,opt,name=reject,oneof"` -} - -func (*SignalReq_Invite) isSignalReq_Payload() {} -func (*SignalReq_InviteInGroup) isSignalReq_Payload() {} -func (*SignalReq_Cancel) isSignalReq_Payload() {} -func (*SignalReq_Accept) isSignalReq_Payload() {} -func (*SignalReq_HungUp) isSignalReq_Payload() {} -func (*SignalReq_Reject) isSignalReq_Payload() {} - -func (m *SignalReq) GetPayload() isSignalReq_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (m *SignalReq) GetInvite() *SignalInviteReq { - if x, ok := m.GetPayload().(*SignalReq_Invite); ok { - return x.Invite - } - return nil -} - -func (m *SignalReq) GetInviteInGroup() *SignalInviteInGroupReq { - if x, ok := m.GetPayload().(*SignalReq_InviteInGroup); ok { - return x.InviteInGroup - } - return nil -} - -func (m *SignalReq) GetCancel() *SignalCancelReq { - if x, ok := m.GetPayload().(*SignalReq_Cancel); ok { - return x.Cancel - } - return nil -} - -func (m *SignalReq) GetAccept() *SignalAcceptReq { - if x, ok := m.GetPayload().(*SignalReq_Accept); ok { - return x.Accept - } - return nil -} - -func (m *SignalReq) GetHungUp() *SignalHungUpReq { - if x, ok := m.GetPayload().(*SignalReq_HungUp); ok { - return x.HungUp - } - return nil -} - -func (m *SignalReq) GetReject() *SignalRejectReq { - if x, ok := m.GetPayload().(*SignalReq_Reject); ok { - return x.Reject - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SignalReq) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SignalReq_OneofMarshaler, _SignalReq_OneofUnmarshaler, _SignalReq_OneofSizer, []interface{}{ - (*SignalReq_Invite)(nil), - (*SignalReq_InviteInGroup)(nil), - (*SignalReq_Cancel)(nil), - (*SignalReq_Accept)(nil), - (*SignalReq_HungUp)(nil), - (*SignalReq_Reject)(nil), - } -} - -func _SignalReq_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SignalReq) - // payload - switch x := m.Payload.(type) { - case *SignalReq_Invite: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Invite); err != nil { - return err - } - case *SignalReq_InviteInGroup: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InviteInGroup); err != nil { - return err - } - case *SignalReq_Cancel: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cancel); err != nil { - return err - } - case *SignalReq_Accept: - b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Accept); err != nil { - return err - } - case *SignalReq_HungUp: - b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HungUp); err != nil { - return err - } - case *SignalReq_Reject: - b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Reject); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("SignalReq.Payload has unexpected type %T", x) - } - return nil -} - -func _SignalReq_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SignalReq) - switch tag { - case 1: // payload.invite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Invite{msg} - return true, err - case 2: // payload.inviteInGroup - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteInGroupReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_InviteInGroup{msg} - return true, err - case 3: // payload.cancel - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalCancelReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Cancel{msg} - return true, err - case 4: // payload.accept - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalAcceptReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Accept{msg} - return true, err - case 5: // payload.hungUp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalHungUpReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_HungUp{msg} - return true, err - case 6: // payload.reject - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalRejectReq) - err := b.DecodeMessage(msg) - m.Payload = &SignalReq_Reject{msg} - return true, err - default: - return false, nil - } -} - -func _SignalReq_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SignalReq) - // payload - switch x := m.Payload.(type) { - case *SignalReq_Invite: - s := proto.Size(x.Invite) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_InviteInGroup: - s := proto.Size(x.InviteInGroup) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Cancel: - s := proto.Size(x.Cancel) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Accept: - s := proto.Size(x.Accept) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_HungUp: - s := proto.Size(x.HungUp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalReq_Reject: - s := proto.Size(x.Reject) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type SignalResp struct { - // Types that are valid to be assigned to Payload: - // *SignalResp_Invite - // *SignalResp_InviteInGroup - // *SignalResp_Cancel - // *SignalResp_Accept - // *SignalResp_HungUp - // *SignalResp_Reject - Payload isSignalResp_Payload `protobuf_oneof:"payload"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{58} -} -func (m *SignalResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalResp.Unmarshal(m, b) -} -func (m *SignalResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalResp.Marshal(b, m, deterministic) -} -func (dst *SignalResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalResp.Merge(dst, src) -} -func (m *SignalResp) XXX_Size() int { - return xxx_messageInfo_SignalResp.Size(m) -} -func (m *SignalResp) XXX_DiscardUnknown() { - xxx_messageInfo_SignalResp.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalResp proto.InternalMessageInfo - -type isSignalResp_Payload interface { - isSignalResp_Payload() -} - -type SignalResp_Invite struct { - Invite *SignalInviteReply `protobuf:"bytes,1,opt,name=invite,oneof"` -} -type SignalResp_InviteInGroup struct { - InviteInGroup *SignalInviteInGroupReply `protobuf:"bytes,2,opt,name=inviteInGroup,oneof"` -} -type SignalResp_Cancel struct { - Cancel *SignalCancelReply `protobuf:"bytes,3,opt,name=cancel,oneof"` -} -type SignalResp_Accept struct { - Accept *SignalAcceptReply `protobuf:"bytes,4,opt,name=accept,oneof"` -} -type SignalResp_HungUp struct { - HungUp *SignalHungUpReply `protobuf:"bytes,5,opt,name=hungUp,oneof"` -} -type SignalResp_Reject struct { - Reject *SignalRejectReply `protobuf:"bytes,6,opt,name=reject,oneof"` -} - -func (*SignalResp_Invite) isSignalResp_Payload() {} -func (*SignalResp_InviteInGroup) isSignalResp_Payload() {} -func (*SignalResp_Cancel) isSignalResp_Payload() {} -func (*SignalResp_Accept) isSignalResp_Payload() {} -func (*SignalResp_HungUp) isSignalResp_Payload() {} -func (*SignalResp_Reject) isSignalResp_Payload() {} - -func (m *SignalResp) GetPayload() isSignalResp_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (m *SignalResp) GetInvite() *SignalInviteReply { - if x, ok := m.GetPayload().(*SignalResp_Invite); ok { - return x.Invite - } - return nil -} - -func (m *SignalResp) GetInviteInGroup() *SignalInviteInGroupReply { - if x, ok := m.GetPayload().(*SignalResp_InviteInGroup); ok { - return x.InviteInGroup - } - return nil -} - -func (m *SignalResp) GetCancel() *SignalCancelReply { - if x, ok := m.GetPayload().(*SignalResp_Cancel); ok { - return x.Cancel - } - return nil -} - -func (m *SignalResp) GetAccept() *SignalAcceptReply { - if x, ok := m.GetPayload().(*SignalResp_Accept); ok { - return x.Accept - } - return nil -} - -func (m *SignalResp) GetHungUp() *SignalHungUpReply { - if x, ok := m.GetPayload().(*SignalResp_HungUp); ok { - return x.HungUp - } - return nil -} - -func (m *SignalResp) GetReject() *SignalRejectReply { - if x, ok := m.GetPayload().(*SignalResp_Reject); ok { - return x.Reject - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SignalResp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SignalResp_OneofMarshaler, _SignalResp_OneofUnmarshaler, _SignalResp_OneofSizer, []interface{}{ - (*SignalResp_Invite)(nil), - (*SignalResp_InviteInGroup)(nil), - (*SignalResp_Cancel)(nil), - (*SignalResp_Accept)(nil), - (*SignalResp_HungUp)(nil), - (*SignalResp_Reject)(nil), - } -} - -func _SignalResp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SignalResp) - // payload - switch x := m.Payload.(type) { - case *SignalResp_Invite: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Invite); err != nil { - return err - } - case *SignalResp_InviteInGroup: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InviteInGroup); err != nil { - return err - } - case *SignalResp_Cancel: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cancel); err != nil { - return err - } - case *SignalResp_Accept: - b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Accept); err != nil { - return err - } - case *SignalResp_HungUp: - b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HungUp); err != nil { - return err - } - case *SignalResp_Reject: - b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Reject); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("SignalResp.Payload has unexpected type %T", x) - } - return nil -} - -func _SignalResp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SignalResp) - switch tag { - case 1: // payload.invite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Invite{msg} - return true, err - case 2: // payload.inviteInGroup - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalInviteInGroupReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_InviteInGroup{msg} - return true, err - case 3: // payload.cancel - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalCancelReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Cancel{msg} - return true, err - case 4: // payload.accept - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalAcceptReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Accept{msg} - return true, err - case 5: // payload.hungUp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalHungUpReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_HungUp{msg} - return true, err - case 6: // payload.reject - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SignalRejectReply) - err := b.DecodeMessage(msg) - m.Payload = &SignalResp_Reject{msg} - return true, err - default: - return false, nil - } -} - -func _SignalResp_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SignalResp) - // payload - switch x := m.Payload.(type) { - case *SignalResp_Invite: - s := proto.Size(x.Invite) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_InviteInGroup: - s := proto.Size(x.InviteInGroup) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Cancel: - s := proto.Size(x.Cancel) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Accept: - s := proto.Size(x.Accept) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_HungUp: - s := proto.Size(x.HungUp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *SignalResp_Reject: - s := proto.Size(x.Reject) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type InvitationInfo struct { - InviterUserID string `protobuf:"bytes,1,opt,name=inviterUserID" json:"inviterUserID,omitempty"` - InviteeUserIDList []string `protobuf:"bytes,2,rep,name=inviteeUserIDList" json:"inviteeUserIDList,omitempty"` - CustomData string `protobuf:"bytes,3,opt,name=customData" json:"customData,omitempty"` - GroupID string `protobuf:"bytes,4,opt,name=groupID" json:"groupID,omitempty"` - RoomID string `protobuf:"bytes,5,opt,name=roomID" json:"roomID,omitempty"` - Timeout int32 `protobuf:"varint,6,opt,name=timeout" json:"timeout,omitempty"` - MediaType string `protobuf:"bytes,7,opt,name=mediaType" json:"mediaType,omitempty"` - PlatformID int32 `protobuf:"varint,8,opt,name=platformID" json:"platformID,omitempty"` - SessionType int32 `protobuf:"varint,9,opt,name=sessionType" json:"sessionType,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{59} -} -func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) -} -func (m *InvitationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_InvitationInfo.Marshal(b, m, deterministic) -} -func (dst *InvitationInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_InvitationInfo.Merge(dst, src) -} -func (m *InvitationInfo) XXX_Size() int { - return xxx_messageInfo_InvitationInfo.Size(m) -} -func (m *InvitationInfo) XXX_DiscardUnknown() { - xxx_messageInfo_InvitationInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_InvitationInfo proto.InternalMessageInfo - -func (m *InvitationInfo) GetInviterUserID() string { - if m != nil { - return m.InviterUserID - } - return "" -} - -func (m *InvitationInfo) GetInviteeUserIDList() []string { - if m != nil { - return m.InviteeUserIDList - } - return nil -} - -func (m *InvitationInfo) GetCustomData() string { - if m != nil { - return m.CustomData - } - return "" -} - -func (m *InvitationInfo) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *InvitationInfo) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *InvitationInfo) GetTimeout() int32 { - if m != nil { - return m.Timeout - } - return 0 -} - -func (m *InvitationInfo) GetMediaType() string { - if m != nil { - return m.MediaType - } - return "" -} - -func (m *InvitationInfo) GetPlatformID() int32 { - if m != nil { - return m.PlatformID - } - return 0 -} - -func (m *InvitationInfo) GetSessionType() int32 { - if m != nil { - return m.SessionType - } - return 0 -} - -type ParticipantMetaData struct { - GroupInfo *GroupInfo `protobuf:"bytes,1,opt,name=groupInfo" json:"groupInfo,omitempty"` - GroupMemberInfo *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=groupMemberInfo" json:"groupMemberInfo,omitempty"` - UserInfo *PublicUserInfo `protobuf:"bytes,3,opt,name=userInfo" json:"userInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{60} -} -func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) -} -func (m *ParticipantMetaData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ParticipantMetaData.Marshal(b, m, deterministic) -} -func (dst *ParticipantMetaData) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParticipantMetaData.Merge(dst, src) -} -func (m *ParticipantMetaData) XXX_Size() int { - return xxx_messageInfo_ParticipantMetaData.Size(m) -} -func (m *ParticipantMetaData) XXX_DiscardUnknown() { - xxx_messageInfo_ParticipantMetaData.DiscardUnknown(m) -} - -var xxx_messageInfo_ParticipantMetaData proto.InternalMessageInfo - -func (m *ParticipantMetaData) GetGroupInfo() *GroupInfo { - if m != nil { - return m.GroupInfo - } - return nil -} - -func (m *ParticipantMetaData) GetGroupMemberInfo() *GroupMemberFullInfo { - if m != nil { - return m.GroupMemberInfo - } - return nil -} - -func (m *ParticipantMetaData) GetUserInfo() *PublicUserInfo { - if m != nil { - return m.UserInfo - } - return nil -} - -type SignalInviteReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{61} -} -func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) -} -func (m *SignalInviteReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteReq.Marshal(b, m, deterministic) -} -func (dst *SignalInviteReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteReq.Merge(dst, src) -} -func (m *SignalInviteReq) XXX_Size() int { - return xxx_messageInfo_SignalInviteReq.Size(m) -} -func (m *SignalInviteReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteReq proto.InternalMessageInfo - -func (m *SignalInviteReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalInviteReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalInviteReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalInviteReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalInviteReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{62} -} -func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) -} -func (m *SignalInviteReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteReply.Marshal(b, m, deterministic) -} -func (dst *SignalInviteReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteReply.Merge(dst, src) -} -func (m *SignalInviteReply) XXX_Size() int { - return xxx_messageInfo_SignalInviteReply.Size(m) -} -func (m *SignalInviteReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteReply proto.InternalMessageInfo - -func (m *SignalInviteReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalInviteReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalInviteReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalInviteInGroupReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{63} -} -func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) -} -func (m *SignalInviteInGroupReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteInGroupReq.Marshal(b, m, deterministic) -} -func (dst *SignalInviteInGroupReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteInGroupReq.Merge(dst, src) -} -func (m *SignalInviteInGroupReq) XXX_Size() int { - return xxx_messageInfo_SignalInviteInGroupReq.Size(m) -} -func (m *SignalInviteInGroupReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteInGroupReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteInGroupReq proto.InternalMessageInfo - -func (m *SignalInviteInGroupReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalInviteInGroupReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalInviteInGroupReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalInviteInGroupReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalInviteInGroupReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupReply{} } -func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } -func (*SignalInviteInGroupReply) ProtoMessage() {} -func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_5ad487361de288a1, []int{64} -} -func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) -} -func (m *SignalInviteInGroupReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalInviteInGroupReply.Marshal(b, m, deterministic) -} -func (dst *SignalInviteInGroupReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalInviteInGroupReply.Merge(dst, src) -} -func (m *SignalInviteInGroupReply) XXX_Size() int { - return xxx_messageInfo_SignalInviteInGroupReply.Size(m) -} -func (m *SignalInviteInGroupReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalInviteInGroupReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalInviteInGroupReply proto.InternalMessageInfo - -func (m *SignalInviteInGroupReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalInviteInGroupReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalInviteInGroupReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalCancelReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{65} -} -func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) -} -func (m *SignalCancelReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalCancelReq.Marshal(b, m, deterministic) -} -func (dst *SignalCancelReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalCancelReq.Merge(dst, src) -} -func (m *SignalCancelReq) XXX_Size() int { - return xxx_messageInfo_SignalCancelReq.Size(m) -} -func (m *SignalCancelReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalCancelReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalCancelReq proto.InternalMessageInfo - -func (m *SignalCancelReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalCancelReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalCancelReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalCancelReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -type SignalCancelReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{66} -} -func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) -} -func (m *SignalCancelReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalCancelReply.Marshal(b, m, deterministic) -} -func (dst *SignalCancelReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalCancelReply.Merge(dst, src) -} -func (m *SignalCancelReply) XXX_Size() int { - return xxx_messageInfo_SignalCancelReply.Size(m) -} -func (m *SignalCancelReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalCancelReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalCancelReply proto.InternalMessageInfo - -type SignalAcceptReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{67} -} -func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) -} -func (m *SignalAcceptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalAcceptReq.Marshal(b, m, deterministic) -} -func (dst *SignalAcceptReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalAcceptReq.Merge(dst, src) -} -func (m *SignalAcceptReq) XXX_Size() int { - return xxx_messageInfo_SignalAcceptReq.Size(m) -} -func (m *SignalAcceptReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalAcceptReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalAcceptReq proto.InternalMessageInfo - -func (m *SignalAcceptReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalAcceptReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalAcceptReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalAcceptReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -func (m *SignalAcceptReq) GetOpUserPlatformID() int32 { - if m != nil { - return m.OpUserPlatformID - } - return 0 -} - -type SignalAcceptReply struct { - Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` - RoomID string `protobuf:"bytes,2,opt,name=roomID" json:"roomID,omitempty"` - LiveURL string `protobuf:"bytes,3,opt,name=liveURL" json:"liveURL,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{68} -} -func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) -} -func (m *SignalAcceptReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalAcceptReply.Marshal(b, m, deterministic) -} -func (dst *SignalAcceptReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalAcceptReply.Merge(dst, src) -} -func (m *SignalAcceptReply) XXX_Size() int { - return xxx_messageInfo_SignalAcceptReply.Size(m) -} -func (m *SignalAcceptReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalAcceptReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalAcceptReply proto.InternalMessageInfo - -func (m *SignalAcceptReply) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *SignalAcceptReply) GetRoomID() string { - if m != nil { - return m.RoomID - } - return "" -} - -func (m *SignalAcceptReply) GetLiveURL() string { - if m != nil { - return m.LiveURL - } - return "" -} - -type SignalHungUpReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{69} -} -func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) -} -func (m *SignalHungUpReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalHungUpReq.Marshal(b, m, deterministic) -} -func (dst *SignalHungUpReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalHungUpReq.Merge(dst, src) -} -func (m *SignalHungUpReq) XXX_Size() int { - return xxx_messageInfo_SignalHungUpReq.Size(m) -} -func (m *SignalHungUpReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalHungUpReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalHungUpReq proto.InternalMessageInfo - -func (m *SignalHungUpReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalHungUpReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalHungUpReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -type SignalHungUpReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{70} -} -func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) -} -func (m *SignalHungUpReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalHungUpReply.Marshal(b, m, deterministic) -} -func (dst *SignalHungUpReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalHungUpReply.Merge(dst, src) -} -func (m *SignalHungUpReply) XXX_Size() int { - return xxx_messageInfo_SignalHungUpReply.Size(m) -} -func (m *SignalHungUpReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalHungUpReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalHungUpReply proto.InternalMessageInfo - -type SignalRejectReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - Invitation *InvitationInfo `protobuf:"bytes,2,opt,name=invitation" json:"invitation,omitempty"` - OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,3,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` - Participant *ParticipantMetaData `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` - OpUserPlatformID int32 `protobuf:"varint,5,opt,name=opUserPlatformID" json:"opUserPlatformID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{71} -} -func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) -} -func (m *SignalRejectReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalRejectReq.Marshal(b, m, deterministic) -} -func (dst *SignalRejectReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalRejectReq.Merge(dst, src) -} -func (m *SignalRejectReq) XXX_Size() int { - return xxx_messageInfo_SignalRejectReq.Size(m) -} -func (m *SignalRejectReq) XXX_DiscardUnknown() { - xxx_messageInfo_SignalRejectReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalRejectReq proto.InternalMessageInfo - -func (m *SignalRejectReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *SignalRejectReq) GetInvitation() *InvitationInfo { - if m != nil { - return m.Invitation - } - return nil -} - -func (m *SignalRejectReq) GetOfflinePushInfo() *OfflinePushInfo { - if m != nil { - return m.OfflinePushInfo - } - return nil -} - -func (m *SignalRejectReq) GetParticipant() *ParticipantMetaData { - if m != nil { - return m.Participant - } - return nil -} - -func (m *SignalRejectReq) GetOpUserPlatformID() int32 { - if m != nil { - return m.OpUserPlatformID - } - return 0 -} - -type SignalRejectReply struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{72} -} -func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) -} -func (m *SignalRejectReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SignalRejectReply.Marshal(b, m, deterministic) -} -func (dst *SignalRejectReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_SignalRejectReply.Merge(dst, src) -} -func (m *SignalRejectReply) XXX_Size() int { - return xxx_messageInfo_SignalRejectReply.Size(m) -} -func (m *SignalRejectReply) XXX_DiscardUnknown() { - xxx_messageInfo_SignalRejectReply.DiscardUnknown(m) -} - -var xxx_messageInfo_SignalRejectReply proto.InternalMessageInfo - -type DelMsgListReq struct { - OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{73} -} -func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) -} -func (m *DelMsgListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListReq.Marshal(b, m, deterministic) -} -func (dst *DelMsgListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListReq.Merge(dst, src) -} -func (m *DelMsgListReq) XXX_Size() int { - return xxx_messageInfo_DelMsgListReq.Size(m) -} -func (m *DelMsgListReq) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListReq proto.InternalMessageInfo - -func (m *DelMsgListReq) GetOpUserID() string { - if m != nil { - return m.OpUserID - } - return "" -} - -func (m *DelMsgListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DelMsgListReq) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -func (m *DelMsgListReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -type DelMsgListResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -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_5ad487361de288a1, []int{74} -} -func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) -} -func (m *DelMsgListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListResp.Marshal(b, m, deterministic) -} -func (dst *DelMsgListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListResp.Merge(dst, src) -} -func (m *DelMsgListResp) XXX_Size() int { - return xxx_messageInfo_DelMsgListResp.Size(m) -} -func (m *DelMsgListResp) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListResp proto.InternalMessageInfo - -func (m *DelMsgListResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *DelMsgListResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func init() { - proto.RegisterType((*GroupInfo)(nil), "server_api_params.GroupInfo") - proto.RegisterType((*GroupMemberFullInfo)(nil), "server_api_params.GroupMemberFullInfo") - proto.RegisterType((*PublicUserInfo)(nil), "server_api_params.PublicUserInfo") - proto.RegisterType((*UserInfo)(nil), "server_api_params.UserInfo") - proto.RegisterType((*FriendInfo)(nil), "server_api_params.FriendInfo") - proto.RegisterType((*BlackInfo)(nil), "server_api_params.BlackInfo") - proto.RegisterType((*GroupRequest)(nil), "server_api_params.GroupRequest") - proto.RegisterType((*FriendRequest)(nil), "server_api_params.FriendRequest") - proto.RegisterType((*Department)(nil), "server_api_params.Department") - proto.RegisterType((*OrganizationUser)(nil), "server_api_params.OrganizationUser") - proto.RegisterType((*DepartmentMember)(nil), "server_api_params.DepartmentMember") - proto.RegisterType((*UserDepartmentMember)(nil), "server_api_params.UserDepartmentMember") - proto.RegisterType((*UserInDepartment)(nil), "server_api_params.UserInDepartment") - proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") - proto.RegisterMapType((map[string]*SeqList)(nil), "server_api_params.PullMessageBySeqListReq.GroupSeqListEntry") - proto.RegisterType((*SeqList)(nil), "server_api_params.seqList") - proto.RegisterType((*MsgDataList)(nil), "server_api_params.MsgDataList") - proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") - proto.RegisterMapType((map[string]*MsgDataList)(nil), "server_api_params.PullMessageBySeqListResp.GroupMsgDataListEntry") - proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") - proto.RegisterType((*MaxAndMinSeq)(nil), "server_api_params.MaxAndMinSeq") - proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") - proto.RegisterMapType((map[string]*MaxAndMinSeq)(nil), "server_api_params.GetMaxAndMinSeqResp.GroupMaxAndMinSeqEntry") - proto.RegisterType((*UserSendMsgResp)(nil), "server_api_params.UserSendMsgResp") - proto.RegisterType((*MsgData)(nil), "server_api_params.MsgData") - proto.RegisterMapType((map[string]bool)(nil), "server_api_params.MsgData.OptionsEntry") - proto.RegisterType((*OfflinePushInfo)(nil), "server_api_params.OfflinePushInfo") - proto.RegisterType((*TipsComm)(nil), "server_api_params.TipsComm") - proto.RegisterType((*GroupCreatedTips)(nil), "server_api_params.GroupCreatedTips") - proto.RegisterType((*GroupInfoSetTips)(nil), "server_api_params.GroupInfoSetTips") - proto.RegisterType((*JoinGroupApplicationTips)(nil), "server_api_params.JoinGroupApplicationTips") - proto.RegisterType((*MemberQuitTips)(nil), "server_api_params.MemberQuitTips") - proto.RegisterType((*GroupApplicationAcceptedTips)(nil), "server_api_params.GroupApplicationAcceptedTips") - proto.RegisterType((*GroupApplicationRejectedTips)(nil), "server_api_params.GroupApplicationRejectedTips") - proto.RegisterType((*GroupOwnerTransferredTips)(nil), "server_api_params.GroupOwnerTransferredTips") - proto.RegisterType((*MemberKickedTips)(nil), "server_api_params.MemberKickedTips") - proto.RegisterType((*MemberInvitedTips)(nil), "server_api_params.MemberInvitedTips") - proto.RegisterType((*MemberEnterTips)(nil), "server_api_params.MemberEnterTips") - proto.RegisterType((*GroupDismissedTips)(nil), "server_api_params.GroupDismissedTips") - proto.RegisterType((*GroupMemberMutedTips)(nil), "server_api_params.GroupMemberMutedTips") - proto.RegisterType((*GroupMemberCancelMutedTips)(nil), "server_api_params.GroupMemberCancelMutedTips") - proto.RegisterType((*GroupMutedTips)(nil), "server_api_params.GroupMutedTips") - proto.RegisterType((*GroupCancelMutedTips)(nil), "server_api_params.GroupCancelMutedTips") - proto.RegisterType((*GroupMemberInfoSetTips)(nil), "server_api_params.GroupMemberInfoSetTips") - proto.RegisterType((*OrganizationChangedTips)(nil), "server_api_params.OrganizationChangedTips") - proto.RegisterType((*FriendApplication)(nil), "server_api_params.FriendApplication") - proto.RegisterType((*FromToUserID)(nil), "server_api_params.FromToUserID") - proto.RegisterType((*FriendApplicationTips)(nil), "server_api_params.FriendApplicationTips") - proto.RegisterType((*FriendApplicationApprovedTips)(nil), "server_api_params.FriendApplicationApprovedTips") - proto.RegisterType((*FriendApplicationRejectedTips)(nil), "server_api_params.FriendApplicationRejectedTips") - proto.RegisterType((*FriendAddedTips)(nil), "server_api_params.FriendAddedTips") - proto.RegisterType((*FriendDeletedTips)(nil), "server_api_params.FriendDeletedTips") - proto.RegisterType((*BlackAddedTips)(nil), "server_api_params.BlackAddedTips") - proto.RegisterType((*BlackDeletedTips)(nil), "server_api_params.BlackDeletedTips") - proto.RegisterType((*FriendInfoChangedTips)(nil), "server_api_params.FriendInfoChangedTips") - proto.RegisterType((*UserInfoUpdatedTips)(nil), "server_api_params.UserInfoUpdatedTips") - proto.RegisterType((*ConversationUpdateTips)(nil), "server_api_params.ConversationUpdateTips") - proto.RegisterType((*ConversationSetPrivateTips)(nil), "server_api_params.ConversationSetPrivateTips") - proto.RegisterType((*DeleteMessageTips)(nil), "server_api_params.DeleteMessageTips") - proto.RegisterType((*RequestPagination)(nil), "server_api_params.RequestPagination") - proto.RegisterType((*ResponsePagination)(nil), "server_api_params.ResponsePagination") - proto.RegisterType((*SignalReq)(nil), "server_api_params.SignalReq") - proto.RegisterType((*SignalResp)(nil), "server_api_params.SignalResp") - proto.RegisterType((*InvitationInfo)(nil), "server_api_params.InvitationInfo") - proto.RegisterType((*ParticipantMetaData)(nil), "server_api_params.ParticipantMetaData") - proto.RegisterType((*SignalInviteReq)(nil), "server_api_params.SignalInviteReq") - proto.RegisterType((*SignalInviteReply)(nil), "server_api_params.SignalInviteReply") - proto.RegisterType((*SignalInviteInGroupReq)(nil), "server_api_params.SignalInviteInGroupReq") - proto.RegisterType((*SignalInviteInGroupReply)(nil), "server_api_params.SignalInviteInGroupReply") - proto.RegisterType((*SignalCancelReq)(nil), "server_api_params.SignalCancelReq") - proto.RegisterType((*SignalCancelReply)(nil), "server_api_params.SignalCancelReply") - proto.RegisterType((*SignalAcceptReq)(nil), "server_api_params.SignalAcceptReq") - proto.RegisterType((*SignalAcceptReply)(nil), "server_api_params.SignalAcceptReply") - proto.RegisterType((*SignalHungUpReq)(nil), "server_api_params.SignalHungUpReq") - proto.RegisterType((*SignalHungUpReply)(nil), "server_api_params.SignalHungUpReply") - proto.RegisterType((*SignalRejectReq)(nil), "server_api_params.SignalRejectReq") - proto.RegisterType((*SignalRejectReply)(nil), "server_api_params.SignalRejectReply") - proto.RegisterType((*DelMsgListReq)(nil), "server_api_params.DelMsgListReq") - proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") -} - -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_5ad487361de288a1) } - -var fileDescriptor_ws_5ad487361de288a1 = []byte{ - // 3252 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, - 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, 0x28, 0x8a, 0x10, - 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x1c, 0x11, 0x17, 0xc4, 0x99, 0x2b, 0x07, 0x24, 0x24, - 0xd0, 0xab, 0x7a, 0xdd, 0xfd, 0x5e, 0x77, 0x8f, 0x3d, 0x3b, 0xb2, 0xb2, 0x1b, 0x2d, 0xb7, 0xa9, - 0xea, 0x57, 0xf5, 0xea, 0xd5, 0x57, 0xef, 0x55, 0xbd, 0x9f, 0x81, 0x85, 0xd8, 0x39, 0x7c, 0xef, - 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, - 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, - 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, - 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x9f, 0x3b, 0xf6, 0x90, 0x75, 0x75, 0xfc, 0x56, 0x30, - 0x0c, 0x13, 0x66, 0xfd, 0x20, 0x71, 0xf7, 0xdd, 0xbe, 0x9d, 0xb8, 0x81, 0xdf, 0x6d, 0x60, 0x03, - 0x85, 0xc7, 0xdb, 0xb8, 0x7e, 0x12, 0x05, 0x4e, 0xda, 0xc7, 0x36, 0x53, 0xd4, 0x46, 0xe6, 0xf1, - 0xfe, 0xf7, 0xed, 0x3e, 0xbb, 0x6d, 0xdd, 0xe8, 0x36, 0xa9, 0x7f, 0x41, 0x1a, 0xab, 0xd0, 0x09, - 0xee, 0xfa, 0x2c, 0xba, 0x1d, 0xb3, 0xe8, 0xfa, 0x56, 0xb7, 0x85, 0x5f, 0x65, 0x96, 0x71, 0x11, - 0xa0, 0x1f, 0x31, 0x3b, 0x61, 0xb7, 0xdc, 0x21, 0xeb, 0x4e, 0xaf, 0x6a, 0xcf, 0xce, 0x59, 0x12, - 0x87, 0x6b, 0x18, 0xb2, 0xe1, 0x1e, 0x8b, 0x36, 0x83, 0xd4, 0x4f, 0xba, 0x33, 0xd8, 0x40, 0x66, - 0x19, 0xf3, 0xa0, 0xb3, 0x7b, 0xdd, 0x36, 0xaa, 0xd6, 0xd9, 0x3d, 0x63, 0x19, 0x5a, 0x71, 0x62, - 0x27, 0x69, 0xdc, 0x85, 0x55, 0xed, 0xd9, 0xa6, 0x25, 0x28, 0x63, 0x0d, 0xe6, 0x50, 0x6f, 0x90, - 0x59, 0xd3, 0x41, 0x11, 0x95, 0x99, 0x7b, 0xec, 0xd6, 0xfd, 0x90, 0x75, 0x67, 0x51, 0x41, 0xc1, - 0x30, 0xff, 0xaa, 0xc3, 0x39, 0xf4, 0xfb, 0x36, 0x1a, 0x70, 0x25, 0xf5, 0xbc, 0x53, 0x10, 0x58, - 0x86, 0x56, 0x4a, 0xdd, 0x91, 0xfb, 0x05, 0xc5, 0xfb, 0x89, 0x02, 0x8f, 0xdd, 0x60, 0xc7, 0xcc, - 0x43, 0xc7, 0x37, 0xad, 0x82, 0x61, 0xac, 0xc0, 0xcc, 0x9d, 0xc0, 0xf5, 0xd1, 0x27, 0x53, 0xf8, - 0x31, 0xa7, 0xf9, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, 0xb4, - 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0xea, 0x74, 0x1a, 0xf5, - 0x96, 0xb8, 0x1c, 0x0f, 0xde, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, 0xc3, - 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, 0x1c, - 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0x38, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, 0x7e, - 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, - 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, 0x28, - 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, 0x0f, - 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, 0x4a, - 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, 0x62, - 0x40, 0x33, 0xb9, 0xef, 0xd5, 0x39, 0xd6, 0xae, 0xcc, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, 0x98, - 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x72, 0x6b, 0xd5, 0xc9, 0xbd, - 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, 0xbd, - 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x59, 0x06, 0x2f, - 0x65, 0x28, 0x59, 0x52, 0x73, 0x3e, 0xb3, 0x6c, 0xc7, 0x11, 0x01, 0xdc, 0xa4, 0x99, 0x95, 0x33, - 0x6a, 0xe2, 0xb7, 0x75, 0x42, 0xfc, 0x4e, 0xe7, 0x41, 0xf1, 0x4f, 0x0d, 0xda, 0x1b, 0x9e, 0xdd, - 0x3f, 0x1c, 0x73, 0xe8, 0xea, 0x10, 0xf5, 0xca, 0x10, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0x0d, - 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x33, 0x35, 0xa3, 0x54, 0x27, 0x85, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, - 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, 0x87, 0xfb, 0x17, 0x1d, 0x66, 0x71, 0xa1, 0xb3, - 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, 0xd2, 0xcc, 0x54, 0x6d, 0x5c, 0x53, 0x73, 0x11, - 0xe3, 0x15, 0xb1, 0xac, 0xa2, 0xbc, 0x8e, 0xf2, 0x17, 0x6a, 0xe4, 0xf3, 0x9c, 0x66, 0x15, 0xcd, - 0x79, 0x0a, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, 0x8b, 0x53, 0x2f, 0x11, 0xab, 0xa5, 0xc2, 0xa3, - 0x48, 0x3b, 0xda, 0x8e, 0x07, 0x22, 0x41, 0x09, 0x8a, 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, - 0x82, 0xc1, 0x27, 0x6a, 0xc4, 0x8e, 0x10, 0x21, 0x9a, 0x56, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, - 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, 0x4c, 0x12, 0xa7, 0x9c, 0x98, 0xcc, 0xbf, - 0x35, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0x8b, 0x3c, 0xce, 0x83, 0xa1, 0x12, 0x45, 0x12, 0x87, - 0x5b, 0xc1, 0xa9, 0x1d, 0x75, 0xa1, 0x51, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x45, 0x59, 0x70, 0x64, - 0x56, 0xd6, 0xcb, 0x55, 0x79, 0xe1, 0x91, 0x38, 0x7c, 0x29, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, - 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, - 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x25, 0x39, 0x5d, 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, - 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0x52, 0xbd, - 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, 0xba, 0xf3, 0x23, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, - 0x95, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x86, 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, - 0x55, 0x78, 0x72, 0x9e, 0xd0, 0xd5, 0x3c, 0x61, 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, - 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, 0xe6, 0x79, 0x20, 0x88, 0x1c, 0x91, 0x39, 0x9a, - 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0x41, 0xd3, 0xa2, 0x75, 0x5d, 0xe5, 0x9e, 0x5a, 0x83, - 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x27, 0x1d, 0x8a, 0x70, 0xaf, 0xf0, 0xb9, 0x53, - 0xa9, 0x38, 0xe3, 0x8d, 0x28, 0xd5, 0x14, 0x8c, 0x72, 0x55, 0x60, 0xbe, 0xaf, 0xc3, 0xe2, 0xcd, - 0x68, 0x60, 0xfb, 0xee, 0xb7, 0xb1, 0xdc, 0xc4, 0x05, 0x7c, 0x92, 0x94, 0xbb, 0x0a, 0x1d, 0xe6, - 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x4a, 0xca, 0x4d, - 0x25, 0x29, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, - 0xc3, 0xec, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x12, 0xf5, 0x4c, 0x6d, 0xa2, 0x6e, 0xcb, 0x89, 0x5a, - 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0x83, 0x06, 0x8b, 0x85, 0xbb, 0xa9, - 0x06, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, - 0x69, 0x41, 0xec, 0x4a, 0xf5, 0x7e, 0x4e, 0xf3, 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, - 0xba, 0x5b, 0x4a, 0xd5, 0x5d, 0xce, 0xa3, 0xbf, 0xd5, 0xe0, 0x3c, 0x47, 0xb9, 0x32, 0x8c, 0x9b, - 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, - 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x4e, - 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x9e, 0x6f, 0xb8, - 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, - 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x1f, 0x2c, 0x76, 0x34, 0x32, - 0x86, 0x78, 0x9d, 0x83, 0x85, 0x82, 0x1b, 0xf8, 0x79, 0x08, 0xc9, 0x2c, 0x3e, 0xad, 0x62, 0xd2, - 0xd3, 0x6d, 0xac, 0x36, 0x78, 0x0a, 0x15, 0xa4, 0xf1, 0x2d, 0x98, 0xc5, 0x1c, 0x2e, 0xba, 0xe9, - 0x4e, 0xe1, 0x00, 0x5e, 0xab, 0xad, 0x1a, 0x6a, 0xad, 0xa2, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x49, - 0x74, 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x26, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, - 0x31, 0x0e, 0xfe, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, - 0xc2, 0x66, 0x8b, 0x1a, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x07, 0x26, 0x8f, 0x51, 0x53, - 0xc6, 0x68, 0xbe, 0x05, 0x9d, 0xed, 0x78, 0xb0, 0x65, 0x27, 0x36, 0x36, 0x7c, 0x0d, 0x3a, 0xc3, - 0x82, 0xc4, 0xc6, 0xf5, 0xfd, 0x09, 0x21, 0x4b, 0x6e, 0x6e, 0xfe, 0x59, 0x87, 0x6e, 0xbd, 0x2b, - 0xe2, 0x90, 0xdb, 0xc0, 0xa2, 0x68, 0x33, 0x70, 0x18, 0x0e, 0xad, 0x69, 0x65, 0x24, 0xc7, 0x8e, - 0x45, 0x11, 0xcf, 0x61, 0xa2, 0xc8, 0x26, 0xca, 0xb8, 0x04, 0x53, 0x5e, 0x06, 0xcb, 0xc9, 0x56, - 0x60, 0x3b, 0x63, 0x08, 0x8b, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xf5, 0xb1, 0x31, 0x8b, 0x43, - 0x02, 0x4d, 0xd2, 0x41, 0xc0, 0x55, 0x54, 0xaf, 0xf4, 0xe1, 0x89, 0xda, 0xa6, 0x35, 0x00, 0x7e, - 0x49, 0x05, 0xf0, 0xe2, 0xe8, 0xa1, 0x94, 0x41, 0x0c, 0xc1, 0xb8, 0xca, 0x92, 0x6d, 0xfb, 0xde, - 0xba, 0xef, 0x6c, 0xbb, 0x7e, 0x8f, 0x1d, 0xf1, 0x68, 0x5f, 0x85, 0x8e, 0xd8, 0x9e, 0xe7, 0x30, - 0xb5, 0x2d, 0x99, 0x35, 0x72, 0xd7, 0x5e, 0x9a, 0x0f, 0x8d, 0xca, 0x7c, 0x30, 0x2f, 0xc3, 0xac, - 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x5e, 0x8f, 0x1d, 0xe1, 0x80, 0xe6, 0x2c, 0x41, 0x21, 0x1f, 0x5b, - 0x88, 0xbd, 0x81, 0xa0, 0xcc, 0x3f, 0xe9, 0x70, 0xae, 0x62, 0x72, 0x1c, 0x3e, 0xa8, 0x1e, 0x39, - 0x5e, 0x1a, 0xa3, 0xe2, 0x65, 0x4a, 0x89, 0x97, 0x43, 0x58, 0x22, 0x90, 0xa4, 0xae, 0xbb, 0x4d, - 0x0c, 0x80, 0xd7, 0xeb, 0x4a, 0xf5, 0xaa, 0x91, 0x02, 0x7b, 0x89, 0x4b, 0xe0, 0x57, 0xf5, 0xae, - 0x30, 0x58, 0xae, 0x6f, 0x5c, 0x03, 0xff, 0xcb, 0x2a, 0xfc, 0x9f, 0xae, 0x83, 0x5f, 0xb6, 0x44, - 0xc2, 0xff, 0x08, 0x16, 0xf8, 0xa2, 0xda, 0x63, 0xbe, 0xb3, 0x1d, 0x0f, 0xd0, 0x91, 0xab, 0xd0, - 0x21, 0xf9, 0xed, 0x78, 0x50, 0x6c, 0xdd, 0x24, 0x16, 0x6f, 0xd1, 0xf7, 0x5c, 0xbe, 0x78, 0x62, - 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x9e, 0x20, 0x63, 0x26, 0x4e, 0x32, 0xb8, 0x77, 0x1b, 0x56, 0x4e, - 0x9b, 0x7f, 0x6f, 0xc2, 0xb4, 0x88, 0x46, 0x4c, 0x8a, 0x7c, 0xb7, 0x9c, 0x2f, 0xab, 0x44, 0x51, - 0x5d, 0xdb, 0x3f, 0x2e, 0xc2, 0x8b, 0x28, 0xf9, 0x18, 0xa9, 0xa1, 0x1e, 0x23, 0x95, 0x6c, 0x9a, - 0xaa, 0xda, 0x54, 0x1a, 0x57, 0xb3, 0x3a, 0x2e, 0x5e, 0xc6, 0x61, 0x65, 0xb3, 0xeb, 0xd9, 0xc9, - 0x7e, 0x10, 0x0d, 0xc5, 0xe6, 0xb7, 0x69, 0x55, 0xf8, 0xbc, 0x74, 0x24, 0x5e, 0x5e, 0xfb, 0x53, - 0x0a, 0x2f, 0x71, 0x79, 0xa5, 0x4d, 0x9c, 0x6c, 0x0f, 0x40, 0xa7, 0x0e, 0x2a, 0x93, 0x6c, 0x8b, - 0x63, 0x37, 0xf0, 0xb1, 0x0a, 0xa5, 0x52, 0x5f, 0x66, 0xf1, 0x91, 0x0f, 0xe3, 0xc1, 0x95, 0x28, - 0x18, 0x8a, 0xb3, 0x87, 0x8c, 0xc4, 0x91, 0x07, 0x7e, 0x92, 0x55, 0xb0, 0x1d, 0x92, 0x95, 0x58, - 0x5c, 0x56, 0x90, 0x58, 0xe7, 0xcf, 0x5a, 0x19, 0xc9, 0x63, 0x29, 0x66, 0x47, 0xa2, 0x78, 0xe7, - 0x3f, 0x15, 0xe4, 0x16, 0x54, 0xe4, 0x4a, 0xd5, 0xd8, 0x22, 0x7e, 0x95, 0xab, 0xb1, 0xa2, 0xc4, - 0x59, 0x52, 0x4a, 0x9c, 0x75, 0x98, 0x0e, 0x42, 0x3e, 0xfd, 0xe3, 0xae, 0x81, 0xd3, 0xe5, 0xb3, - 0xa3, 0x17, 0xa8, 0x4b, 0x37, 0xa9, 0x25, 0x4d, 0x8c, 0x4c, 0xce, 0xb8, 0x01, 0x0b, 0xc1, 0xfe, - 0xbe, 0xe7, 0xfa, 0x6c, 0x37, 0x8d, 0x0f, 0x70, 0x93, 0x7c, 0x0e, 0x83, 0xdd, 0xac, 0x2b, 0x22, - 0xd4, 0x96, 0x56, 0x59, 0x94, 0x57, 0x7e, 0x76, 0x42, 0x9b, 0x1c, 0x5c, 0xe0, 0xce, 0xe3, 0x02, - 0xa7, 0xf0, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0x94, 0x9a, 0x69, 0x77, 0x5e, 0x9e, 0x76, 0x33, 0xf2, - 0xac, 0xfa, 0x91, 0x06, 0x0b, 0x25, 0x23, 0x78, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, - 0xf7, 0x31, 0x0e, 0x8b, 0xfb, 0x22, 0xcc, 0xf1, 0xb7, 0xa8, 0x08, 0x1b, 0xf9, 0xe9, 0x94, 0x09, - 0xb3, 0xee, 0xcd, 0x1e, 0x57, 0xd4, 0x0b, 0x52, 0xdf, 0xc9, 0x4f, 0x98, 0x25, 0x1e, 0x0f, 0x33, - 0xf7, 0x66, 0x6f, 0xc3, 0x76, 0x06, 0x8c, 0xce, 0x81, 0x9b, 0x68, 0x93, 0xca, 0x34, 0x1d, 0x98, - 0xb9, 0xe5, 0x86, 0xf1, 0x66, 0x30, 0x1c, 0x72, 0xb0, 0x1c, 0x96, 0xf0, 0x8a, 0x5b, 0xc3, 0x98, - 0x10, 0x14, 0x0f, 0x27, 0x87, 0xed, 0xdb, 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xe4, 0x96, 0x58, 0x78, - 0x02, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, 0x9d, 0x12, 0xc7, 0xfc, 0xa3, 0x0e, 0x8b, 0xb8, 0x76, - 0x6d, 0x62, 0x68, 0x38, 0x28, 0xf4, 0x22, 0x34, 0x71, 0xaa, 0x8a, 0xda, 0xef, 0xe4, 0xb3, 0x0d, - 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, 0xc1, 0x48, 0x0b, 0xdb, 0x33, 0xa3, 0x84, 0xd4, 0xc3, - 0x66, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, 0x45, 0x7d, 0x48, 0x69, 0x7e, 0x5c, 0x1d, 0x92, 0x24, - 0x77, 0x6e, 0x9e, 0xc1, 0xf2, 0x13, 0xe7, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, - 0x66, 0x87, 0x5c, 0x88, 0xc1, 0xf8, 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x69, 0xc2, 0x8d, 0xfc, 0x6b, - 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0xe6, 0xd6, - 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, 0x36, 0x44, 0xe6, 0xcf, 0x35, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, - 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, 0x8b, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, - 0x11, 0xb0, 0x8f, 0x71, 0x8e, 0x56, 0xc8, 0x48, 0x47, 0x22, 0x0d, 0xf9, 0x48, 0xc4, 0xfc, 0x40, - 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, - 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0xa1, 0x06, 0x17, 0xca, 0x6e, - 0x5d, 0xef, 0xf7, 0x59, 0xf8, 0x30, 0xa7, 0x94, 0x72, 0x24, 0x34, 0x55, 0x3a, 0x12, 0xaa, 0x35, - 0xd9, 0x62, 0x77, 0x58, 0xff, 0xd1, 0x35, 0xf9, 0x7b, 0x3a, 0x7c, 0xf2, 0x6a, 0x3e, 0xf1, 0x6e, - 0x45, 0xb6, 0x1f, 0xef, 0xb3, 0x28, 0x7a, 0x88, 0xf6, 0xde, 0x80, 0x39, 0x9f, 0xdd, 0x2d, 0x6c, - 0x12, 0xd3, 0x71, 0x5c, 0x35, 0xaa, 0xf0, 0x78, 0x6b, 0x97, 0xf9, 0x1f, 0x0d, 0x16, 0x49, 0xcf, - 0x5b, 0x6e, 0xff, 0xf0, 0x21, 0x0e, 0x7e, 0x07, 0xe6, 0x0f, 0xd1, 0x02, 0x4e, 0x4d, 0xb0, 0x6c, - 0x97, 0xa4, 0xc7, 0x1c, 0xfe, 0x7f, 0x35, 0x58, 0x22, 0x45, 0xd7, 0xfd, 0x63, 0xf7, 0x61, 0x06, - 0xeb, 0x2e, 0x2c, 0xb8, 0x64, 0xc2, 0x84, 0x0e, 0x28, 0x8b, 0x8f, 0xe9, 0x81, 0xdf, 0x68, 0xb0, - 0x40, 0x9a, 0xde, 0xf0, 0x13, 0x16, 0x4d, 0x3c, 0xfe, 0x6b, 0xd0, 0x61, 0x7e, 0x12, 0xd9, 0xfe, - 0x24, 0x2b, 0xa4, 0x2c, 0x3a, 0xe6, 0x22, 0xf9, 0x81, 0x06, 0x06, 0xaa, 0xda, 0x72, 0xe3, 0xa1, - 0x1b, 0xc7, 0x0f, 0x11, 0xba, 0xf1, 0x0c, 0xfe, 0x89, 0x0e, 0xe7, 0x25, 0x2d, 0xdb, 0x69, 0xf2, - 0xa8, 0x9b, 0x6c, 0x6c, 0x41, 0x9b, 0xd7, 0x08, 0xf2, 0x5d, 0xe3, 0xb8, 0x1d, 0x15, 0x82, 0xbc, - 0x8a, 0x45, 0xa2, 0xc7, 0xfa, 0x81, 0xef, 0xc4, 0x58, 0x1c, 0xcd, 0x59, 0x0a, 0x8f, 0x2f, 0x43, - 0x2b, 0x92, 0x9a, 0x4d, 0xdb, 0xef, 0x33, 0xef, 0xb1, 0x71, 0x91, 0xf9, 0x4b, 0x0d, 0xe6, 0xa9, - 0xc9, 0xa3, 0x3f, 0x64, 0x9e, 0xeb, 0x29, 0x90, 0x3f, 0x36, 0x28, 0xf1, 0xf0, 0x5a, 0x96, 0xb4, - 0xc8, 0x75, 0xf5, 0xa3, 0x1b, 0x5a, 0xd7, 0xa0, 0xd3, 0x3f, 0xb0, 0xfd, 0xc1, 0x44, 0xc1, 0x25, - 0x8b, 0x9a, 0x09, 0x3c, 0x29, 0x1f, 0xaf, 0x6f, 0xd2, 0x27, 0x1c, 0xfe, 0x4b, 0xa5, 0xa1, 0x9c, - 0xf8, 0x96, 0xe0, 0xc1, 0x9c, 0x7e, 0x08, 0x4b, 0x74, 0xa7, 0x2b, 0xd5, 0x84, 0x46, 0x17, 0xa6, - 0x6d, 0x87, 0x0e, 0x19, 0x34, 0x14, 0xca, 0x48, 0xf5, 0xb6, 0x5e, 0x3c, 0xc8, 0x2a, 0x6e, 0xeb, - 0x2f, 0x02, 0xd8, 0x8e, 0xf3, 0x4e, 0x10, 0x39, 0xae, 0x9f, 0x15, 0xf8, 0x12, 0xc7, 0x7c, 0x13, - 0x66, 0xaf, 0x44, 0xc1, 0xf0, 0x96, 0x74, 0x3b, 0x7b, 0xe2, 0xfd, 0xb1, 0x7c, 0xb3, 0xab, 0xab, - 0x37, 0xbb, 0xe6, 0x37, 0xe1, 0x89, 0x8a, 0xe1, 0xe8, 0xac, 0x4d, 0xba, 0x74, 0xce, 0x3a, 0x11, - 0x21, 0x53, 0x77, 0xea, 0x26, 0xdb, 0x62, 0x29, 0x42, 0xe6, 0x77, 0x35, 0x78, 0xaa, 0xa2, 0x7e, - 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, - 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, 0x88, 0x5f, 0x68, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, - 0xcb, 0xd0, 0xa2, 0x07, 0x2b, 0xa2, 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x1e, 0xda, 0x58, 0xa2, 0x71, - 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x52, 0x22, 0x04, 0xcc, 0xaf, - 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0x9e, 0x29, 0x7c, - 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, - 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, - 0x85, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0xd7, 0x84, 0x28, 0x92, 0x49, - 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, - 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, - 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0x3a, 0x08, - 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xb9, 0x32, 0xf2, 0x2a, 0xd1, - 0xec, 0xc1, 0x92, 0x78, 0x32, 0xb3, 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, - 0xc8, 0x9e, 0xcc, 0xd1, 0xa5, 0x98, 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, - 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, - 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, 0xde, 0x8f, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, - 0x03, 0x74, 0x89, 0x63, 0xfe, 0xb4, 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, - 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, 0xba, 0x03, 0x5d, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, - 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, - 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, - 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, - 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, - 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, - 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, - 0xe6, 0xfb, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, - 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, - 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, - 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, - 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd4, 0x61, 0x1e, 0x5d, 0x46, 0x77, 0xac, 0xfe, - 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x05, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, 0x60, - 0xd2, 0x65, 0x88, 0x8e, 0x97, 0x21, 0xd5, 0x0f, 0x78, 0xfd, 0x93, 0xc6, 0x49, 0x30, 0xdc, 0xb2, - 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x39, 0x37, 0x55, 0x79, 0xe3, 0x1d, 0x05, 0xc1, 0x30, - 0xbf, 0x75, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xaf, - 0xa4, 0x1c, 0xd7, 0xc6, 0x2b, 0x2d, 0xf1, 0x84, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xd1, 0x89, - 0x37, 0xd8, 0x05, 0xe7, 0xf4, 0xeb, 0x34, 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, - 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0x71, 0x0c, 0xca, 0x33, 0x4c, 0xed, 0xc1, 0x9e, 0x61, - 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x29, 0x6d, 0x3c, - 0xf0, 0x9b, 0x52, 0xf3, 0x07, 0x3a, 0x2c, 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, - 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, 0x59, 0x92, 0x50, 0xdd, 0x3d, 0x5d, 0x63, 0xf2, 0x7b, - 0xba, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, - 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, - 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x68, 0x5d, 0x90, 0xe6, 0x0f, 0x75, 0x58, 0xae, 0xcf, - 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, - 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xeb, 0xdc, 0x3f, 0x79, 0xa5, - 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xc3, 0x0e, 0x2a, 0x5c, 0x2b, 0xfc, - 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, 0xec, 0xef, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x58, - 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, - 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0xe5, - 0xe9, 0x99, 0x6e, 0x14, 0xcb, 0xef, 0xf3, 0xa6, 0xaa, 0xef, 0xf3, 0x36, 0x60, 0x5e, 0x36, 0x60, - 0x92, 0x97, 0x95, 0x1b, 0x17, 0xbe, 0xb1, 0x72, 0xe9, 0x79, 0xfa, 0x97, 0xe6, 0xab, 0x15, 0x27, - 0xee, 0xb5, 0xf0, 0x5f, 0x9b, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x59, 0x84, 0xce, - 0xc8, 0x39, 0x00, 0x00, -} diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 7c24f3078..e7fbfe7c5 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -238,6 +238,7 @@ message MsgData { map options = 18; OfflinePushInfo offlinePushInfo = 19; repeated string atUserIDList = 20; + repeated MsgData msgDataList = 21; } message OfflinePushInfo{ From 536d7e29570ef9cd8fccc886e04dc8e37ccabdc3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Jun 2022 10:32:21 +0800 Subject: [PATCH 085/256] ws pb --- pkg/proto/sdk_ws/ws.pb.go | 558 +++++++++++++++++++------------------- pkg/proto/sdk_ws/ws.proto | 1 + 2 files changed, 284 insertions(+), 275 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 6c768fcaa..184334751 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,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_5ad487361de288a1, []int{0} + return fileDescriptor_ws_df70a2fd28b03292, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,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_5ad487361de288a1, []int{1} + return fileDescriptor_ws_df70a2fd28b03292, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,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_5ad487361de288a1, []int{2} + return fileDescriptor_ws_df70a2fd28b03292, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,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_5ad487361de288a1, []int{3} + return fileDescriptor_ws_df70a2fd28b03292, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,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_5ad487361de288a1, []int{4} + return fileDescriptor_ws_df70a2fd28b03292, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,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_5ad487361de288a1, []int{5} + return fileDescriptor_ws_df70a2fd28b03292, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,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_5ad487361de288a1, []int{6} + return fileDescriptor_ws_df70a2fd28b03292, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,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_5ad487361de288a1, []int{7} + return fileDescriptor_ws_df70a2fd28b03292, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,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_5ad487361de288a1, []int{8} + return fileDescriptor_ws_df70a2fd28b03292, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,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_5ad487361de288a1, []int{9} + return fileDescriptor_ws_df70a2fd28b03292, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,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_5ad487361de288a1, []int{10} + return fileDescriptor_ws_df70a2fd28b03292, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,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_5ad487361de288a1, []int{11} + return fileDescriptor_ws_df70a2fd28b03292, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,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_5ad487361de288a1, []int{12} + return fileDescriptor_ws_df70a2fd28b03292, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1279,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_5ad487361de288a1, []int{13} + return fileDescriptor_ws_df70a2fd28b03292, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1338,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_5ad487361de288a1, []int{14} + return fileDescriptor_ws_df70a2fd28b03292, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1376,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_5ad487361de288a1, []int{15} + return fileDescriptor_ws_df70a2fd28b03292, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1417,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_5ad487361de288a1, []int{16} + return fileDescriptor_ws_df70a2fd28b03292, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1478,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_5ad487361de288a1, []int{17} + return fileDescriptor_ws_df70a2fd28b03292, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1531,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_5ad487361de288a1, []int{18} + return fileDescriptor_ws_df70a2fd28b03292, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1580,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_5ad487361de288a1, []int{19} + return fileDescriptor_ws_df70a2fd28b03292, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1648,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_5ad487361de288a1, []int{20} + return fileDescriptor_ws_df70a2fd28b03292, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1709,6 +1709,7 @@ type MsgData struct { Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` + MsgDataList []*MsgData `protobuf:"bytes,21,rep,name=msgDataList" json:"msgDataList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1718,7 +1719,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_5ad487361de288a1, []int{21} + return fileDescriptor_ws_df70a2fd28b03292, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1871,6 +1872,13 @@ func (m *MsgData) GetAtUserIDList() []string { return nil } +func (m *MsgData) GetMsgDataList() []*MsgData { + if m != nil { + return m.MsgDataList + } + return nil +} + type OfflinePushInfo struct { Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` Desc string `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"` @@ -1886,7 +1894,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_5ad487361de288a1, []int{22} + return fileDescriptor_ws_df70a2fd28b03292, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1954,7 +1962,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_5ad487361de288a1, []int{23} + return fileDescriptor_ws_df70a2fd28b03292, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2011,7 +2019,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_5ad487361de288a1, []int{24} + return fileDescriptor_ws_df70a2fd28b03292, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2080,7 +2088,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_5ad487361de288a1, []int{25} + return fileDescriptor_ws_df70a2fd28b03292, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2135,7 +2143,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_5ad487361de288a1, []int{26} + return fileDescriptor_ws_df70a2fd28b03292, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2191,7 +2199,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_5ad487361de288a1, []int{27} + return fileDescriptor_ws_df70a2fd28b03292, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2246,7 +2254,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_5ad487361de288a1, []int{28} + return fileDescriptor_ws_df70a2fd28b03292, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2301,7 +2309,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_5ad487361de288a1, []int{29} + return fileDescriptor_ws_df70a2fd28b03292, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2357,7 +2365,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_5ad487361de288a1, []int{30} + return fileDescriptor_ws_df70a2fd28b03292, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2420,7 +2428,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_5ad487361de288a1, []int{31} + return fileDescriptor_ws_df70a2fd28b03292, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2483,7 +2491,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_5ad487361de288a1, []int{32} + return fileDescriptor_ws_df70a2fd28b03292, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2545,7 +2553,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_5ad487361de288a1, []int{33} + return fileDescriptor_ws_df70a2fd28b03292, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2599,7 +2607,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_5ad487361de288a1, []int{34} + return fileDescriptor_ws_df70a2fd28b03292, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2655,7 +2663,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_5ad487361de288a1, []int{35} + return fileDescriptor_ws_df70a2fd28b03292, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2724,7 +2732,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_5ad487361de288a1, []int{36} + return fileDescriptor_ws_df70a2fd28b03292, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2785,7 +2793,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_5ad487361de288a1, []int{37} + return fileDescriptor_ws_df70a2fd28b03292, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2839,7 +2847,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_5ad487361de288a1, []int{38} + return fileDescriptor_ws_df70a2fd28b03292, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2894,7 +2902,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_5ad487361de288a1, []int{39} + return fileDescriptor_ws_df70a2fd28b03292, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2954,7 +2962,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_5ad487361de288a1, []int{40} + return fileDescriptor_ws_df70a2fd28b03292, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3001,7 +3009,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_5ad487361de288a1, []int{41} + return fileDescriptor_ws_df70a2fd28b03292, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3054,7 +3062,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_5ad487361de288a1, []int{42} + return fileDescriptor_ws_df70a2fd28b03292, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3100,7 +3108,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_5ad487361de288a1, []int{43} + return fileDescriptor_ws_df70a2fd28b03292, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3140,7 +3148,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_5ad487361de288a1, []int{44} + return fileDescriptor_ws_df70a2fd28b03292, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3187,7 +3195,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_5ad487361de288a1, []int{45} + return fileDescriptor_ws_df70a2fd28b03292, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3235,7 +3243,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_5ad487361de288a1, []int{46} + return fileDescriptor_ws_df70a2fd28b03292, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3288,7 +3296,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_5ad487361de288a1, []int{47} + return fileDescriptor_ws_df70a2fd28b03292, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3326,7 +3334,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_5ad487361de288a1, []int{48} + return fileDescriptor_ws_df70a2fd28b03292, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3364,7 +3372,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_5ad487361de288a1, []int{49} + return fileDescriptor_ws_df70a2fd28b03292, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3402,7 +3410,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_5ad487361de288a1, []int{50} + return fileDescriptor_ws_df70a2fd28b03292, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3441,7 +3449,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_5ad487361de288a1, []int{51} + return fileDescriptor_ws_df70a2fd28b03292, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3480,7 +3488,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_5ad487361de288a1, []int{52} + return fileDescriptor_ws_df70a2fd28b03292, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3520,7 +3528,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_5ad487361de288a1, []int{53} + return fileDescriptor_ws_df70a2fd28b03292, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3575,7 +3583,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_5ad487361de288a1, []int{54} + return fileDescriptor_ws_df70a2fd28b03292, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3629,7 +3637,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_5ad487361de288a1, []int{55} + return fileDescriptor_ws_df70a2fd28b03292, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3675,7 +3683,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_5ad487361de288a1, []int{56} + return fileDescriptor_ws_df70a2fd28b03292, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3728,7 +3736,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_5ad487361de288a1, []int{57} + return fileDescriptor_ws_df70a2fd28b03292, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3995,7 +4003,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_5ad487361de288a1, []int{58} + return fileDescriptor_ws_df70a2fd28b03292, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4263,7 +4271,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_5ad487361de288a1, []int{59} + return fileDescriptor_ws_df70a2fd28b03292, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4359,7 +4367,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_5ad487361de288a1, []int{60} + return fileDescriptor_ws_df70a2fd28b03292, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4414,7 +4422,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_5ad487361de288a1, []int{61} + return fileDescriptor_ws_df70a2fd28b03292, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4475,7 +4483,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_5ad487361de288a1, []int{62} + return fileDescriptor_ws_df70a2fd28b03292, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4530,7 +4538,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_5ad487361de288a1, []int{63} + return fileDescriptor_ws_df70a2fd28b03292, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4591,7 +4599,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_5ad487361de288a1, []int{64} + return fileDescriptor_ws_df70a2fd28b03292, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4646,7 +4654,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_5ad487361de288a1, []int{65} + return fileDescriptor_ws_df70a2fd28b03292, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4704,7 +4712,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_5ad487361de288a1, []int{66} + return fileDescriptor_ws_df70a2fd28b03292, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4739,7 +4747,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_5ad487361de288a1, []int{67} + return fileDescriptor_ws_df70a2fd28b03292, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4807,7 +4815,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_5ad487361de288a1, []int{68} + return fileDescriptor_ws_df70a2fd28b03292, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4861,7 +4869,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_5ad487361de288a1, []int{69} + return fileDescriptor_ws_df70a2fd28b03292, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4912,7 +4920,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_5ad487361de288a1, []int{70} + return fileDescriptor_ws_df70a2fd28b03292, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4947,7 +4955,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_5ad487361de288a1, []int{71} + return fileDescriptor_ws_df70a2fd28b03292, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5012,7 +5020,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_5ad487361de288a1, []int{72} + return fileDescriptor_ws_df70a2fd28b03292, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5046,7 +5054,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_5ad487361de288a1, []int{73} + return fileDescriptor_ws_df70a2fd28b03292, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5106,7 +5114,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_5ad487361de288a1, []int{74} + return fileDescriptor_ws_df70a2fd28b03292, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5222,212 +5230,212 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_5ad487361de288a1) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_df70a2fd28b03292) } -var fileDescriptor_ws_5ad487361de288a1 = []byte{ - // 3252 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_df70a2fd28b03292 = []byte{ + // 3260 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0xb8, 0x20, 0x71, 0x41, 0xa0, 0x28, 0x8a, 0x10, - 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x1c, 0x11, 0x17, 0xc4, 0x99, 0x2b, 0x07, 0x24, 0x24, - 0xd0, 0xab, 0x7a, 0xdd, 0xfd, 0x5e, 0x77, 0x8f, 0x3d, 0x3b, 0xb2, 0xb2, 0x1b, 0x2d, 0xb7, 0xa9, - 0xea, 0x57, 0xf5, 0xea, 0xd5, 0x57, 0xef, 0x55, 0xbd, 0x9f, 0x81, 0x85, 0xd8, 0x39, 0x7c, 0xef, + 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0x38, 0x80, 0xc4, 0x05, 0x81, 0xa2, 0x28, 0x42, + 0x20, 0x71, 0x40, 0x88, 0x03, 0x37, 0x2e, 0x70, 0x44, 0xdc, 0x38, 0x73, 0xe5, 0x80, 0x84, 0x04, + 0x7a, 0x55, 0xaf, 0xbb, 0xdf, 0xeb, 0xee, 0xb1, 0x67, 0x47, 0x56, 0x76, 0xa3, 0xe5, 0xe6, 0xaa, + 0x79, 0x55, 0xaf, 0xaa, 0xbe, 0x7a, 0xaf, 0xaa, 0xdf, 0x7b, 0x86, 0x85, 0xd8, 0x39, 0x7c, 0xef, 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, - 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x9f, 0x3b, 0xf6, 0x90, 0x75, 0x75, 0xfc, 0x56, 0x30, - 0x0c, 0x13, 0x66, 0xfd, 0x20, 0x71, 0xf7, 0xdd, 0xbe, 0x9d, 0xb8, 0x81, 0xdf, 0x6d, 0x60, 0x03, - 0x85, 0xc7, 0xdb, 0xb8, 0x7e, 0x12, 0x05, 0x4e, 0xda, 0xc7, 0x36, 0x53, 0xd4, 0x46, 0xe6, 0xf1, - 0xfe, 0xf7, 0xed, 0x3e, 0xbb, 0x6d, 0xdd, 0xe8, 0x36, 0xa9, 0x7f, 0x41, 0x1a, 0xab, 0xd0, 0x09, - 0xee, 0xfa, 0x2c, 0xba, 0x1d, 0xb3, 0xe8, 0xfa, 0x56, 0xb7, 0x85, 0x5f, 0x65, 0x96, 0x71, 0x11, - 0xa0, 0x1f, 0x31, 0x3b, 0x61, 0xb7, 0xdc, 0x21, 0xeb, 0x4e, 0xaf, 0x6a, 0xcf, 0xce, 0x59, 0x12, - 0x87, 0x6b, 0x18, 0xb2, 0xe1, 0x1e, 0x8b, 0x36, 0x83, 0xd4, 0x4f, 0xba, 0x33, 0xd8, 0x40, 0x66, - 0x19, 0xf3, 0xa0, 0xb3, 0x7b, 0xdd, 0x36, 0xaa, 0xd6, 0xd9, 0x3d, 0x63, 0x19, 0x5a, 0x71, 0x62, - 0x27, 0x69, 0xdc, 0x85, 0x55, 0xed, 0xd9, 0xa6, 0x25, 0x28, 0x63, 0x0d, 0xe6, 0x50, 0x6f, 0x90, - 0x59, 0xd3, 0x41, 0x11, 0x95, 0x99, 0x7b, 0xec, 0xd6, 0xfd, 0x90, 0x75, 0x67, 0x51, 0x41, 0xc1, - 0x30, 0xff, 0xaa, 0xc3, 0x39, 0xf4, 0xfb, 0x36, 0x1a, 0x70, 0x25, 0xf5, 0xbc, 0x53, 0x10, 0x58, - 0x86, 0x56, 0x4a, 0xdd, 0x91, 0xfb, 0x05, 0xc5, 0xfb, 0x89, 0x02, 0x8f, 0xdd, 0x60, 0xc7, 0xcc, - 0x43, 0xc7, 0x37, 0xad, 0x82, 0x61, 0xac, 0xc0, 0xcc, 0x9d, 0xc0, 0xf5, 0xd1, 0x27, 0x53, 0xf8, - 0x31, 0xa7, 0xf9, 0x37, 0xdf, 0xed, 0x1f, 0xfa, 0x1c, 0x52, 0x72, 0x77, 0x4e, 0xcb, 0x48, 0xb4, - 0x54, 0x24, 0x9e, 0x81, 0x79, 0x3b, 0x0c, 0xb7, 0x6d, 0x7f, 0xc0, 0x22, 0xea, 0x74, 0x1a, 0xf5, - 0x96, 0xb8, 0x1c, 0x0f, 0xde, 0x53, 0x2f, 0x48, 0xa3, 0x3e, 0x43, 0x77, 0x37, 0x2d, 0x89, 0xc3, - 0xf5, 0x04, 0x21, 0x8b, 0x24, 0x37, 0x92, 0xe7, 0x4b, 0x5c, 0x81, 0x0a, 0xe4, 0xa8, 0x70, 0x1c, - 0xd3, 0x84, 0xbd, 0xe1, 0x3b, 0x38, 0xa8, 0x8e, 0xc0, 0xb1, 0x60, 0x99, 0xdf, 0xd7, 0x60, 0x7e, - 0x37, 0xdd, 0xf3, 0xdc, 0x3e, 0xaa, 0xe0, 0x6e, 0x2d, 0x9c, 0xa7, 0x29, 0xce, 0x93, 0x5d, 0xa0, - 0x8f, 0x76, 0x41, 0x43, 0x75, 0xc1, 0x32, 0xb4, 0x06, 0xcc, 0x77, 0x58, 0x24, 0x5c, 0x2a, 0x28, - 0x61, 0x6a, 0x33, 0x33, 0xd5, 0xfc, 0xb1, 0x0e, 0x33, 0x1f, 0xb1, 0x09, 0xab, 0xd0, 0x09, 0x0f, - 0x02, 0x9f, 0xed, 0xa4, 0x3c, 0xac, 0x84, 0x2d, 0x32, 0xcb, 0x38, 0x0f, 0xcd, 0x3d, 0x37, 0x4a, - 0x0e, 0x10, 0xd7, 0x39, 0x8b, 0x08, 0xce, 0x65, 0x43, 0xdb, 0x25, 0x30, 0xdb, 0x16, 0x11, 0x62, - 0x40, 0x33, 0xb9, 0xef, 0xd5, 0x39, 0xd6, 0xae, 0xcc, 0xb1, 0x6a, 0x6c, 0x40, 0x5d, 0x6c, 0x98, - 0xff, 0xd6, 0x00, 0xae, 0x44, 0x2e, 0xf3, 0x1d, 0x74, 0x4d, 0x69, 0x72, 0x6b, 0xd5, 0xc9, 0xbd, - 0x0c, 0xad, 0x88, 0x0d, 0xed, 0xe8, 0x30, 0x0b, 0x7e, 0xa2, 0x4a, 0x06, 0x35, 0x2a, 0x06, 0xbd, - 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xaa, 0xce, 0x8b, 0x9f, 0xba, 0x54, 0x59, 0x06, 0x2f, - 0x65, 0x28, 0x59, 0x52, 0x73, 0x3e, 0xb3, 0x6c, 0xc7, 0x11, 0x01, 0xdc, 0xa4, 0x99, 0x95, 0x33, - 0x6a, 0xe2, 0xb7, 0x75, 0x42, 0xfc, 0x4e, 0xe7, 0x41, 0xf1, 0x4f, 0x0d, 0xda, 0x1b, 0x9e, 0xdd, - 0x3f, 0x1c, 0x73, 0xe8, 0xea, 0x10, 0xf5, 0xca, 0x10, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0x0d, - 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x33, 0x35, 0xa3, 0x54, 0x27, 0x85, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, - 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, 0x87, 0xfb, 0x17, 0x1d, 0x66, 0x71, 0xa1, 0xb3, - 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, 0xd2, 0xcc, 0x54, 0x6d, 0x5c, 0x53, 0x73, 0x11, - 0xe3, 0x15, 0xb1, 0xac, 0xa2, 0xbc, 0x8e, 0xf2, 0x17, 0x6a, 0xe4, 0xf3, 0x9c, 0x66, 0x15, 0xcd, - 0x79, 0x0a, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, 0x8b, 0x53, 0x2f, 0x11, 0xab, 0xa5, 0xc2, 0xa3, - 0x48, 0x3b, 0xda, 0x8e, 0x07, 0x22, 0x41, 0x09, 0x8a, 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, - 0x82, 0xc1, 0x27, 0x6a, 0xc4, 0x8e, 0x10, 0x21, 0x9a, 0x56, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, - 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, 0x4c, 0x12, 0xa7, 0x9c, 0x98, 0xcc, 0xbf, - 0x35, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0x8b, 0x3c, 0xce, 0x83, 0xa1, 0x12, 0x45, 0x12, 0x87, - 0x5b, 0xc1, 0xa9, 0x1d, 0x75, 0xa1, 0x51, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x45, 0x59, 0x70, 0x64, - 0x56, 0xd6, 0xcb, 0x55, 0x79, 0xe1, 0x91, 0x38, 0x7c, 0x29, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, - 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, - 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x25, 0x39, 0x5d, 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, - 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0x52, 0xbd, - 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, 0xba, 0xf3, 0x23, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, - 0x95, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x86, 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, - 0x55, 0x78, 0x72, 0x9e, 0xd0, 0xd5, 0x3c, 0x61, 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, - 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, 0xe6, 0x79, 0x20, 0x88, 0x1c, 0x91, 0x39, 0x9a, - 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0x41, 0xd3, 0xa2, 0x75, 0x5d, 0xe5, 0x9e, 0x5a, 0x83, - 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x27, 0x1d, 0x8a, 0x70, 0xaf, 0xf0, 0xb9, 0x53, - 0xa9, 0x38, 0xe3, 0x8d, 0x28, 0xd5, 0x14, 0x8c, 0x72, 0x55, 0x60, 0xbe, 0xaf, 0xc3, 0xe2, 0xcd, - 0x68, 0x60, 0xfb, 0xee, 0xb7, 0xb1, 0xdc, 0xc4, 0x05, 0x7c, 0x92, 0x94, 0xbb, 0x0a, 0x1d, 0xe6, - 0x0f, 0x3c, 0x37, 0x3e, 0xd8, 0x29, 0xfc, 0x26, 0xb3, 0x64, 0x67, 0x4f, 0x8d, 0x4a, 0xca, 0x4d, - 0x25, 0x29, 0x2f, 0x43, 0x6b, 0x18, 0xec, 0xb9, 0x5e, 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, - 0xc3, 0xec, 0x9c, 0xc7, 0x7c, 0xc6, 0x28, 0x12, 0xf5, 0x4c, 0x6d, 0xa2, 0x6e, 0xcb, 0x89, 0x5a, - 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, 0xfa, 0x83, 0x06, 0x8b, 0x85, 0xbb, 0xa9, - 0x06, 0x1d, 0xe9, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, - 0x69, 0x41, 0xec, 0x4a, 0xf5, 0x7e, 0x4e, 0xf3, 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, - 0xba, 0x5b, 0x4a, 0xd5, 0x5d, 0xce, 0xa3, 0xbf, 0xd5, 0xe0, 0x3c, 0x47, 0xb9, 0x32, 0x8c, 0x9b, - 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, - 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x4e, - 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x9e, 0x6f, 0xb8, - 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, - 0xdb, 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x1f, 0x2c, 0x76, 0x34, 0x32, - 0x86, 0x78, 0x9d, 0x83, 0x85, 0x82, 0x1b, 0xf8, 0x79, 0x08, 0xc9, 0x2c, 0x3e, 0xad, 0x62, 0xd2, - 0xd3, 0x6d, 0xac, 0x36, 0x78, 0x0a, 0x15, 0xa4, 0xf1, 0x2d, 0x98, 0xc5, 0x1c, 0x2e, 0xba, 0xe9, - 0x4e, 0xe1, 0x00, 0x5e, 0xab, 0xad, 0x1a, 0x6a, 0xad, 0xa2, 0x6a, 0x40, 0xd0, 0x6f, 0xf8, 0x49, - 0x74, 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x26, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, - 0x31, 0x0e, 0xfe, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, - 0xc2, 0x66, 0x8b, 0x1a, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x07, 0x26, 0x8f, 0x51, 0x53, - 0xc6, 0x68, 0xbe, 0x05, 0x9d, 0xed, 0x78, 0xb0, 0x65, 0x27, 0x36, 0x36, 0x7c, 0x0d, 0x3a, 0xc3, - 0x82, 0xc4, 0xc6, 0xf5, 0xfd, 0x09, 0x21, 0x4b, 0x6e, 0x6e, 0xfe, 0x59, 0x87, 0x6e, 0xbd, 0x2b, - 0xe2, 0x90, 0xdb, 0xc0, 0xa2, 0x68, 0x33, 0x70, 0x18, 0x0e, 0xad, 0x69, 0x65, 0x24, 0xc7, 0x8e, - 0x45, 0x11, 0xcf, 0x61, 0xa2, 0xc8, 0x26, 0xca, 0xb8, 0x04, 0x53, 0x5e, 0x06, 0xcb, 0xc9, 0x56, - 0x60, 0x3b, 0x63, 0x08, 0x8b, 0xe8, 0x5d, 0x69, 0x40, 0x02, 0xb3, 0xf5, 0xb1, 0x31, 0x8b, 0x43, - 0x02, 0x4d, 0xd2, 0x41, 0xc0, 0x55, 0x54, 0xaf, 0xf4, 0xe1, 0x89, 0xda, 0xa6, 0x35, 0x00, 0x7e, - 0x49, 0x05, 0xf0, 0xe2, 0xe8, 0xa1, 0x94, 0x41, 0x0c, 0xc1, 0xb8, 0xca, 0x92, 0x6d, 0xfb, 0xde, - 0xba, 0xef, 0x6c, 0xbb, 0x7e, 0x8f, 0x1d, 0xf1, 0x68, 0x5f, 0x85, 0x8e, 0xd8, 0x9e, 0xe7, 0x30, - 0xb5, 0x2d, 0x99, 0x35, 0x72, 0xd7, 0x5e, 0x9a, 0x0f, 0x8d, 0xca, 0x7c, 0x30, 0x2f, 0xc3, 0xac, - 0xdc, 0x1d, 0x26, 0x11, 0xfb, 0x5e, 0x8f, 0x1d, 0xe1, 0x80, 0xe6, 0x2c, 0x41, 0x21, 0x1f, 0x5b, - 0x88, 0xbd, 0x81, 0xa0, 0xcc, 0x3f, 0xe9, 0x70, 0xae, 0x62, 0x72, 0x1c, 0x3e, 0xa8, 0x1e, 0x39, - 0x5e, 0x1a, 0xa3, 0xe2, 0x65, 0x4a, 0x89, 0x97, 0x43, 0x58, 0x22, 0x90, 0xa4, 0xae, 0xbb, 0x4d, - 0x0c, 0x80, 0xd7, 0xeb, 0x4a, 0xf5, 0xaa, 0x91, 0x02, 0x7b, 0x89, 0x4b, 0xe0, 0x57, 0xf5, 0xae, - 0x30, 0x58, 0xae, 0x6f, 0x5c, 0x03, 0xff, 0xcb, 0x2a, 0xfc, 0x9f, 0xae, 0x83, 0x5f, 0xb6, 0x44, - 0xc2, 0xff, 0x08, 0x16, 0xf8, 0xa2, 0xda, 0x63, 0xbe, 0xb3, 0x1d, 0x0f, 0xd0, 0x91, 0xab, 0xd0, - 0x21, 0xf9, 0xed, 0x78, 0x50, 0x6c, 0xdd, 0x24, 0x16, 0x6f, 0xd1, 0xf7, 0x5c, 0xbe, 0x78, 0x62, - 0x0b, 0xb1, 0xe8, 0x49, 0x2c, 0x9e, 0x20, 0x63, 0x26, 0x4e, 0x32, 0xb8, 0x77, 0x1b, 0x56, 0x4e, - 0x9b, 0x7f, 0x6f, 0xc2, 0xb4, 0x88, 0x46, 0x4c, 0x8a, 0x7c, 0xb7, 0x9c, 0x2f, 0xab, 0x44, 0x51, - 0x5d, 0xdb, 0x3f, 0x2e, 0xc2, 0x8b, 0x28, 0xf9, 0x18, 0xa9, 0xa1, 0x1e, 0x23, 0x95, 0x6c, 0x9a, - 0xaa, 0xda, 0x54, 0x1a, 0x57, 0xb3, 0x3a, 0x2e, 0x5e, 0xc6, 0x61, 0x65, 0xb3, 0xeb, 0xd9, 0xc9, - 0x7e, 0x10, 0x0d, 0xc5, 0xe6, 0xb7, 0x69, 0x55, 0xf8, 0xbc, 0x74, 0x24, 0x5e, 0x5e, 0xfb, 0x53, - 0x0a, 0x2f, 0x71, 0x79, 0xa5, 0x4d, 0x9c, 0x6c, 0x0f, 0x40, 0xa7, 0x0e, 0x2a, 0x93, 0x6c, 0x8b, - 0x63, 0x37, 0xf0, 0xb1, 0x0a, 0xa5, 0x52, 0x5f, 0x66, 0xf1, 0x91, 0x0f, 0xe3, 0xc1, 0x95, 0x28, - 0x18, 0x8a, 0xb3, 0x87, 0x8c, 0xc4, 0x91, 0x07, 0x7e, 0x92, 0x55, 0xb0, 0x1d, 0x92, 0x95, 0x58, - 0x5c, 0x56, 0x90, 0x58, 0xe7, 0xcf, 0x5a, 0x19, 0xc9, 0x63, 0x29, 0x66, 0x47, 0xa2, 0x78, 0xe7, - 0x3f, 0x15, 0xe4, 0x16, 0x54, 0xe4, 0x4a, 0xd5, 0xd8, 0x22, 0x7e, 0x95, 0xab, 0xb1, 0xa2, 0xc4, - 0x59, 0x52, 0x4a, 0x9c, 0x75, 0x98, 0x0e, 0x42, 0x3e, 0xfd, 0xe3, 0xae, 0x81, 0xd3, 0xe5, 0xb3, - 0xa3, 0x17, 0xa8, 0x4b, 0x37, 0xa9, 0x25, 0x4d, 0x8c, 0x4c, 0xce, 0xb8, 0x01, 0x0b, 0xc1, 0xfe, - 0xbe, 0xe7, 0xfa, 0x6c, 0x37, 0x8d, 0x0f, 0x70, 0x93, 0x7c, 0x0e, 0x83, 0xdd, 0xac, 0x2b, 0x22, - 0xd4, 0x96, 0x56, 0x59, 0x94, 0x57, 0x7e, 0x76, 0x42, 0x9b, 0x1c, 0x5c, 0xe0, 0xce, 0xe3, 0x02, - 0xa7, 0xf0, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0x94, 0x9a, 0x69, 0x77, 0x5e, 0x9e, 0x76, 0x33, 0xf2, - 0xac, 0xfa, 0x91, 0x06, 0x0b, 0x25, 0x23, 0x78, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, - 0xf7, 0x31, 0x0e, 0x8b, 0xfb, 0x22, 0xcc, 0xf1, 0xb7, 0xa8, 0x08, 0x1b, 0xf9, 0xe9, 0x94, 0x09, - 0xb3, 0xee, 0xcd, 0x1e, 0x57, 0xd4, 0x0b, 0x52, 0xdf, 0xc9, 0x4f, 0x98, 0x25, 0x1e, 0x0f, 0x33, - 0xf7, 0x66, 0x6f, 0xc3, 0x76, 0x06, 0x8c, 0xce, 0x81, 0x9b, 0x68, 0x93, 0xca, 0x34, 0x1d, 0x98, - 0xb9, 0xe5, 0x86, 0xf1, 0x66, 0x30, 0x1c, 0x72, 0xb0, 0x1c, 0x96, 0xf0, 0x8a, 0x5b, 0xc3, 0x98, - 0x10, 0x14, 0x0f, 0x27, 0x87, 0xed, 0xdb, 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xe4, 0x96, 0x58, 0x78, - 0x02, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, 0x9d, 0x12, 0xc7, 0xfc, 0xa3, 0x0e, 0x8b, 0xb8, 0x76, - 0x6d, 0x62, 0x68, 0x38, 0x28, 0xf4, 0x22, 0x34, 0x71, 0xaa, 0x8a, 0xda, 0xef, 0xe4, 0xb3, 0x0d, - 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, 0xc1, 0x48, 0x0b, 0xdb, 0x33, 0xa3, 0x84, 0xd4, 0xc3, - 0x66, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, 0x45, 0x7d, 0x48, 0x69, 0x7e, 0x5c, 0x1d, 0x92, 0x24, - 0x77, 0x6e, 0x9e, 0xc1, 0xf2, 0x13, 0xe7, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, - 0x66, 0x87, 0x5c, 0x88, 0xc1, 0xf8, 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x69, 0xc2, 0x8d, 0xfc, 0x6b, - 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0xe6, 0xd6, - 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, 0x36, 0x44, 0xe6, 0xcf, 0x35, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, - 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, 0x8b, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, - 0x11, 0xb0, 0x8f, 0x71, 0x8e, 0x56, 0xc8, 0x48, 0x47, 0x22, 0x0d, 0xf9, 0x48, 0xc4, 0xfc, 0x40, - 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, - 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0xa1, 0x06, 0x17, 0xca, 0x6e, - 0x5d, 0xef, 0xf7, 0x59, 0xf8, 0x30, 0xa7, 0x94, 0x72, 0x24, 0x34, 0x55, 0x3a, 0x12, 0xaa, 0x35, - 0xd9, 0x62, 0x77, 0x58, 0xff, 0xd1, 0x35, 0xf9, 0x7b, 0x3a, 0x7c, 0xf2, 0x6a, 0x3e, 0xf1, 0x6e, - 0x45, 0xb6, 0x1f, 0xef, 0xb3, 0x28, 0x7a, 0x88, 0xf6, 0xde, 0x80, 0x39, 0x9f, 0xdd, 0x2d, 0x6c, - 0x12, 0xd3, 0x71, 0x5c, 0x35, 0xaa, 0xf0, 0x78, 0x6b, 0x97, 0xf9, 0x1f, 0x0d, 0x16, 0x49, 0xcf, - 0x5b, 0x6e, 0xff, 0xf0, 0x21, 0x0e, 0x7e, 0x07, 0xe6, 0x0f, 0xd1, 0x02, 0x4e, 0x4d, 0xb0, 0x6c, - 0x97, 0xa4, 0xc7, 0x1c, 0xfe, 0x7f, 0x35, 0x58, 0x22, 0x45, 0xd7, 0xfd, 0x63, 0xf7, 0x61, 0x06, - 0xeb, 0x2e, 0x2c, 0xb8, 0x64, 0xc2, 0x84, 0x0e, 0x28, 0x8b, 0x8f, 0xe9, 0x81, 0xdf, 0x68, 0xb0, - 0x40, 0x9a, 0xde, 0xf0, 0x13, 0x16, 0x4d, 0x3c, 0xfe, 0x6b, 0xd0, 0x61, 0x7e, 0x12, 0xd9, 0xfe, - 0x24, 0x2b, 0xa4, 0x2c, 0x3a, 0xe6, 0x22, 0xf9, 0x81, 0x06, 0x06, 0xaa, 0xda, 0x72, 0xe3, 0xa1, - 0x1b, 0xc7, 0x0f, 0x11, 0xba, 0xf1, 0x0c, 0xfe, 0x89, 0x0e, 0xe7, 0x25, 0x2d, 0xdb, 0x69, 0xf2, - 0xa8, 0x9b, 0x6c, 0x6c, 0x41, 0x9b, 0xd7, 0x08, 0xf2, 0x5d, 0xe3, 0xb8, 0x1d, 0x15, 0x82, 0xbc, - 0x8a, 0x45, 0xa2, 0xc7, 0xfa, 0x81, 0xef, 0xc4, 0x58, 0x1c, 0xcd, 0x59, 0x0a, 0x8f, 0x2f, 0x43, - 0x2b, 0x92, 0x9a, 0x4d, 0xdb, 0xef, 0x33, 0xef, 0xb1, 0x71, 0x91, 0xf9, 0x4b, 0x0d, 0xe6, 0xa9, - 0xc9, 0xa3, 0x3f, 0x64, 0x9e, 0xeb, 0x29, 0x90, 0x3f, 0x36, 0x28, 0xf1, 0xf0, 0x5a, 0x96, 0xb4, - 0xc8, 0x75, 0xf5, 0xa3, 0x1b, 0x5a, 0xd7, 0xa0, 0xd3, 0x3f, 0xb0, 0xfd, 0xc1, 0x44, 0xc1, 0x25, - 0x8b, 0x9a, 0x09, 0x3c, 0x29, 0x1f, 0xaf, 0x6f, 0xd2, 0x27, 0x1c, 0xfe, 0x4b, 0xa5, 0xa1, 0x9c, - 0xf8, 0x96, 0xe0, 0xc1, 0x9c, 0x7e, 0x08, 0x4b, 0x74, 0xa7, 0x2b, 0xd5, 0x84, 0x46, 0x17, 0xa6, - 0x6d, 0x87, 0x0e, 0x19, 0x34, 0x14, 0xca, 0x48, 0xf5, 0xb6, 0x5e, 0x3c, 0xc8, 0x2a, 0x6e, 0xeb, - 0x2f, 0x02, 0xd8, 0x8e, 0xf3, 0x4e, 0x10, 0x39, 0xae, 0x9f, 0x15, 0xf8, 0x12, 0xc7, 0x7c, 0x13, - 0x66, 0xaf, 0x44, 0xc1, 0xf0, 0x96, 0x74, 0x3b, 0x7b, 0xe2, 0xfd, 0xb1, 0x7c, 0xb3, 0xab, 0xab, - 0x37, 0xbb, 0xe6, 0x37, 0xe1, 0x89, 0x8a, 0xe1, 0xe8, 0xac, 0x4d, 0xba, 0x74, 0xce, 0x3a, 0x11, - 0x21, 0x53, 0x77, 0xea, 0x26, 0xdb, 0x62, 0x29, 0x42, 0xe6, 0x77, 0x35, 0x78, 0xaa, 0xa2, 0x7e, - 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, - 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, 0x88, 0x5f, 0x68, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, - 0xcb, 0xd0, 0xa2, 0x07, 0x2b, 0xa2, 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x1e, 0xda, 0x58, 0xa2, 0x71, - 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x52, 0x22, 0x04, 0xcc, 0xaf, - 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0x9e, 0x29, 0x7c, - 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, - 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, - 0x85, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0xd7, 0x84, 0x28, 0x92, 0x49, - 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, - 0x4a, 0x1c, 0x3f, 0x6b, 0xca, 0xf1, 0x73, 0x71, 0x5c, 0xad, 0x2b, 0xc7, 0xd5, 0x17, 0xa0, 0xed, - 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0x3a, 0x08, - 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xb9, 0x32, 0xf2, 0x2a, 0xd1, - 0xec, 0xc1, 0x92, 0x78, 0x32, 0xb3, 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, - 0xc8, 0x9e, 0xcc, 0xd1, 0xa5, 0x98, 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, - 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, - 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, 0xde, 0x8f, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, - 0x03, 0x74, 0x89, 0x63, 0xfe, 0xb4, 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, - 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, 0xba, 0x03, 0x5d, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, - 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, - 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, - 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, - 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, - 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, - 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, - 0xe6, 0xfb, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, - 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, - 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, - 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, - 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd4, 0x61, 0x1e, 0x5d, 0x46, 0x77, 0xac, 0xfe, - 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x05, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, 0x60, - 0xd2, 0x65, 0x88, 0x8e, 0x97, 0x21, 0xd5, 0x0f, 0x78, 0xfd, 0x93, 0xc6, 0x49, 0x30, 0xdc, 0xb2, - 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x39, 0x37, 0x55, 0x79, 0xe3, 0x1d, 0x05, 0xc1, 0x30, - 0xbf, 0x75, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xaf, - 0xa4, 0x1c, 0xd7, 0xc6, 0x2b, 0x2d, 0xf1, 0x84, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xd1, 0x89, - 0x37, 0xd8, 0x05, 0xe7, 0xf4, 0xeb, 0x34, 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, - 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0x71, 0x0c, 0xca, 0x33, 0x4c, 0xed, 0xc1, 0x9e, 0x61, - 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x29, 0x6d, 0x3c, - 0xf0, 0x9b, 0x52, 0xf3, 0x07, 0x3a, 0x2c, 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, - 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, 0x59, 0x92, 0x50, 0xdd, 0x3d, 0x5d, 0x63, 0xf2, 0x7b, - 0xba, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, - 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, - 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x68, 0x5d, 0x90, 0xe6, 0x0f, 0x75, 0x58, 0xae, 0xcf, - 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, - 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xeb, 0xdc, 0x3f, 0x79, 0xa5, - 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xc3, 0x0e, 0x2a, 0x5c, 0x2b, 0xfc, - 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, 0xec, 0xef, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x58, - 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, - 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0xe5, - 0xe9, 0x99, 0x6e, 0x14, 0xcb, 0xef, 0xf3, 0xa6, 0xaa, 0xef, 0xf3, 0x36, 0x60, 0x5e, 0x36, 0x60, - 0x92, 0x97, 0x95, 0x1b, 0x17, 0xbe, 0xb1, 0x72, 0xe9, 0x79, 0xfa, 0x97, 0xe6, 0xab, 0x15, 0x27, - 0xee, 0xb5, 0xf0, 0x5f, 0x9b, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x59, 0x84, 0xce, - 0xc8, 0x39, 0x00, 0x00, + 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x3f, 0x77, 0xec, 0x21, 0xeb, 0xea, 0xf8, 0x5b, 0xc1, + 0x30, 0x4c, 0x98, 0xf5, 0x83, 0xc4, 0xdd, 0x77, 0xfb, 0x76, 0xe2, 0x06, 0x7e, 0xb7, 0x81, 0x03, + 0x14, 0x1e, 0x1f, 0xe3, 0xfa, 0x49, 0x14, 0x38, 0x69, 0x1f, 0xc7, 0x4c, 0xd1, 0x18, 0x99, 0xc7, + 0xe7, 0xdf, 0xb7, 0xfb, 0xec, 0xb6, 0x75, 0xa3, 0xdb, 0xa4, 0xf9, 0x05, 0x69, 0xac, 0x42, 0x27, + 0xb8, 0xeb, 0xb3, 0xe8, 0x76, 0xcc, 0xa2, 0xeb, 0x5b, 0xdd, 0x16, 0xfe, 0x2a, 0xb3, 0x8c, 0x8b, + 0x00, 0xfd, 0x88, 0xd9, 0x09, 0xbb, 0xe5, 0x0e, 0x59, 0x77, 0x7a, 0x55, 0x7b, 0x76, 0xce, 0x92, + 0x38, 0x5c, 0xc3, 0x90, 0x0d, 0xf7, 0x58, 0xb4, 0x19, 0xa4, 0x7e, 0xd2, 0x9d, 0xc1, 0x01, 0x32, + 0xcb, 0x98, 0x07, 0x9d, 0xdd, 0xeb, 0xb6, 0x51, 0xb5, 0xce, 0xee, 0x19, 0xcb, 0xd0, 0x8a, 0x13, + 0x3b, 0x49, 0xe3, 0x2e, 0xac, 0x6a, 0xcf, 0x36, 0x2d, 0x41, 0x19, 0x6b, 0x30, 0x87, 0x7a, 0x83, + 0xcc, 0x9a, 0x0e, 0x8a, 0xa8, 0xcc, 0x3c, 0x62, 0xb7, 0xee, 0x87, 0xac, 0x3b, 0x8b, 0x0a, 0x0a, + 0x86, 0xf9, 0x37, 0x1d, 0xce, 0x61, 0xdc, 0xb7, 0xd1, 0x80, 0x2b, 0xa9, 0xe7, 0x9d, 0x82, 0xc0, + 0x32, 0xb4, 0x52, 0x9a, 0x8e, 0xc2, 0x2f, 0x28, 0x3e, 0x4f, 0x14, 0x78, 0xec, 0x06, 0x3b, 0x66, + 0x1e, 0x06, 0xbe, 0x69, 0x15, 0x0c, 0x63, 0x05, 0x66, 0xee, 0x04, 0xae, 0x8f, 0x31, 0x99, 0xc2, + 0x1f, 0x73, 0x9a, 0xff, 0xe6, 0xbb, 0xfd, 0x43, 0x9f, 0x43, 0x4a, 0xe1, 0xce, 0x69, 0x19, 0x89, + 0x96, 0x8a, 0xc4, 0x33, 0x30, 0x6f, 0x87, 0xe1, 0xb6, 0xed, 0x0f, 0x58, 0x44, 0x93, 0x4e, 0xa3, + 0xde, 0x12, 0x97, 0xe3, 0xc1, 0x67, 0xea, 0x05, 0x69, 0xd4, 0x67, 0x18, 0xee, 0xa6, 0x25, 0x71, + 0xb8, 0x9e, 0x20, 0x64, 0x91, 0x14, 0x46, 0x8a, 0x7c, 0x89, 0x2b, 0x50, 0x81, 0x1c, 0x15, 0x8e, + 0x63, 0x9a, 0xb0, 0x37, 0x7c, 0x07, 0x9d, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x7d, 0x0d, 0xe6, + 0x77, 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0x1e, 0xd6, 0x22, 0x78, 0x9a, 0x12, 0x3c, 0x39, 0x04, + 0xfa, 0xe8, 0x10, 0x34, 0xd4, 0x10, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0x22, 0xa4, 0x82, + 0x12, 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x1f, 0xeb, 0x30, 0xf3, 0x11, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, + 0x20, 0xf0, 0xd9, 0x4e, 0xca, 0xd3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, + 0xe4, 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, + 0x1c, 0x9a, 0xc9, 0x63, 0xaf, 0xae, 0xb1, 0x76, 0x65, 0x8d, 0x55, 0x73, 0x03, 0xea, 0x72, 0xc3, + 0xfc, 0xb7, 0x06, 0x70, 0x25, 0x72, 0x99, 0xef, 0x60, 0x68, 0x4a, 0x8b, 0x5b, 0xab, 0x2e, 0xee, + 0x65, 0x68, 0x45, 0x6c, 0x68, 0x47, 0x87, 0x59, 0xf2, 0x13, 0x55, 0x32, 0xa8, 0x51, 0x31, 0xe8, + 0x55, 0x80, 0x7d, 0x9c, 0x87, 0xeb, 0xc1, 0x50, 0x75, 0x5e, 0xfc, 0xd4, 0xa5, 0xca, 0x36, 0x78, + 0x29, 0x43, 0xc9, 0x92, 0x86, 0xf3, 0x95, 0x65, 0x3b, 0x8e, 0x48, 0xe0, 0x26, 0xad, 0xac, 0x9c, + 0x51, 0x93, 0xbf, 0xad, 0x13, 0xf2, 0x77, 0x3a, 0x4f, 0x8a, 0x7f, 0x6a, 0xd0, 0xde, 0xf0, 0xec, + 0xfe, 0xe1, 0x98, 0xae, 0xab, 0x2e, 0xea, 0x15, 0x17, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0xb9, + 0x80, 0x51, 0xe8, 0xbc, 0xf8, 0x99, 0x1a, 0x2f, 0xd5, 0x45, 0x61, 0xa9, 0x72, 0xaa, 0xbb, 0x53, + 0xa7, 0xbb, 0xdb, 0x3c, 0xc1, 0xdd, 0x56, 0xee, 0xee, 0x5f, 0x75, 0x98, 0xc5, 0x8d, 0xce, 0x62, + 0x47, 0x29, 0x8b, 0x13, 0xe3, 0x75, 0x98, 0x49, 0x33, 0x53, 0xb5, 0x71, 0x4d, 0xcd, 0x45, 0x8c, + 0x57, 0xc4, 0xb6, 0x8a, 0xf2, 0x3a, 0xca, 0x5f, 0xa8, 0x91, 0xcf, 0x6b, 0x9a, 0x55, 0x0c, 0xe7, + 0x25, 0xe8, 0xc0, 0xf6, 0x1d, 0x8f, 0x59, 0x2c, 0x4e, 0xbd, 0x44, 0xec, 0x96, 0x0a, 0x8f, 0x32, + 0xed, 0x68, 0x3b, 0x1e, 0x88, 0x02, 0x25, 0x28, 0x1e, 0x1d, 0x1a, 0xc7, 0x7f, 0x22, 0xd7, 0x0b, + 0x06, 0x5f, 0xa8, 0x11, 0x3b, 0x42, 0x84, 0x68, 0x59, 0x65, 0x64, 0x31, 0xa7, 0x88, 0x1a, 0x25, + 0x82, 0xc2, 0xe3, 0x10, 0x13, 0x8d, 0x0a, 0xa8, 0x32, 0x49, 0x9c, 0x72, 0x61, 0x32, 0xff, 0xde, + 0x80, 0x39, 0x5a, 0x3e, 0x59, 0x50, 0x2f, 0xf2, 0x3c, 0x0f, 0x86, 0x4a, 0x16, 0x49, 0x1c, 0x6e, + 0x05, 0xa7, 0x76, 0xd4, 0x8d, 0x46, 0xe1, 0xf1, 0x54, 0xe4, 0xf4, 0x15, 0x65, 0xc3, 0x91, 0x59, + 0xd9, 0x2c, 0x57, 0xe5, 0x8d, 0x47, 0xe2, 0xf0, 0xad, 0x2c, 0x09, 0x94, 0xec, 0xc8, 0x69, 0x2e, + 0x9b, 0x04, 0xf9, 0xfc, 0x94, 0x1f, 0x12, 0x87, 0xc7, 0x37, 0x09, 0xb2, 0xb9, 0x29, 0x48, 0x05, + 0x83, 0x34, 0x8b, 0x79, 0xa9, 0x94, 0xe4, 0x74, 0x05, 0xd5, 0xf6, 0x89, 0xa8, 0x82, 0x82, 0xaa, + 0xba, 0xb8, 0x3a, 0x95, 0xc5, 0xb5, 0x06, 0x73, 0xa4, 0x27, 0x4b, 0xfa, 0x59, 0x2a, 0xf5, 0x0a, + 0x53, 0xcd, 0x8d, 0xb9, 0x72, 0x6e, 0xa8, 0xe8, 0xce, 0x8f, 0x40, 0x77, 0x21, 0x47, 0xf7, 0xd7, + 0x3a, 0xc0, 0x16, 0x0b, 0xed, 0x28, 0x19, 0x32, 0x3f, 0xe1, 0xee, 0x39, 0x39, 0x95, 0x83, 0xab, + 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x0c, 0x38, 0xa1, 0x89, 0x7f, 0xf3, 0x60, + 0x86, 0x76, 0x44, 0xda, 0x28, 0xc9, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, 0x5a, + 0x44, 0xf0, 0xc5, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf6, 0x75, 0x95, 0x7b, 0x6a, 0x0f, 0xf6, + 0x1c, 0x2c, 0xc6, 0xe9, 0x5e, 0xe1, 0xdc, 0x4e, 0x3a, 0x14, 0xe9, 0x5e, 0xe1, 0xf3, 0xa0, 0x52, + 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, 0xd1, + 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x1b, 0xf8, 0x24, 0x25, 0x77, 0x15, 0x3a, 0xcc, 0x1f, + 0x78, 0x6e, 0x7c, 0xb0, 0x53, 0xc4, 0x4d, 0x66, 0xc9, 0xc1, 0x9e, 0x1a, 0x55, 0x94, 0x9b, 0x4a, + 0x51, 0x5e, 0x86, 0xd6, 0x30, 0xd8, 0x73, 0xbd, 0x2c, 0xef, 0x05, 0x85, 0x39, 0xcf, 0x3c, 0x86, + 0xd5, 0x39, 0xcf, 0xf9, 0x8c, 0x51, 0x14, 0xea, 0x99, 0xda, 0x42, 0xdd, 0x96, 0x0b, 0xb5, 0x1a, + 0x78, 0xa8, 0x04, 0x9e, 0xc2, 0xd5, 0xc9, 0xc3, 0xf5, 0x47, 0x0d, 0x16, 0x8b, 0x70, 0x53, 0x0f, + 0x3a, 0x32, 0x5c, 0xe5, 0x0c, 0xd4, 0x6b, 0x32, 0x30, 0xcf, 0x9b, 0x86, 0x9c, 0x37, 0x3c, 0xd3, + 0x82, 0xd8, 0x95, 0xfa, 0xfd, 0x9c, 0xe6, 0xb3, 0x79, 0xcc, 0x96, 0x82, 0x45, 0x94, 0xd4, 0x75, + 0xb7, 0x94, 0xae, 0xbb, 0x5c, 0x47, 0x7f, 0xa7, 0xc1, 0x79, 0x8e, 0x72, 0xc5, 0x8d, 0x9b, 0xb0, + 0x18, 0x94, 0x32, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x69, 0xac, 0x8a, 0x30, 0x57, + 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, 0x83, + 0x45, 0x2a, 0x6d, 0xd2, 0x3a, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, 0x71, + 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xaf, 0xb5, 0x27, 0x77, 0x53, 0xcf, 0xdb, + 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, 0x0e, + 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x14, 0x92, 0x59, 0x7c, 0x59, 0xc5, 0xa4, 0xa7, + 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, 0x9d, + 0x42, 0x07, 0x5e, 0xab, 0xed, 0x1a, 0x6a, 0xad, 0xa2, 0x6e, 0x40, 0xd0, 0x6f, 0xf8, 0x49, 0x74, + 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x21, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, 0xe1, + 0x07, 0xff, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, 0xc2, + 0x66, 0x8b, 0x06, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x1d, 0x93, 0x7d, 0xd4, 0x14, 0x1f, + 0xcd, 0xb7, 0xa0, 0xb3, 0x1d, 0x0f, 0xb6, 0xec, 0xc4, 0xc6, 0x81, 0xaf, 0x41, 0x67, 0x58, 0x90, + 0x38, 0xb8, 0x7e, 0x3e, 0x21, 0x64, 0xc9, 0xc3, 0xcd, 0xbf, 0xe8, 0xd0, 0xad, 0x0f, 0x45, 0x1c, + 0x72, 0x1b, 0x58, 0x14, 0x6d, 0x06, 0x0e, 0x43, 0xd7, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, 0x14, + 0xf1, 0x1a, 0x26, 0x9a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, 0x8e, + 0x33, 0x86, 0xb0, 0x88, 0xd1, 0x95, 0x1c, 0x12, 0x98, 0xad, 0x8f, 0x8d, 0x59, 0x1c, 0x12, 0x68, + 0x92, 0x0e, 0x02, 0xae, 0xa2, 0x7a, 0xa5, 0x0f, 0x4f, 0xd4, 0x0e, 0xad, 0x01, 0xf0, 0x4b, 0x2a, + 0x80, 0x17, 0x47, 0xbb, 0x52, 0x06, 0x31, 0x04, 0xe3, 0x2a, 0x4b, 0xb6, 0xed, 0x7b, 0xeb, 0xbe, + 0xb3, 0xed, 0xfa, 0x3d, 0x76, 0xc4, 0xb3, 0x7d, 0x15, 0x3a, 0xe2, 0xf3, 0x3c, 0x87, 0xa9, 0x6d, + 0xc9, 0xac, 0x91, 0x5f, 0xed, 0xa5, 0xf5, 0xd0, 0xa8, 0xac, 0x07, 0xf3, 0x32, 0xcc, 0xca, 0xd3, + 0x61, 0x11, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x3a, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0x38, 0x42, 0x7c, + 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xf3, 0xa5, + 0x31, 0x2a, 0x5f, 0xa6, 0x94, 0x7c, 0x39, 0x84, 0x25, 0x02, 0x49, 0x9a, 0xba, 0xdb, 0xc4, 0x04, + 0x78, 0xbd, 0xae, 0x55, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, 0x83, + 0xe5, 0xfa, 0xc1, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xe9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, 0xfc, + 0x8f, 0x60, 0x81, 0x6f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x03, 0xb9, 0x0a, 0x1d, 0x92, + 0xdf, 0x8e, 0x07, 0xc5, 0xa7, 0x9b, 0xc4, 0xe2, 0x23, 0xfa, 0x9e, 0xcb, 0x37, 0x4f, 0x1c, 0x21, + 0x36, 0x3d, 0x89, 0xc5, 0x0b, 0x64, 0xcc, 0xc4, 0x49, 0x06, 0x8f, 0x6e, 0xc3, 0xca, 0x69, 0xf3, + 0xa7, 0x2d, 0x98, 0x16, 0xd9, 0x88, 0x45, 0x91, 0x7f, 0x2d, 0xe7, 0xdb, 0x2a, 0x51, 0xd4, 0xd7, + 0xf6, 0x8f, 0x8b, 0xf4, 0x22, 0x4a, 0x3e, 0x46, 0x6a, 0xa8, 0xc7, 0x48, 0x25, 0x9b, 0xa6, 0xaa, + 0x36, 0x95, 0xfc, 0x6a, 0x56, 0xfd, 0xe2, 0x6d, 0x1c, 0x76, 0x36, 0xbb, 0x9e, 0x9d, 0xec, 0x07, + 0xd1, 0x50, 0x7c, 0xfc, 0x36, 0xad, 0x0a, 0x9f, 0xb7, 0x8e, 0xc4, 0xcb, 0x7b, 0x7f, 0x2a, 0xe1, + 0x25, 0x2e, 0xef, 0xb4, 0x89, 0x93, 0x7d, 0x03, 0xd0, 0xa9, 0x83, 0xca, 0x24, 0xdb, 0xe2, 0xd8, + 0x0d, 0x7c, 0xec, 0x42, 0xa9, 0xd5, 0x97, 0x59, 0xdc, 0xf3, 0x61, 0x3c, 0xb8, 0x12, 0x05, 0x43, + 0x71, 0xf6, 0x90, 0x91, 0xe8, 0x79, 0xe0, 0x27, 0x59, 0x07, 0xdb, 0x21, 0x59, 0x89, 0xc5, 0x65, + 0x05, 0x89, 0x7d, 0xfe, 0xac, 0x95, 0x91, 0x3c, 0x97, 0x62, 0x76, 0x24, 0x9a, 0x77, 0xfe, 0xa7, + 0x82, 0xdc, 0x82, 0x8a, 0x5c, 0xa9, 0x1b, 0x5b, 0xc4, 0x5f, 0xe5, 0x6e, 0xac, 0x68, 0x71, 0x96, + 0x94, 0x16, 0x67, 0x1d, 0xa6, 0x83, 0x90, 0x2f, 0xff, 0xb8, 0x6b, 0xe0, 0x72, 0xf9, 0xec, 0xe8, + 0x0d, 0xea, 0xd2, 0x4d, 0x1a, 0x49, 0x0b, 0x23, 0x93, 0x33, 0x6e, 0xc0, 0x42, 0xb0, 0xbf, 0xef, + 0xb9, 0x3e, 0xdb, 0x4d, 0xe3, 0x03, 0xfc, 0x48, 0x3e, 0x87, 0xc9, 0x6e, 0xd6, 0x35, 0x11, 0xea, + 0x48, 0xab, 0x2c, 0xca, 0x3b, 0x3f, 0x3b, 0xa1, 0x8f, 0x1c, 0xdc, 0xe0, 0xce, 0xe3, 0x06, 0xa7, + 0xf0, 0xca, 0xa5, 0xea, 0x89, 0x07, 0x2a, 0x55, 0x2b, 0xaf, 0xc0, 0xac, 0xec, 0x48, 0xcd, 0xa2, + 0x3d, 0x2f, 0x2f, 0xda, 0x19, 0x79, 0x4d, 0xfe, 0x48, 0x83, 0x85, 0x92, 0x0b, 0x7c, 0x74, 0xe2, + 0x26, 0x1e, 0x13, 0x1a, 0x88, 0xe0, 0x5f, 0x41, 0x0e, 0x8b, 0xfb, 0x62, 0x91, 0xe0, 0xdf, 0xa2, + 0x9f, 0x6c, 0xe4, 0x67, 0x5b, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, 0x48, 0x7d, 0x27, + 0x3f, 0x9f, 0x96, 0x78, 0x3c, 0x49, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, 0x3a, 0x45, 0x6e, + 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, 0xc8, 0xa1, 0x76, + 0x58, 0xc2, 0xfb, 0x75, 0x0d, 0x33, 0x4a, 0x50, 0x3c, 0x19, 0x1d, 0xb6, 0x6f, 0xa7, 0x5e, 0xc2, + 0x87, 0x66, 0x5b, 0x83, 0xc4, 0xc2, 0xf3, 0xd3, 0x38, 0xf0, 0xb7, 0x48, 0x9a, 0xec, 0x94, 0x38, + 0xe6, 0x9f, 0x74, 0x58, 0xc4, 0x9d, 0x6f, 0x13, 0x13, 0xcb, 0x41, 0xa1, 0x17, 0xa1, 0x89, 0x0b, + 0x5d, 0x74, 0x8e, 0x27, 0x9f, 0x8c, 0xd0, 0x50, 0xe3, 0x32, 0xb4, 0x82, 0x10, 0xdb, 0x4d, 0xda, + 0x16, 0x9f, 0x19, 0x25, 0xa4, 0x1e, 0x55, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0xba, 0x4b, + 0x6a, 0x12, 0xc6, 0xd5, 0x21, 0x49, 0xf2, 0xe0, 0xe6, 0xf5, 0x2f, 0x3f, 0xaf, 0x6e, 0x58, 0x2a, + 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, 0x66, 0x76, 0x44, 0x86, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, + 0xfc, 0xb9, 0x26, 0xc2, 0xc8, 0x7f, 0xed, 0x31, 0x8a, 0x7d, 0x11, 0x12, 0x6d, 0xa2, 0x90, 0xac, + 0xc0, 0xcc, 0x30, 0x95, 0x4e, 0xec, 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, + 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x97, 0x2a, 0x13, 0x63, + 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, 0x4f, 0x04, 0xec, 0x63, 0x9c, 0xc2, 0x15, 0x32, 0xd2, 0x81, + 0x4a, 0x43, 0x3e, 0x50, 0x31, 0x3f, 0xd0, 0x60, 0x9e, 0x82, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, + 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, 0x4c, 0x90, 0x95, 0xb9, 0x5c, 0x35, 0x9f, 0x1a, 0x35, 0xf9, + 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0x72, 0x58, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x25, 0xa5, 0x1c, + 0x28, 0x4d, 0x95, 0x0e, 0x94, 0x6a, 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, + 0x0e, 0x9f, 0xbc, 0x9a, 0x2f, 0xbc, 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, + 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, 0x9b, 0xc4, 0x72, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0xde, 0xde, + 0x65, 0xfe, 0x47, 0x83, 0x45, 0xd2, 0xf3, 0x96, 0xdb, 0x3f, 0x7c, 0x88, 0xce, 0xef, 0xc0, 0xfc, + 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xb6, 0xed, 0x92, 0xf4, 0x98, 0xee, 0xff, 0x57, 0x83, 0x25, 0x52, + 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, 0xb2, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0x18, 0x80, 0xb2, + 0xf8, 0x98, 0x11, 0xf8, 0xad, 0x06, 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xfe, 0x5f, + 0x83, 0x0e, 0xf3, 0x93, 0xc8, 0xf6, 0x27, 0xd9, 0x21, 0x65, 0xd1, 0x31, 0x37, 0xc9, 0x0f, 0x34, + 0x30, 0x50, 0xd5, 0x96, 0x1b, 0x0f, 0xdd, 0x38, 0x7e, 0x88, 0xd0, 0x8d, 0x67, 0xf0, 0x4f, 0x74, + 0x38, 0x2f, 0x69, 0xd9, 0x4e, 0x93, 0x47, 0xdd, 0x64, 0x63, 0x0b, 0xda, 0xbc, 0x47, 0x90, 0x6f, + 0x2a, 0xc7, 0x9d, 0xa8, 0x10, 0xe4, 0x5d, 0x2c, 0x12, 0x3d, 0xd6, 0x0f, 0x7c, 0x27, 0xc6, 0xe6, + 0x68, 0xce, 0x52, 0x78, 0x7c, 0x1b, 0x5a, 0x91, 0xd4, 0x6c, 0xda, 0x7e, 0x9f, 0x79, 0x8f, 0x4d, + 0x88, 0xcc, 0x5f, 0x69, 0x30, 0x4f, 0x43, 0x1e, 0x7d, 0x97, 0x79, 0xad, 0xa7, 0x44, 0xfe, 0xd8, + 0xa0, 0xc4, 0xd3, 0x6b, 0x59, 0xd2, 0x22, 0xf7, 0xd5, 0x8f, 0x6e, 0x6a, 0x5d, 0x83, 0x4e, 0xff, + 0xc0, 0xf6, 0x07, 0x13, 0x25, 0x97, 0x2c, 0x6a, 0x26, 0xf0, 0xa4, 0x7c, 0x38, 0xbf, 0x49, 0x3f, + 0xa1, 0xfb, 0x2f, 0x95, 0x5c, 0x39, 0xf1, 0x25, 0xc2, 0x83, 0x05, 0xfd, 0x10, 0x96, 0xe8, 0x46, + 0x58, 0xea, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x51, 0x68, 0x28, 0x94, 0x91, 0xea, 0x5d, + 0xbf, 0x78, 0xce, 0x55, 0xdc, 0xf5, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, + 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x6e, 0xf7, 0xc4, + 0xdb, 0x67, 0xf9, 0x5e, 0x58, 0x57, 0xef, 0x85, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0x31, 0x58, + 0x9b, 0x74, 0x65, 0x9d, 0x4d, 0x22, 0x52, 0xa6, 0xee, 0xcc, 0x4e, 0xb6, 0xc5, 0x52, 0x84, 0xcc, + 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, + 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, + 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, 0x97, 0xa1, 0x45, 0xcf, 0x5d, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, + 0x98, 0x3d, 0xd3, 0xb1, 0xc4, 0xe0, 0x6a, 0x46, 0xea, 0x75, 0x2b, 0xea, 0x2b, 0x79, 0xb2, 0x8f, + 0xfd, 0x20, 0x45, 0x08, 0x98, 0x5f, 0xcf, 0x92, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x63, 0x64, 0xde, + 0x86, 0x79, 0x7c, 0x7b, 0x53, 0xc4, 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, + 0xcd, 0x57, 0x07, 0x8f, 0x8f, 0xbc, 0x95, 0x9c, 0x89, 0xf6, 0x2f, 0xc2, 0xb9, 0x2c, 0xf6, 0xb7, + 0x43, 0x27, 0x3f, 0x44, 0x1a, 0x71, 0x87, 0x67, 0xbe, 0x00, 0xcb, 0x9b, 0x81, 0x7f, 0xcc, 0xa2, + 0x98, 0x2e, 0x19, 0x51, 0x24, 0x93, 0x50, 0x16, 0xbf, 0xa0, 0xcc, 0x3b, 0xb0, 0x22, 0x4b, 0xf4, + 0x58, 0xb2, 0x1b, 0xb9, 0xc7, 0x92, 0x94, 0x38, 0xbc, 0xd6, 0x94, 0xc3, 0xeb, 0xe2, 0xb0, 0x5b, + 0x57, 0x0e, 0xbb, 0x2f, 0x40, 0xdb, 0x8d, 0x85, 0x02, 0x4c, 0xaa, 0x19, 0xab, 0x60, 0x98, 0x36, + 0x2c, 0x51, 0xf8, 0xc5, 0x65, 0x12, 0x4e, 0xb1, 0x02, 0x33, 0x94, 0x53, 0xf9, 0x24, 0x39, 0x3d, + 0xf2, 0x6a, 0x66, 0xe4, 0x45, 0xa4, 0xd9, 0x83, 0x25, 0xf1, 0xe0, 0x66, 0xd7, 0x1e, 0xb8, 0x3e, + 0x6d, 0xb2, 0x17, 0x01, 0x42, 0x7b, 0x90, 0x3d, 0xb8, 0xa3, 0x2b, 0x35, 0x89, 0xc3, 0x7f, 0x8f, + 0x0f, 0x82, 0xbb, 0xe2, 0x77, 0x9d, 0x7e, 0x2f, 0x38, 0xe6, 0xd7, 0xc0, 0xb0, 0x58, 0x1c, 0x06, + 0x7e, 0xcc, 0x24, 0xad, 0xab, 0xd0, 0xd9, 0x4c, 0xa3, 0x88, 0xf9, 0x7c, 0xaa, 0xec, 0xf5, 0x99, + 0xcc, 0xe2, 0x7a, 0x7b, 0x85, 0x5e, 0x3a, 0x7e, 0x97, 0x38, 0xe6, 0xcf, 0x1a, 0xd0, 0xee, 0xb9, + 0x03, 0xdf, 0xf6, 0x2c, 0x76, 0x64, 0xbc, 0x06, 0x2d, 0xfa, 0x64, 0x11, 0x99, 0x52, 0x77, 0x1c, + 0x4c, 0xa3, 0xe9, 0xdb, 0xcc, 0x62, 0x47, 0xd7, 0x3e, 0x61, 0x09, 0x19, 0xe3, 0x6d, 0x98, 0xa3, + 0xbf, 0xae, 0xd3, 0x11, 0x94, 0xa8, 0x5f, 0x9f, 0x3b, 0x45, 0x89, 0x18, 0x4d, 0xba, 0x54, 0x0d, + 0xdc, 0xa0, 0x3e, 0xb6, 0x34, 0x62, 0x7b, 0x18, 0x6d, 0x10, 0x75, 0x3e, 0xc2, 0x20, 0x92, 0xe1, + 0xd2, 0x36, 0x1e, 0xd2, 0x88, 0x4a, 0x3d, 0x5a, 0x9a, 0xce, 0x72, 0x84, 0x34, 0xc9, 0x70, 0xe9, + 0x83, 0xd4, 0x1f, 0xdc, 0x0e, 0xc5, 0xd9, 0xe1, 0x68, 0xe9, 0x6b, 0x38, 0x4c, 0x48, 0x93, 0x0c, + 0x97, 0x8e, 0x70, 0xf3, 0xc6, 0xa0, 0x9f, 0x24, 0x4d, 0x7b, 0xbc, 0x90, 0x26, 0x99, 0x8d, 0x36, + 0x4c, 0x87, 0xf6, 0x7d, 0x2f, 0xb0, 0x1d, 0xf3, 0xfd, 0x06, 0x40, 0x36, 0x30, 0xc6, 0x46, 0x47, + 0x81, 0x68, 0xed, 0x54, 0x88, 0x42, 0xef, 0xbe, 0x04, 0x52, 0xaf, 0x1e, 0xa4, 0xcf, 0x8f, 0x0b, + 0x12, 0x69, 0x2b, 0xc1, 0x74, 0xb9, 0x04, 0xd3, 0xda, 0xa9, 0x30, 0x09, 0xa3, 0x04, 0x50, 0x97, + 0x4b, 0x40, 0xad, 0x9d, 0x0a, 0x94, 0x90, 0x17, 0x50, 0x5d, 0x2e, 0x41, 0xb5, 0x76, 0x2a, 0x54, + 0x42, 0x5e, 0x80, 0x75, 0xb9, 0x04, 0xd6, 0xda, 0xa9, 0x60, 0x09, 0xf9, 0x2a, 0x5c, 0x1f, 0xea, + 0x30, 0x8f, 0x21, 0xa3, 0x1b, 0x5a, 0x7f, 0x3f, 0xc0, 0xfb, 0x00, 0x0c, 0x97, 0xfa, 0x7e, 0x53, + 0x65, 0x1a, 0x5f, 0x80, 0x25, 0x62, 0x30, 0xe9, 0x2a, 0x45, 0xc7, 0xab, 0x94, 0xea, 0x0f, 0x78, + 0x79, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x6b, 0xbe, 0x0a, 0x8e, 0x7c, 0xb5, 0x37, + 0x55, 0x79, 0x21, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0xb3, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, + 0xd2, 0x44, 0x6c, 0x13, 0x19, 0x49, 0x6f, 0xac, 0x1c, 0xd7, 0xc6, 0x0b, 0x31, 0xf1, 0x00, 0x29, + 0x67, 0xe0, 0xce, 0x56, 0x5c, 0xf0, 0x89, 0x17, 0xdc, 0x05, 0xe7, 0xf4, 0xcb, 0x38, 0xf3, 0x1f, + 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0xd1, 0x07, + 0xe5, 0x11, 0xa7, 0xf6, 0x60, 0x8f, 0x38, 0x77, 0x61, 0x61, 0xa0, 0x7e, 0x5d, 0x3c, 0xe0, 0x87, + 0x41, 0x59, 0x5c, 0x79, 0x91, 0xda, 0x78, 0xe0, 0x17, 0xa9, 0xe6, 0x0f, 0x74, 0x58, 0x28, 0x6d, + 0x9d, 0x27, 0xd6, 0x9d, 0x75, 0x00, 0x37, 0x4f, 0xa3, 0x13, 0x0e, 0xdf, 0xd5, 0x5c, 0xb3, 0x24, + 0xa1, 0xba, 0x5b, 0xbe, 0xc6, 0xe4, 0xb7, 0x7c, 0xd7, 0xa0, 0x13, 0x16, 0x20, 0x9d, 0xf0, 0xed, + 0x53, 0x03, 0xa5, 0x25, 0x8b, 0x9a, 0xef, 0xc2, 0x52, 0x65, 0x87, 0xc2, 0x2b, 0xb9, 0xe0, 0x90, + 0xf9, 0xf9, 0x95, 0x1c, 0x27, 0xa4, 0x64, 0xd5, 0xcb, 0xc9, 0xea, 0xb9, 0xc7, 0xf2, 0x93, 0x77, + 0x41, 0x9a, 0x3f, 0xd4, 0x61, 0xb9, 0xbe, 0xba, 0x3c, 0xae, 0xe1, 0xde, 0x83, 0xee, 0xa8, 0x9d, + 0xfc, 0xcc, 0xa2, 0x5e, 0x64, 0x77, 0x5e, 0x87, 0x1f, 0xd7, 0x70, 0x9f, 0xcb, 0xb2, 0x5b, 0x2a, + 0x75, 0xe6, 0x6f, 0xf2, 0xf8, 0xe4, 0x9d, 0xc6, 0x63, 0x1a, 0x1f, 0xe3, 0x39, 0x58, 0x24, 0x37, + 0xa5, 0x67, 0x21, 0xd4, 0xb8, 0x56, 0xf8, 0xc5, 0x4e, 0x21, 0x95, 0xfd, 0x33, 0xcb, 0xd9, 0x3f, + 0x68, 0x19, 0x26, 0x79, 0xff, 0xf6, 0xb1, 0xc2, 0xa4, 0xc8, 0x34, 0xa9, 0xa9, 0x91, 0x32, 0x2d, + 0xef, 0x2b, 0xff, 0x9f, 0x69, 0xa7, 0x67, 0x5a, 0x1e, 0x4b, 0xa9, 0xc1, 0x33, 0xbf, 0x03, 0x73, + 0x5b, 0xcc, 0xdb, 0x8e, 0x07, 0xd9, 0xbb, 0xd5, 0x33, 0xfd, 0x50, 0x2c, 0xbf, 0xee, 0x9b, 0xaa, + 0xbe, 0xee, 0xdb, 0x80, 0x79, 0xd9, 0x80, 0x49, 0xde, 0x65, 0x6e, 0x5c, 0xf8, 0xc6, 0xca, 0xa5, + 0xe7, 0xe9, 0x7f, 0x3c, 0x5f, 0xad, 0x04, 0x71, 0xaf, 0x85, 0xff, 0xf3, 0xf9, 0xd2, 0xff, 0x02, + 0x00, 0x00, 0xff, 0xff, 0xbb, 0xd4, 0xa8, 0x81, 0x06, 0x3a, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 7c24f3078..e7fbfe7c5 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -238,6 +238,7 @@ message MsgData { map options = 18; OfflinePushInfo offlinePushInfo = 19; repeated string atUserIDList = 20; + repeated MsgData msgDataList = 21; } message OfflinePushInfo{ From 276328e0fda0b0cceaa74f732d945112d46b5cfd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:05:57 +0800 Subject: [PATCH 086/256] fix bug --- config/config.yaml | 24 +++++++++++++ internal/api/manage/management_chat.go | 2 +- internal/rpc/group/group.go | 11 +++++- internal/rpc/msg/conversation_notification.go | 6 ---- internal/rpc/msg/group_notification.go | 27 ++++++++++++++- internal/rpc/msg/send_msg.go | 3 ++ pkg/common/config/config.go | 10 ++++++ pkg/common/constant/constant.go | 34 ++++++++++--------- 8 files changed, 92 insertions(+), 25 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index e11407c5c..628192e4f 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -481,6 +481,30 @@ notification: defaultTips: tips: "group member info set" + groupMemberSetToOrdinaryUser: + conversation: + reliabilityLevel: 3 + unreadCount: false + offlinePush: + switch: false + title: "groupMemberSetToOrdinaryUser title" + desc: "groupMemberSetToOrdinaryUser desc" + ext: "groupMemberSetToOrdinaryUser ext" + defaultTips: + tips: "was set to ordinaryUser" + + groupMemberSetToAdmin: + conversation: + reliabilityLevel: 3 + unreadCount: false + offlinePush: + switch: false + title: "groupMemberSetToAdmin title" + desc: "groupMemberSetToAdmin desc" + ext: "groupMemberSetToAdmin ext" + defaultTips: + tips: "was set to admin" + #############################organization################################# organizationChanged: conversation: diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 22835fcd0..5519135b3 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -266,7 +266,7 @@ func ManagementBatchSendMsg(c *gin.Context) { continue } if rpcResp.ErrCode != 0 { - log.NewError(params.OperationID, utils.GetSelfFuncName(), "rpc failed", pbData) + log.NewError(params.OperationID, utils.GetSelfFuncName(), "rpc failed", pbData, rpcResp) resp.Data.FailedIDList = append(resp.Data.FailedIDList, recvID) continue } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 60127c425..d8567bcc4 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1648,7 +1648,16 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg + ":" + err.Error() return resp, nil } - chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) + if req.RoleLevel != nil { + switch req.RoleLevel.Value { + case constant.GroupOrdinaryUsers: + chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification) + case constant.GroupAdmin, constant.GroupOwner: + chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification) + } + } else { + chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) + } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/internal/rpc/msg/conversation_notification.go b/internal/rpc/msg/conversation_notification.go index 5c39ea06a..b43db7959 100644 --- a/internal/rpc/msg/conversation_notification.go +++ b/internal/rpc/msg/conversation_notification.go @@ -49,12 +49,6 @@ func ConversationSetPrivateNotification(operationID, sendID, recvID string, isPr } var tips open_im_sdk.TipsComm var tipsMsg string - //var senderName string - //senderName, err := im_mysql_model.GetUserNameByUserID(sendID) - //if err != nil { - // log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) - // senderName = sendID - //} if isPrivateChat == true { tipsMsg = config.Config.Notification.ConversationSetPrivate.DefaultTips.OpenTips } else { diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index e8a29b117..83ee39ba3 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -170,7 +170,10 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv tips.DefaultTips = toNickname + "" + cn.GroupMemberCancelMuted.DefaultTips.Tips case constant.GroupMemberInfoSetNotification: tips.DefaultTips = toNickname + "" + cn.GroupMemberInfoSet.DefaultTips.Tips - + case constant.GroupMemberSetToAdminNotification: + tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToAdmin.DefaultTips.Tips + case constant.GroupMemberSetToOrdinaryUserNotification: + tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToOrdinary.DefaultTips.Tips default: log.Error(operationID, "contentType failed ", contentType) return @@ -311,6 +314,28 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU groupNotification(constant.GroupMemberInfoSetNotification, &tips, opUserID, groupID, "", operationID) } +func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { + if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupOrdinaryUsers { + log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) + return + } + tips := open_im_sdk.GroupMemberInfoSetTips{Group: &open_im_sdk.GroupInfo{}, + OpUser: &open_im_sdk.GroupMemberFullInfo{}, ChangedUser: &open_im_sdk.GroupMemberFullInfo{}} + if err := setGroupInfo(groupID, tips.Group); err != nil { + log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID) + return + } + if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil { + log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID) + return + } + if err := setGroupMemberInfo(groupID, groupMemberUserID, tips.ChangedUser); err != nil { + log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID) + return + } + groupNotification(notificationType, &tips, opUserID, groupID, "", operationID) +} + func GroupMemberCancelMutedNotification(operationID, opUserID, groupID, groupMemberUserID string) { tips := open_im_sdk.GroupMemberCancelMutedTips{Group: &open_im_sdk.GroupInfo{}, OpUser: &open_im_sdk.GroupMemberFullInfo{}, MutedUser: &open_im_sdk.GroupMemberFullInfo{}} diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index b38e573e2..72d737453 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -51,6 +51,9 @@ type MsgCallBackResp struct { func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { if data.MsgData.SessionType == constant.SingleChatType { + if utils.IsContain(data.MsgData.SendID, config.Config.Manager.AppManagerUid) { + return true, 0, "" + } log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 2b9a4d891..8250199a7 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -339,6 +339,16 @@ type config struct { OfflinePush POfflinePush `yaml:"offlinePush"` DefaultTips PDefaultTips `yaml:"defaultTips"` } `yaml:"groupMemberInfoSet"` + GroupMemberSetToAdmin struct { + Conversation PConversation `yaml:"conversation"` + OfflinePush POfflinePush `yaml:"offlinePush"` + DefaultTips PDefaultTips `yaml:"defaultTips"` + } `yaml:"groupMemberSetToAdmin"` + GroupMemberSetToOrdinary struct { + Conversation PConversation `yaml:"conversation"` + OfflinePush POfflinePush `yaml:"offlinePush"` + DefaultTips PDefaultTips `yaml:"defaultTips"` + } `yaml:"groupMemberSetToOrdinaryUser"` OrganizationChanged struct { Conversation PConversation `yaml:"conversation"` OfflinePush POfflinePush `yaml:"offlinePush"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 1e23ebefa..bae1f15b9 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -67,22 +67,24 @@ const ( GroupNotificationBegin = 1500 - GroupCreatedNotification = 1501 - GroupInfoSetNotification = 1502 - JoinGroupApplicationNotification = 1503 - MemberQuitNotification = 1504 - GroupApplicationAcceptedNotification = 1505 - GroupApplicationRejectedNotification = 1506 - GroupOwnerTransferredNotification = 1507 - MemberKickedNotification = 1508 - MemberInvitedNotification = 1509 - MemberEnterNotification = 1510 - GroupDismissedNotification = 1511 - GroupMemberMutedNotification = 1512 - GroupMemberCancelMutedNotification = 1513 - GroupMutedNotification = 1514 - GroupCancelMutedNotification = 1515 - GroupMemberInfoSetNotification = 1516 + GroupCreatedNotification = 1501 + GroupInfoSetNotification = 1502 + JoinGroupApplicationNotification = 1503 + MemberQuitNotification = 1504 + GroupApplicationAcceptedNotification = 1505 + GroupApplicationRejectedNotification = 1506 + GroupOwnerTransferredNotification = 1507 + MemberKickedNotification = 1508 + MemberInvitedNotification = 1509 + MemberEnterNotification = 1510 + GroupDismissedNotification = 1511 + GroupMemberMutedNotification = 1512 + GroupMemberCancelMutedNotification = 1513 + GroupMutedNotification = 1514 + GroupCancelMutedNotification = 1515 + GroupMemberInfoSetNotification = 1516 + GroupMemberSetToAdminNotification = 1517 + GroupMemberSetToOrdinaryUserNotification = 1518 SignalingNotificationBegin = 1600 SignalingNotification = 1601 From e9655ed05e1f23af3a0f1db0a94a29a166c48d23 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:15:56 +0800 Subject: [PATCH 087/256] fix bug --- internal/rpc/msg/group_notification.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 83ee39ba3..6b68df319 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -315,7 +315,7 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU } func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { - if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupOrdinaryUsers { + if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupMemberSetToOrdinaryUserNotification { log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) return } From 4a55842724785eed917a163740e3560dc72c9433 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:26:31 +0800 Subject: [PATCH 088/256] fix bug --- internal/rpc/msg/group_notification.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 6b68df319..63532fe6b 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -314,8 +314,8 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU groupNotification(constant.GroupMemberInfoSetNotification, &tips, opUserID, groupID, "", operationID) } -func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { - if notificationType != constant.GroupMemberSetToAdminNotification || notificationType != constant.GroupMemberSetToOrdinaryUserNotification { +func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int) { + if notificationType != constant.GroupMemberSetToAdminNotification && notificationType != constant.GroupMemberSetToOrdinaryUserNotification { log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) return } From 5d2c981368b923795e9ac35ec7668b5ce6b6ec5b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:27:50 +0800 Subject: [PATCH 089/256] fix bug --- internal/rpc/msg/group_notification.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 63532fe6b..1b511dd0d 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -314,7 +314,7 @@ func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberU groupNotification(constant.GroupMemberInfoSetNotification, &tips, opUserID, groupID, "", operationID) } -func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int) { +func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { if notificationType != constant.GroupMemberSetToAdminNotification && notificationType != constant.GroupMemberSetToOrdinaryUserNotification { log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType) return From fa5f234a38b5401b60e9a67d4a61e4889fc71492 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 15:40:33 +0800 Subject: [PATCH 090/256] fix bug --- internal/rpc/group/group.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 60ef2b4dd..fb42fe609 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1645,9 +1645,11 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr if req.RoleLevel != nil { switch req.RoleLevel.Value { case constant.GroupOrdinaryUsers: - chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification) + //chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification) + chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) case constant.GroupAdmin, constant.GroupOwner: - chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification) + //chat.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification) + chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) } } else { chat.GroupMemberInfoSetNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID) From a4f69351cef7fb03a8cc05cc65790e8ce5825d9d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 16:46:21 +0800 Subject: [PATCH 091/256] fix bug --- internal/rpc/group/super_group.go | 2 +- pkg/common/db/mongoModel.go | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 949e92a91..ca57bbb4f 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -40,7 +40,7 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. groupInfo.MemberCount = uint32(len(group.MemberIDList)) resp.GroupList = append(resp.GroupList, groupInfo) } - log.NewError(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String()) return resp, nil } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index e57b291d4..4576c26b5 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -964,9 +964,6 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, } defer session.EndSession(ctx) sCtx := mongo.NewSessionContext(ctx, session) - if err != nil { - return utils.Wrap(err, "start transaction failed") - } superGroup := SuperGroup{ GroupID: groupID, MemberIDList: initMemberIDList, @@ -987,12 +984,10 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, Upsert: &upsert, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - for _, userID := range initMemberIDList { - _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") - } + _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") } session.CommitTransaction(ctx) return err @@ -1099,15 +1094,15 @@ func (d *DataBases) DeleteSuperGroup(groupID string) error { return nil } -func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID string, userID []string) error { +func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID string, userIDList []string) error { var users []UserToSuperGroup - for _, v := range userID { + for _, v := range userIDList { users = append(users, UserToSuperGroup{ UserID: v, }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": bson.M{"$in": userID}}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": bson.M{"$in": userIDList}}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") } From 26771ee7d09e7599a4d1697871f0a5a986838987 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 17:07:16 +0800 Subject: [PATCH 092/256] organization --- internal/demo/register/onboarding_process.go | 1 + internal/rpc/organization/organization.go | 28 +-- pkg/proto/organization/organization.pb.go | 182 ++++++++++--------- pkg/proto/organization/organization.proto | 1 + 4 files changed, 112 insertions(+), 100 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 8c43bc221..d92ea2c6a 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -51,6 +51,7 @@ func createOrganizationUser(operationID, userID, userName string) error { }, OperationID: operationID, OpUserID: userID, + IsRegister: false, } if strings.Contains("@", userID) { req.OrganizationUser.Email = userID diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 02523c35e..7b97087c4 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -221,21 +221,21 @@ func (s *organizationServer) CreateOrganizationUser(ctx context.Context, req *rp authReq := &pbAuth.UserRegisterReq{UserInfo: &open_im_sdk.UserInfo{}} utils.CopyStructFields(authReq.UserInfo, req.OrganizationUser) authReq.OperationID = req.OperationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) - client := pbAuth.NewAuthClient(etcdConn) - - reply, err := client.UserRegister(context.Background(), authReq) - if err != nil { - errMsg := "UserRegister failed " + err.Error() - log.NewError(req.OperationID, errMsg) - return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil - } - if reply.CommonResp.ErrCode != 0 { - errMsg := "UserRegister failed " + reply.CommonResp.ErrMsg - log.NewError(req.OperationID, errMsg) - return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + if req.IsRegister { + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + client := pbAuth.NewAuthClient(etcdConn) + reply, err := client.UserRegister(context.Background(), authReq) + if err != nil { + errMsg := "UserRegister failed " + err.Error() + log.NewError(req.OperationID, errMsg) + return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } + if reply.CommonResp.ErrCode != 0 { + errMsg := "UserRegister failed " + reply.CommonResp.ErrMsg + log.NewError(req.OperationID, errMsg) + return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil + } } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) if !token_verify.IsManagerUserID(req.OpUserID) { errMsg := req.OperationID + " " + req.OpUserID + " is not app manager" diff --git a/pkg/proto/organization/organization.pb.go b/pkg/proto/organization/organization.pb.go index 803c23fad..4aec922db 100644 --- a/pkg/proto/organization/organization.pb.go +++ b/pkg/proto/organization/organization.pb.go @@ -37,7 +37,7 @@ func (m *CreateDepartmentReq) Reset() { *m = CreateDepartmentReq{} } func (m *CreateDepartmentReq) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentReq) ProtoMessage() {} func (*CreateDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{0} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{0} } func (m *CreateDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentReq.Unmarshal(m, b) @@ -91,7 +91,7 @@ func (m *CreateDepartmentResp) Reset() { *m = CreateDepartmentResp{} } func (m *CreateDepartmentResp) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentResp) ProtoMessage() {} func (*CreateDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{1} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{1} } func (m *CreateDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentResp.Unmarshal(m, b) @@ -145,7 +145,7 @@ func (m *UpdateDepartmentReq) Reset() { *m = UpdateDepartmentReq{} } func (m *UpdateDepartmentReq) String() string { return proto.CompactTextString(m) } func (*UpdateDepartmentReq) ProtoMessage() {} func (*UpdateDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{2} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{2} } func (m *UpdateDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateDepartmentReq.Unmarshal(m, b) @@ -198,7 +198,7 @@ func (m *UpdateDepartmentResp) Reset() { *m = UpdateDepartmentResp{} } func (m *UpdateDepartmentResp) String() string { return proto.CompactTextString(m) } func (*UpdateDepartmentResp) ProtoMessage() {} func (*UpdateDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{3} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{3} } func (m *UpdateDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateDepartmentResp.Unmarshal(m, b) @@ -245,7 +245,7 @@ func (m *GetSubDepartmentReq) Reset() { *m = GetSubDepartmentReq{} } func (m *GetSubDepartmentReq) String() string { return proto.CompactTextString(m) } func (*GetSubDepartmentReq) ProtoMessage() {} func (*GetSubDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{4} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{4} } func (m *GetSubDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSubDepartmentReq.Unmarshal(m, b) @@ -299,7 +299,7 @@ func (m *GetSubDepartmentResp) Reset() { *m = GetSubDepartmentResp{} } func (m *GetSubDepartmentResp) String() string { return proto.CompactTextString(m) } func (*GetSubDepartmentResp) ProtoMessage() {} func (*GetSubDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{5} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{5} } func (m *GetSubDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSubDepartmentResp.Unmarshal(m, b) @@ -353,7 +353,7 @@ func (m *DeleteDepartmentReq) Reset() { *m = DeleteDepartmentReq{} } func (m *DeleteDepartmentReq) String() string { return proto.CompactTextString(m) } func (*DeleteDepartmentReq) ProtoMessage() {} func (*DeleteDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{6} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{6} } func (m *DeleteDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteDepartmentReq.Unmarshal(m, b) @@ -406,7 +406,7 @@ func (m *DeleteDepartmentResp) Reset() { *m = DeleteDepartmentResp{} } func (m *DeleteDepartmentResp) String() string { return proto.CompactTextString(m) } func (*DeleteDepartmentResp) ProtoMessage() {} func (*DeleteDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{7} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{7} } func (m *DeleteDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteDepartmentResp.Unmarshal(m, b) @@ -452,7 +452,7 @@ func (m *GetDepartmentParentIDListReq) Reset() { *m = GetDepartmentParen func (m *GetDepartmentParentIDListReq) String() string { return proto.CompactTextString(m) } func (*GetDepartmentParentIDListReq) ProtoMessage() {} func (*GetDepartmentParentIDListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{8} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{8} } func (m *GetDepartmentParentIDListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentParentIDListReq.Unmarshal(m, b) @@ -499,7 +499,7 @@ func (m *GetDepartmentParentIDListResp) Reset() { *m = GetDepartmentPare func (m *GetDepartmentParentIDListResp) String() string { return proto.CompactTextString(m) } func (*GetDepartmentParentIDListResp) ProtoMessage() {} func (*GetDepartmentParentIDListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{9} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{9} } func (m *GetDepartmentParentIDListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentParentIDListResp.Unmarshal(m, b) @@ -544,6 +544,7 @@ type CreateOrganizationUserReq struct { OrganizationUser *sdk_ws.OrganizationUser `protobuf:"bytes,1,opt,name=organizationUser" json:"organizationUser,omitempty"` OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` OpUserID string `protobuf:"bytes,3,opt,name=opUserID" json:"opUserID,omitempty"` + IsRegister bool `protobuf:"varint,4,opt,name=IsRegister" json:"IsRegister,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -553,7 +554,7 @@ func (m *CreateOrganizationUserReq) Reset() { *m = CreateOrganizationUse func (m *CreateOrganizationUserReq) String() string { return proto.CompactTextString(m) } func (*CreateOrganizationUserReq) ProtoMessage() {} func (*CreateOrganizationUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{10} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{10} } func (m *CreateOrganizationUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateOrganizationUserReq.Unmarshal(m, b) @@ -594,6 +595,13 @@ func (m *CreateOrganizationUserReq) GetOpUserID() string { return "" } +func (m *CreateOrganizationUserReq) GetIsRegister() bool { + if m != nil { + return m.IsRegister + } + return false +} + type CreateOrganizationUserResp struct { ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` @@ -606,7 +614,7 @@ func (m *CreateOrganizationUserResp) Reset() { *m = CreateOrganizationUs func (m *CreateOrganizationUserResp) String() string { return proto.CompactTextString(m) } func (*CreateOrganizationUserResp) ProtoMessage() {} func (*CreateOrganizationUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{11} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{11} } func (m *CreateOrganizationUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateOrganizationUserResp.Unmarshal(m, b) @@ -653,7 +661,7 @@ func (m *UpdateOrganizationUserReq) Reset() { *m = UpdateOrganizationUse func (m *UpdateOrganizationUserReq) String() string { return proto.CompactTextString(m) } func (*UpdateOrganizationUserReq) ProtoMessage() {} func (*UpdateOrganizationUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{12} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{12} } func (m *UpdateOrganizationUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateOrganizationUserReq.Unmarshal(m, b) @@ -706,7 +714,7 @@ func (m *UpdateOrganizationUserResp) Reset() { *m = UpdateOrganizationUs func (m *UpdateOrganizationUserResp) String() string { return proto.CompactTextString(m) } func (*UpdateOrganizationUserResp) ProtoMessage() {} func (*UpdateOrganizationUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{13} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{13} } func (m *UpdateOrganizationUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateOrganizationUserResp.Unmarshal(m, b) @@ -753,7 +761,7 @@ func (m *CreateDepartmentMemberReq) Reset() { *m = CreateDepartmentMembe func (m *CreateDepartmentMemberReq) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentMemberReq) ProtoMessage() {} func (*CreateDepartmentMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{14} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{14} } func (m *CreateDepartmentMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentMemberReq.Unmarshal(m, b) @@ -806,7 +814,7 @@ func (m *CreateDepartmentMemberResp) Reset() { *m = CreateDepartmentMemb func (m *CreateDepartmentMemberResp) String() string { return proto.CompactTextString(m) } func (*CreateDepartmentMemberResp) ProtoMessage() {} func (*CreateDepartmentMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{15} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{15} } func (m *CreateDepartmentMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateDepartmentMemberResp.Unmarshal(m, b) @@ -853,7 +861,7 @@ func (m *GetUserInDepartmentReq) Reset() { *m = GetUserInDepartmentReq{} func (m *GetUserInDepartmentReq) String() string { return proto.CompactTextString(m) } func (*GetUserInDepartmentReq) ProtoMessage() {} func (*GetUserInDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{16} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{16} } func (m *GetUserInDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInDepartmentReq.Unmarshal(m, b) @@ -907,7 +915,7 @@ func (m *GetUserInDepartmentResp) Reset() { *m = GetUserInDepartmentResp func (m *GetUserInDepartmentResp) String() string { return proto.CompactTextString(m) } func (*GetUserInDepartmentResp) ProtoMessage() {} func (*GetUserInDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{17} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{17} } func (m *GetUserInDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInDepartmentResp.Unmarshal(m, b) @@ -961,7 +969,7 @@ func (m *UpdateUserInDepartmentReq) Reset() { *m = UpdateUserInDepartmen func (m *UpdateUserInDepartmentReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInDepartmentReq) ProtoMessage() {} func (*UpdateUserInDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{18} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{18} } func (m *UpdateUserInDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInDepartmentReq.Unmarshal(m, b) @@ -1014,7 +1022,7 @@ func (m *UpdateUserInDepartmentResp) Reset() { *m = UpdateUserInDepartme func (m *UpdateUserInDepartmentResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInDepartmentResp) ProtoMessage() {} func (*UpdateUserInDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{19} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{19} } func (m *UpdateUserInDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInDepartmentResp.Unmarshal(m, b) @@ -1062,7 +1070,7 @@ func (m *DeleteUserInDepartmentReq) Reset() { *m = DeleteUserInDepartmen func (m *DeleteUserInDepartmentReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserInDepartmentReq) ProtoMessage() {} func (*DeleteUserInDepartmentReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{20} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{20} } func (m *DeleteUserInDepartmentReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserInDepartmentReq.Unmarshal(m, b) @@ -1122,7 +1130,7 @@ func (m *DeleteUserInDepartmentResp) Reset() { *m = DeleteUserInDepartme func (m *DeleteUserInDepartmentResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserInDepartmentResp) ProtoMessage() {} func (*DeleteUserInDepartmentResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{21} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{21} } func (m *DeleteUserInDepartmentResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserInDepartmentResp.Unmarshal(m, b) @@ -1169,7 +1177,7 @@ func (m *DeleteOrganizationUserReq) Reset() { *m = DeleteOrganizationUse func (m *DeleteOrganizationUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteOrganizationUserReq) ProtoMessage() {} func (*DeleteOrganizationUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{22} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{22} } func (m *DeleteOrganizationUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteOrganizationUserReq.Unmarshal(m, b) @@ -1222,7 +1230,7 @@ func (m *DeleteOrganizationUserResp) Reset() { *m = DeleteOrganizationUs func (m *DeleteOrganizationUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteOrganizationUserResp) ProtoMessage() {} func (*DeleteOrganizationUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{23} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{23} } func (m *DeleteOrganizationUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteOrganizationUserResp.Unmarshal(m, b) @@ -1269,7 +1277,7 @@ func (m *GetDepartmentMemberReq) Reset() { *m = GetDepartmentMemberReq{} func (m *GetDepartmentMemberReq) String() string { return proto.CompactTextString(m) } func (*GetDepartmentMemberReq) ProtoMessage() {} func (*GetDepartmentMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{24} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{24} } func (m *GetDepartmentMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentMemberReq.Unmarshal(m, b) @@ -1323,7 +1331,7 @@ func (m *GetDepartmentMemberResp) Reset() { *m = GetDepartmentMemberResp func (m *GetDepartmentMemberResp) String() string { return proto.CompactTextString(m) } func (*GetDepartmentMemberResp) ProtoMessage() {} func (*GetDepartmentMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{25} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{25} } func (m *GetDepartmentMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentMemberResp.Unmarshal(m, b) @@ -1376,7 +1384,7 @@ func (m *GetDepartmentRelatedGroupIDListReq) Reset() { *m = GetDepartmen func (m *GetDepartmentRelatedGroupIDListReq) String() string { return proto.CompactTextString(m) } func (*GetDepartmentRelatedGroupIDListReq) ProtoMessage() {} func (*GetDepartmentRelatedGroupIDListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{26} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{26} } func (m *GetDepartmentRelatedGroupIDListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentRelatedGroupIDListReq.Unmarshal(m, b) @@ -1423,7 +1431,7 @@ func (m *GetDepartmentRelatedGroupIDListResp) Reset() { *m = GetDepartme func (m *GetDepartmentRelatedGroupIDListResp) String() string { return proto.CompactTextString(m) } func (*GetDepartmentRelatedGroupIDListResp) ProtoMessage() {} func (*GetDepartmentRelatedGroupIDListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_organization_6d9a9b5829486353, []int{27} + return fileDescriptor_organization_2845c40b2de0bcf0, []int{27} } func (m *GetDepartmentRelatedGroupIDListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetDepartmentRelatedGroupIDListResp.Unmarshal(m, b) @@ -1997,62 +2005,64 @@ var _Organization_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("organization/organization.proto", fileDescriptor_organization_6d9a9b5829486353) -} - -var fileDescriptor_organization_6d9a9b5829486353 = []byte{ - // 846 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcf, 0x6e, 0xd3, 0x4c, - 0x10, 0x97, 0x9b, 0xef, 0x2b, 0x74, 0x52, 0xa1, 0x68, 0x5b, 0x85, 0xd4, 0x50, 0x35, 0x75, 0x5b, - 0x35, 0x2a, 0x52, 0x02, 0xe5, 0xc8, 0x8d, 0x06, 0xa5, 0x91, 0x28, 0x41, 0x41, 0x3d, 0x94, 0x4b, - 0xe4, 0xe0, 0x25, 0x8a, 0xd2, 0xda, 0xdb, 0xb5, 0x43, 0x45, 0x1f, 0x80, 0x2b, 0x27, 0x2e, 0x88, - 0x27, 0xe0, 0xc4, 0x9b, 0xf0, 0x4a, 0xc8, 0x6b, 0x37, 0x59, 0xef, 0x8e, 0x93, 0xd4, 0x4d, 0x51, - 0x39, 0x7a, 0xb2, 0xfb, 0x9b, 0x7f, 0x3b, 0x33, 0xbf, 0x09, 0x6c, 0x78, 0xbc, 0x67, 0xbb, 0xfd, - 0x4b, 0x3b, 0xe8, 0x7b, 0x6e, 0x4d, 0xfe, 0xa8, 0x32, 0xee, 0x05, 0x1e, 0x59, 0x96, 0x65, 0xe6, - 0x66, 0x8b, 0x51, 0xb7, 0xd3, 0x3c, 0xaa, 0xb1, 0x41, 0xaf, 0x26, 0x0e, 0xd4, 0x7c, 0x67, 0xd0, - 0xb9, 0xf0, 0x6b, 0x17, 0x7e, 0x74, 0xc1, 0xfa, 0x6e, 0xc0, 0xca, 0x01, 0xa7, 0x76, 0x40, 0xeb, - 0x94, 0xd9, 0x3c, 0x38, 0xa3, 0x6e, 0xd0, 0xa6, 0xe7, 0xe4, 0x15, 0x3c, 0x70, 0x46, 0x82, 0xa6, - 0xfb, 0xd1, 0x2b, 0x19, 0x65, 0xa3, 0x92, 0xdf, 0x5f, 0xaf, 0xfa, 0x94, 0x7f, 0xa2, 0xbc, 0x63, - 0xb3, 0x7e, 0x87, 0xd9, 0xdc, 0x3e, 0xf3, 0xab, 0xd2, 0x4d, 0xe5, 0x12, 0x29, 0x43, 0xde, 0x63, - 0x94, 0x0b, 0x73, 0x9a, 0xf5, 0xd2, 0x42, 0xd9, 0xa8, 0x2c, 0xb5, 0x65, 0x11, 0x31, 0xe1, 0xbe, - 0xc7, 0x8e, 0x7d, 0xca, 0x9b, 0xf5, 0x52, 0x4e, 0xfc, 0x3c, 0xfa, 0xb6, 0xbe, 0x1a, 0xb0, 0xaa, - 0x1b, 0xe7, 0x33, 0x52, 0x82, 0x7b, 0x94, 0xf3, 0x03, 0xcf, 0xa1, 0xc2, 0xac, 0xff, 0xdb, 0x57, - 0x9f, 0xa4, 0x08, 0x8b, 0x94, 0xf3, 0x23, 0xbf, 0x17, 0xeb, 0x8a, 0xbf, 0x10, 0x7f, 0x72, 0x19, - 0xfc, 0x11, 0xe1, 0x3a, 0x66, 0xce, 0xdd, 0x0c, 0xd7, 0x21, 0xac, 0xea, 0xb6, 0x65, 0x89, 0x96, - 0x75, 0x01, 0x2b, 0x0d, 0x1a, 0xbc, 0x1b, 0x76, 0x93, 0x5e, 0x5a, 0xb0, 0x2c, 0x19, 0x5c, 0x17, - 0x68, 0x4b, 0xed, 0x84, 0x6c, 0x0e, 0x19, 0xd7, 0x35, 0xdf, 0x3c, 0xe3, 0xaf, 0xfb, 0x7e, 0x50, - 0xca, 0x95, 0x73, 0xd7, 0x4a, 0x49, 0x78, 0x29, 0x0c, 0x45, 0x9d, 0x9e, 0x52, 0x35, 0xe1, 0xb7, - 0x1f, 0x8a, 0x43, 0x58, 0xd5, 0x15, 0x67, 0xca, 0xa6, 0x03, 0x8f, 0x1b, 0x34, 0x18, 0xc3, 0xbc, - 0xb5, 0xb9, 0x30, 0x30, 0xf4, 0x6f, 0x6e, 0xbe, 0x58, 0x43, 0x58, 0x9f, 0xa0, 0x25, 0x53, 0x0a, - 0x2d, 0x58, 0x66, 0x12, 0x8a, 0x48, 0xe0, 0x52, 0x3b, 0x21, 0xb3, 0x7e, 0x1a, 0xb0, 0x16, 0xf5, - 0x88, 0x96, 0xd4, 0xfa, 0xc2, 0x18, 0x86, 0xae, 0xb5, 0xa0, 0xe0, 0x29, 0xe2, 0xb8, 0x32, 0xb7, - 0x90, 0x67, 0xa0, 0x21, 0x68, 0x97, 0x6f, 0x98, 0xd3, 0x37, 0x60, 0xa6, 0xd9, 0x9a, 0x29, 0xb3, - 0xa1, 0xf3, 0x51, 0xc9, 0xff, 0x1b, 0xce, 0xa7, 0xd9, 0x9a, 0xd9, 0x79, 0x75, 0x3a, 0x1c, 0xd1, - 0xb3, 0xee, 0xc8, 0x79, 0x47, 0x11, 0x4f, 0x70, 0x5e, 0x43, 0xd0, 0x2e, 0xcf, 0x2b, 0xf3, 0xba, - 0xad, 0x99, 0x9c, 0x77, 0xa1, 0xd8, 0xa0, 0x81, 0x00, 0x77, 0x93, 0x9d, 0xa9, 0x08, 0x8b, 0xc3, - 0xc8, 0x86, 0xa8, 0x8e, 0xe3, 0xaf, 0x1b, 0xda, 0xff, 0xc3, 0x80, 0x87, 0xa8, 0xc2, 0x4c, 0x85, - 0xdd, 0x82, 0xc2, 0x50, 0x41, 0x8a, 0xe7, 0x31, 0x96, 0x1c, 0x4d, 0xa9, 0x76, 0x59, 0x2a, 0x04, - 0x2c, 0x24, 0x77, 0xef, 0x2d, 0xa4, 0xd9, 0x9a, 0xe9, 0x2d, 0x7c, 0x33, 0x60, 0x2d, 0x1a, 0x15, - 0x7f, 0xed, 0x3d, 0x68, 0x33, 0xe3, 0x3f, 0x7d, 0x66, 0x84, 0x7e, 0xa6, 0x99, 0x95, 0xc9, 0xcf, - 0xf3, 0x2b, 0x37, 0xb1, 0x66, 0x77, 0x3b, 0xcf, 0x7e, 0xe4, 0xc2, 0x9c, 0x7a, 0xd6, 0xa5, 0x28, - 0x5b, 0xac, 0x5f, 0xdd, 0x3e, 0xa1, 0xf8, 0x15, 0x95, 0xf0, 0x7c, 0x1a, 0x10, 0xf9, 0x00, 0xa5, - 0x30, 0xc2, 0x2a, 0x9a, 0x44, 0xb4, 0x76, 0x53, 0x4a, 0x59, 0x33, 0x20, 0x15, 0xc8, 0xe2, 0x60, - 0x25, 0x2c, 0x6e, 0xd3, 0x53, 0x3b, 0xa0, 0x4e, 0x83, 0x7b, 0x43, 0x36, 0xe6, 0x2f, 0x4a, 0x58, - 0x0c, 0x3d, 0x2c, 0x7b, 0x72, 0x03, 0x88, 0xc9, 0xc4, 0x82, 0x20, 0x13, 0x9a, 0xdc, 0xfa, 0x0c, - 0x5b, 0x53, 0x75, 0x66, 0x8a, 0x58, 0x19, 0xf2, 0xbd, 0x31, 0x48, 0x4c, 0x66, 0x64, 0xd1, 0xfe, - 0xef, 0x3c, 0x24, 0x16, 0x38, 0x72, 0x02, 0x05, 0x75, 0x6a, 0x90, 0xcd, 0x6a, 0x62, 0xef, 0x43, - 0x96, 0x37, 0xd3, 0x9a, 0x76, 0xc4, 0x67, 0x21, 0xb4, 0xba, 0x2c, 0xa8, 0xd0, 0xc8, 0xa2, 0xa3, - 0x42, 0xa3, 0xfb, 0xc6, 0x09, 0x14, 0x54, 0x0e, 0xaf, 0x42, 0x23, 0xdb, 0x85, 0x0a, 0x8d, 0xae, - 0x01, 0x27, 0x50, 0x50, 0x49, 0xb1, 0x0a, 0x8d, 0xb0, 0x75, 0x15, 0x1a, 0xe5, 0xd5, 0x01, 0xac, - 0xa5, 0xf2, 0x57, 0xb2, 0xa7, 0xd9, 0x96, 0x4a, 0xa7, 0xcd, 0x27, 0x33, 0x9f, 0xf5, 0x19, 0x19, - 0x40, 0x11, 0x67, 0x84, 0x64, 0x17, 0x4b, 0x22, 0xd2, 0xf9, 0xcc, 0xca, 0x6c, 0x07, 0x23, 0x65, - 0x38, 0x03, 0x53, 0x95, 0xa5, 0x72, 0x4a, 0x55, 0xd9, 0x04, 0x42, 0x37, 0x80, 0x22, 0xde, 0x3a, - 0x55, 0x65, 0xa9, 0x3d, 0x5d, 0x55, 0x36, 0xa1, 0x13, 0x8f, 0xc2, 0xa8, 0xb6, 0x11, 0x3c, 0x8c, - 0x48, 0x03, 0xc6, 0xc3, 0x88, 0x36, 0xcb, 0xae, 0xd8, 0x8e, 0xd5, 0xa1, 0x46, 0xb6, 0xb5, 0xbc, - 0x23, 0xe3, 0xd8, 0xdc, 0x99, 0xe1, 0x94, 0x1c, 0x3d, 0x4d, 0x0d, 0x1a, 0x3d, 0x4c, 0x53, 0x65, - 0xb6, 0x83, 0xf2, 0xbb, 0x98, 0xa6, 0x2c, 0x95, 0x62, 0xe1, 0xef, 0x02, 0x55, 0x16, 0x45, 0x4f, - 0xcb, 0xd3, 0xf6, 0x84, 0xaa, 0x19, 0x27, 0x69, 0x67, 0x86, 0x53, 0x3e, 0x23, 0x5f, 0x0c, 0xd8, - 0x98, 0xd2, 0xc4, 0xc9, 0xd3, 0x09, 0x50, 0xe8, 0x9c, 0x31, 0x9f, 0x5d, 0xf3, 0x86, 0xcf, 0x5e, - 0xae, 0xbf, 0x7f, 0x54, 0x4d, 0xfc, 0x4f, 0xf7, 0x42, 0xfe, 0xe8, 0x2e, 0x8a, 0x3f, 0xe1, 0x9e, - 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xfc, 0xb9, 0x33, 0xd8, 0x13, 0x00, 0x00, + proto.RegisterFile("organization/organization.proto", fileDescriptor_organization_2845c40b2de0bcf0) +} + +var fileDescriptor_organization_2845c40b2de0bcf0 = []byte{ + // 869 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4f, 0x4f, 0x13, 0x41, + 0x14, 0xcf, 0x52, 0x44, 0x78, 0x25, 0xa6, 0x19, 0x48, 0x6d, 0x57, 0x91, 0xb2, 0x40, 0x68, 0x30, + 0x69, 0x15, 0x8f, 0xde, 0xa4, 0xa6, 0x34, 0x11, 0x6b, 0xd6, 0x70, 0xc0, 0x4b, 0xb3, 0xb5, 0x63, + 0xd3, 0x14, 0xba, 0xc3, 0xcc, 0x56, 0x22, 0x1f, 0xc0, 0xab, 0x27, 0x2f, 0xc6, 0x4f, 0xe0, 0xc9, + 0xcf, 0xe1, 0xc5, 0xaf, 0x64, 0x76, 0xb7, 0xb4, 0xb3, 0x33, 0x6f, 0xdb, 0xb2, 0x2d, 0x86, 0xe3, + 0xbc, 0x9d, 0xf9, 0xbd, 0xf7, 0x7e, 0x6f, 0xe6, 0xfd, 0x59, 0xd8, 0x74, 0x79, 0xdb, 0xe9, 0x75, + 0xae, 0x1c, 0xaf, 0xe3, 0xf6, 0xca, 0xf2, 0xa2, 0xc4, 0xb8, 0xeb, 0xb9, 0x64, 0x55, 0x96, 0x99, + 0x5b, 0x75, 0x46, 0x7b, 0x8d, 0xda, 0x71, 0x99, 0x75, 0xdb, 0xe5, 0x60, 0x43, 0x59, 0xb4, 0xba, + 0x8d, 0x4b, 0x51, 0xbe, 0x14, 0xe1, 0x01, 0xeb, 0x87, 0x01, 0x6b, 0x87, 0x9c, 0x3a, 0x1e, 0xad, + 0x50, 0xe6, 0x70, 0xef, 0x9c, 0xf6, 0x3c, 0x9b, 0x5e, 0x90, 0xd7, 0xf0, 0xa0, 0x35, 0x14, 0xd4, + 0x7a, 0x9f, 0xdc, 0x9c, 0x51, 0x30, 0x8a, 0xe9, 0x83, 0x8d, 0x92, 0xa0, 0xfc, 0x33, 0xe5, 0x0d, + 0x87, 0x75, 0x1a, 0xcc, 0xe1, 0xce, 0xb9, 0x28, 0x49, 0x27, 0x95, 0x43, 0xa4, 0x00, 0x69, 0x97, + 0x51, 0x1e, 0x98, 0x53, 0xab, 0xe4, 0x16, 0x0a, 0x46, 0x71, 0xc5, 0x96, 0x45, 0xc4, 0x84, 0x65, + 0x97, 0x9d, 0x08, 0xca, 0x6b, 0x95, 0x5c, 0x2a, 0xf8, 0x3c, 0x5c, 0x5b, 0xdf, 0x0c, 0x58, 0xd7, + 0x8d, 0x13, 0x8c, 0xe4, 0xe0, 0x3e, 0xe5, 0xfc, 0xd0, 0x6d, 0xd1, 0xc0, 0xac, 0x7b, 0xf6, 0xf5, + 0x92, 0x64, 0x61, 0x89, 0x72, 0x7e, 0x2c, 0xda, 0x03, 0x5d, 0x83, 0x15, 0xe2, 0x4f, 0x2a, 0x81, + 0x3f, 0x01, 0x5d, 0x27, 0xac, 0x75, 0x37, 0xe9, 0x3a, 0x82, 0x75, 0xdd, 0xb6, 0x24, 0x6c, 0x59, + 0x97, 0xb0, 0x56, 0xa5, 0xde, 0xfb, 0x7e, 0x33, 0xea, 0xa5, 0x05, 0xab, 0x92, 0xc1, 0x95, 0x00, + 0x6d, 0xc5, 0x8e, 0xc8, 0xe6, 0x10, 0x71, 0x5d, 0xf3, 0xec, 0x11, 0x7f, 0xd3, 0x11, 0x5e, 0x2e, + 0x55, 0x48, 0xdd, 0x28, 0x24, 0xfe, 0x21, 0x9f, 0x8a, 0x0a, 0x3d, 0xa3, 0x6a, 0xc0, 0x6f, 0x9f, + 0x8a, 0x23, 0x58, 0xd7, 0x15, 0x27, 0x8a, 0x66, 0x0b, 0x1e, 0x57, 0xa9, 0x37, 0x82, 0x79, 0xe7, + 0xf0, 0xc0, 0x40, 0xdf, 0xbf, 0xb9, 0xf9, 0x62, 0xf5, 0x61, 0x63, 0x8c, 0x96, 0x44, 0x21, 0xb4, + 0x60, 0x95, 0x49, 0x28, 0x41, 0x00, 0x57, 0xec, 0x88, 0xcc, 0xfa, 0x63, 0x40, 0x3e, 0xcc, 0x11, + 0x75, 0x29, 0xf5, 0xf9, 0x1c, 0xfa, 0xae, 0xd5, 0x21, 0xe3, 0x2a, 0xe2, 0xc1, 0xcb, 0xdc, 0x46, + 0xae, 0x81, 0x86, 0xa0, 0x1d, 0x9e, 0x2d, 0xa6, 0xe4, 0x09, 0x40, 0x4d, 0xd8, 0xb4, 0xdd, 0x11, + 0x1e, 0xe5, 0xb9, 0xc5, 0x82, 0x51, 0x5c, 0xb6, 0x25, 0x89, 0xf5, 0x16, 0xcc, 0x38, 0x5f, 0x12, + 0x45, 0xfe, 0x97, 0x01, 0xf9, 0x30, 0x25, 0xdc, 0x7d, 0x72, 0x7c, 0xe7, 0xe3, 0x6c, 0x4d, 0xec, + 0xbc, 0x5a, 0x3d, 0x8e, 0xe9, 0x79, 0x73, 0xe8, 0x7c, 0x4b, 0x11, 0x8f, 0x71, 0x5e, 0x43, 0xd0, + 0x0e, 0xcf, 0xee, 0x7c, 0x9c, 0xad, 0x89, 0x9c, 0xef, 0x41, 0xb6, 0x4a, 0xbd, 0x00, 0xbc, 0x17, + 0xcd, 0x5c, 0x59, 0x58, 0xea, 0x87, 0x36, 0x84, 0xef, 0x7c, 0xb0, 0x9a, 0xd1, 0xfe, 0x9f, 0x06, + 0x3c, 0x44, 0x15, 0x26, 0x7a, 0xf8, 0x75, 0xc8, 0xf4, 0x15, 0xa4, 0x41, 0xbd, 0xc6, 0x82, 0xa3, + 0x29, 0xd5, 0x0e, 0x4b, 0x0f, 0x01, 0xa3, 0xe4, 0xee, 0xdd, 0x85, 0x38, 0x5b, 0x13, 0xdd, 0x85, + 0xef, 0x06, 0xe4, 0xc3, 0x52, 0xf2, 0xdf, 0xee, 0x83, 0x56, 0x53, 0x16, 0xf5, 0x9a, 0xe2, 0xfb, + 0x19, 0x67, 0x56, 0x22, 0x3f, 0x2f, 0xae, 0xdd, 0xc4, 0x92, 0xdd, 0xed, 0x5c, 0xfb, 0xa1, 0x0b, + 0x73, 0xca, 0x59, 0x57, 0xc1, 0xb3, 0xc5, 0xf2, 0xd5, 0xed, 0x37, 0x1c, 0xbf, 0xc3, 0x27, 0x3c, + 0x9f, 0x04, 0x44, 0x3e, 0x42, 0xce, 0x67, 0x58, 0x45, 0x93, 0x1a, 0xb1, 0xbd, 0x98, 0xa7, 0xac, + 0x19, 0x10, 0x0b, 0x64, 0x71, 0xb0, 0x22, 0x16, 0xdb, 0xf4, 0xcc, 0xf1, 0x68, 0xab, 0xca, 0xdd, + 0x3e, 0x1b, 0xf5, 0x37, 0x0a, 0x2d, 0x86, 0x4e, 0xcb, 0xbe, 0x9c, 0x00, 0x06, 0xcd, 0xc6, 0x42, + 0xd0, 0x6c, 0x68, 0x72, 0xeb, 0x0b, 0x6c, 0x4f, 0xd4, 0x99, 0x88, 0xb1, 0x02, 0xa4, 0xdb, 0x23, + 0x90, 0x41, 0xb3, 0x23, 0x8b, 0x0e, 0xfe, 0xa6, 0x21, 0x32, 0xe0, 0x91, 0x53, 0xc8, 0xa8, 0x55, + 0x83, 0x6c, 0x95, 0x22, 0x73, 0x21, 0x32, 0xdc, 0x99, 0xd6, 0xa4, 0x2d, 0x82, 0xf9, 0xd0, 0xea, + 0x30, 0xa1, 0x42, 0x23, 0x83, 0x90, 0x0a, 0x8d, 0xce, 0x23, 0xa7, 0x90, 0x51, 0x7b, 0x7c, 0x15, + 0x1a, 0x99, 0x3e, 0x54, 0x68, 0x74, 0x4c, 0x38, 0x85, 0x8c, 0xda, 0x34, 0xab, 0xd0, 0x48, 0x37, + 0xaf, 0x42, 0xa3, 0x7d, 0xb7, 0x07, 0xf9, 0xd8, 0xfe, 0x96, 0xec, 0x6b, 0xb6, 0xc5, 0xb6, 0xdb, + 0xe6, 0xd3, 0xa9, 0xf7, 0x0a, 0x46, 0xba, 0x90, 0xc5, 0x3b, 0x42, 0xb2, 0x87, 0x05, 0x11, 0xc9, + 0x7c, 0x66, 0x71, 0xba, 0x8d, 0xa1, 0x32, 0xbc, 0x03, 0x53, 0x95, 0xc5, 0xf6, 0x94, 0xaa, 0xb2, + 0x31, 0x0d, 0x5d, 0x17, 0xb2, 0x78, 0xea, 0x54, 0x95, 0xc5, 0xe6, 0x74, 0x55, 0xd9, 0x98, 0x4c, + 0x3c, 0xa4, 0x51, 0x4d, 0x23, 0x38, 0x8d, 0x48, 0x02, 0xc6, 0x69, 0x44, 0x93, 0x65, 0x33, 0x98, + 0x9e, 0xd5, 0xa2, 0x46, 0x76, 0xb4, 0xb8, 0x23, 0xe5, 0xd8, 0xdc, 0x9d, 0x62, 0x97, 0xcc, 0x9e, + 0xa6, 0x06, 0x65, 0x0f, 0xd3, 0x54, 0x9c, 0x6e, 0xa3, 0x7c, 0x2f, 0x26, 0x29, 0x8b, 0x6d, 0xb1, + 0xf0, 0x7b, 0x81, 0x2a, 0x0b, 0xd9, 0xd3, 0xe2, 0xb4, 0x33, 0xe6, 0xd5, 0x8c, 0x82, 0xb4, 0x3b, + 0xc5, 0x2e, 0xc1, 0xc8, 0x57, 0x03, 0x36, 0x27, 0x24, 0x71, 0xf2, 0x6c, 0x0c, 0x14, 0x5a, 0x67, + 0xcc, 0xe7, 0x37, 0x3c, 0x21, 0xd8, 0xab, 0x8d, 0x0f, 0x8f, 0x4a, 0x91, 0xff, 0x78, 0x2f, 0xe5, + 0x45, 0x73, 0x29, 0xf8, 0x49, 0xf7, 0xe2, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xff, 0x09, + 0x1d, 0xf8, 0x13, 0x00, 0x00, } diff --git a/pkg/proto/organization/organization.proto b/pkg/proto/organization/organization.proto index 8c3bd5026..ef7aedbf7 100644 --- a/pkg/proto/organization/organization.proto +++ b/pkg/proto/organization/organization.proto @@ -67,6 +67,7 @@ message CreateOrganizationUserReq{ server_api_params.OrganizationUser organizationUser = 1; string operationID = 2; string opUserID = 3; + bool IsRegister = 4; } From a115151616121ccbff73bc0d379527513ee7b49a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 17:08:47 +0800 Subject: [PATCH 093/256] fix bug --- internal/rpc/organization/organization.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 7b97087c4..7a1d427ba 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -246,7 +246,7 @@ func (s *organizationServer) CreateOrganizationUser(ctx context.Context, req *rp utils.CopyStructFields(&organizationUser, req.OrganizationUser) organizationUser.Birth = utils.UnixSecondToTime(int64(req.OrganizationUser.Birth)) log.Debug(req.OperationID, "src ", *req.OrganizationUser, "dst ", organizationUser) - err = imdb.CreateOrganizationUser(&organizationUser) + err := imdb.CreateOrganizationUser(&organizationUser) if err != nil { errMsg := req.OperationID + " " + "CreateOrganizationUser failed " + err.Error() log.Error(req.OperationID, errMsg, organizationUser) From f650e73d5ca21f4eeef50b2ce182e6d73d8b94e0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 17:36:24 +0800 Subject: [PATCH 094/256] fix bug --- internal/demo/register/onboarding_process.go | 2 +- .../db/mysql_model/im_mysql_model/organization_model.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index d92ea2c6a..d1f1386ff 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -50,7 +50,7 @@ func createOrganizationUser(operationID, userID, userName string) error { CreateTime: uint32(time.Now().Unix()), }, OperationID: operationID, - OpUserID: userID, + OpUserID: config.Config.Manager.AppManagerUid[0], IsRegister: false, } if strings.Contains("@", userID) { diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 17a6c938f..039da3573 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -251,9 +251,9 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, var department db.Department //var parentID string dbConn.LogMode(true) - // select * from departments where department_id = (select parent_id from departments where department_id= zx234fd); - //dbConn.Table("departments").Where("department_id=?", departmentID).Pluck("parent_id", parentID).Error - err := dbConn.Table("departments").Where("department_id=?").Find(&department).Error + var parentID int + dbConn.Model(&department).Where("department_id=?", departmentID).Pluck("parent_id", &parentID) + err := dbConn.Model(&department).Where("department_id = ?", parentID).Find(&department).Error return &department, err } From 843cbe4f8071670d3240bcd35db7b0619958cdf5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 18:24:20 +0800 Subject: [PATCH 095/256] organization --- internal/demo/register/onboarding_process.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index d1f1386ff..80401530d 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -24,14 +24,16 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), "createOrganizationUser failed", err.Error()) } departmentID := config.Config.Demo.TestDepartMentID + if err := joinTestDepartment(operationID, userID, departmentID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) - } - joinGroups(operationID, userID, userName, groupIDList) + + //groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) + //} + //joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") } @@ -39,6 +41,7 @@ func createOrganizationUser(operationID, userID, userName string) error { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID) }() + log.NewInfo(operationID, utils.GetSelfFuncName(), "start createOrganizationUser") etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) client := organizationRpc.NewOrganizationClient(etcdConn) req := &organizationRpc.CreateOrganizationUserReq{ @@ -98,6 +101,9 @@ func joinTestDepartment(operationID, userID, departmentID string) error { } func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error) { + defer func() { + log.NewInfo(operationID, utils.GetSelfFuncName(), departmentID) + }() etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) client := organizationRpc.NewOrganizationClient(etcdConn) req := organizationRpc.GetDepartmentParentIDListReq{ From bd14739a9e73d37b5571abfbee760f1a3d196303 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 18:40:07 +0800 Subject: [PATCH 096/256] fix bug --- internal/demo/register/onboarding_process.go | 9 +++++---- internal/rpc/organization/organization.go | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 80401530d..fa7ae1546 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -29,10 +29,11 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - //groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) - //if err != nil { - // log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) - //} + groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) + } + log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) //joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") } diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 7a1d427ba..5594e760c 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -340,13 +340,14 @@ func (s *organizationServer) CreateDepartmentMember(ctx context.Context, req *rp func (s *organizationServer) GetDepartmentParentIDList(_ context.Context, req *rpc.GetDepartmentParentIDListReq) (resp *rpc.GetDepartmentParentIDListResp, err error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req.String()) resp = &rpc.GetDepartmentParentIDListResp{} - resp.ParentIDList, err = imdb.GetDepartmentParentIDList(req.DepartmentID) + parentIDList, err := imdb.GetDepartmentParentIDList(req.DepartmentID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetDepartmentParentIDList failed", err.Error()) resp.ErrMsg = constant.ErrDB.ErrMsg + ": " + err.Error() resp.ErrCode = constant.ErrDB.ErrCode return resp, nil } + resp.ParentIDList = parentIDList log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp:", resp.String()) return resp, nil } From 6055ce9b6b37ca5124984e022041fb77cf568188 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 18:44:21 +0800 Subject: [PATCH 097/256] fix bug --- internal/demo/register/onboarding_process.go | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index fa7ae1546..180b17c93 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -120,19 +120,19 @@ func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error log.NewError(req.OperationID, utils.GetSelfFuncName(), resp) return nil, errors.New(resp.ErrMsg) } - - resp.ParentIDList = append(resp.ParentIDList, departmentID) - getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} - getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) - return nil, err - } - if getDepartmentParentIDListResp.ErrCode != 0 { - log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) - return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) - } - return getDepartmentParentIDListResp.GroupIDList, nil + return resp.ParentIDList, nil + //resp.ParentIDList = append(resp.ParentIDList, departmentID) + //getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} + //getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) + // return nil, err + //} + //if getDepartmentParentIDListResp.ErrCode != 0 { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) + // return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) + //} + //return getDepartmentParentIDListResp.GroupIDList, nil } func joinGroups(operationID, userID, userName string, groupIDList []string) { From da18950b3dd9d79cf53198049890ebb337f59d1d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:06:22 +0800 Subject: [PATCH 098/256] fix bug --- internal/demo/register/onboarding_process.go | 28 +++++++++---------- .../im_mysql_model/organization_model.go | 5 ++-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 180b17c93..1d7e610ac 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -34,7 +34,7 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) } log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) - //joinGroups(operationID, userID, userName, groupIDList) + joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") } @@ -120,19 +120,19 @@ func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error log.NewError(req.OperationID, utils.GetSelfFuncName(), resp) return nil, errors.New(resp.ErrMsg) } - return resp.ParentIDList, nil - //resp.ParentIDList = append(resp.ParentIDList, departmentID) - //getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} - //getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) - //if err != nil { - // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) - // return nil, err - //} - //if getDepartmentParentIDListResp.ErrCode != 0 { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) - // return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) - //} - //return getDepartmentParentIDListResp.GroupIDList, nil + + resp.ParentIDList = append(resp.ParentIDList, departmentID) + getDepartmentRelatedGroupIDListReq := organizationRpc.GetDepartmentRelatedGroupIDListReq{OperationID: operationID, DepartmentIDList: resp.ParentIDList} + getDepartmentParentIDListResp, err := client.GetDepartmentRelatedGroupIDList(context.Background(), &getDepartmentRelatedGroupIDListReq) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), getDepartmentRelatedGroupIDListReq.String()) + return nil, err + } + if getDepartmentParentIDListResp.ErrCode != 0 { + log.NewError(req.OperationID, utils.GetSelfFuncName(), getDepartmentParentIDListResp) + return nil, errors.New(getDepartmentParentIDListResp.ErrMsg) + } + return getDepartmentParentIDListResp.GroupIDList, nil } func joinGroups(operationID, userID, userName string, groupIDList []string) { diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 039da3573..649d0f7d3 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -251,9 +251,8 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, var department db.Department //var parentID string dbConn.LogMode(true) - var parentID int - dbConn.Model(&department).Where("department_id=?", departmentID).Pluck("parent_id", &parentID) - err := dbConn.Model(&department).Where("department_id = ?", parentID).Find(&department).Error + dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department) + err := dbConn.Model(&department).Where("department_id = ?", department.DepartmentID).Find(&department).Error return &department, err } From dff7a2809477fe4ed5554b20b4b955e1f55ab65e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:14:25 +0800 Subject: [PATCH 099/256] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 649d0f7d3..ea2e768fa 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -252,7 +252,7 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, //var parentID string dbConn.LogMode(true) dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department) - err := dbConn.Model(&department).Where("department_id = ?", department.DepartmentID).Find(&department).Error + err := dbConn.Model(&department).Where("department_id = ?", department.ParentID).Find(&department).Error return &department, err } From d9710ac2443ffbfa60e66bf699a7d199e3af92a0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:27:04 +0800 Subject: [PATCH 100/256] fix bug --- internal/demo/register/onboarding_process.go | 2 +- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 1d7e610ac..6f3f0b15f 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -147,7 +147,7 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { GroupID: groupID, Reason: "register auto join", InvitedUserIDList: []string{userID}, - OpUserID: userID, + OpUserID: config.Config.Manager.AppManagerUid[0], } resp, err := client.InviteUserToGroup(context.Background(), req) if err != nil { diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index ea2e768fa..f515f4afa 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -261,7 +261,7 @@ func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]s if err != nil { return err } - if department.ParentID != "" { + if department.DepartmentID != "" { *parentIDList = append(*parentIDList, department.ParentID) err = GetDepartmentParent(departmentID, dbConn, parentIDList) if err != nil { From ae684d6d39d29988186899017fb13ba9a4d086e0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Jun 2022 19:39:36 +0800 Subject: [PATCH 101/256] fix bug --- .../db/mysql_model/im_mysql_model/organization_model.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index f515f4afa..fb7a0ab18 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -249,10 +249,14 @@ func GetDepartmentRelatedGroupIDList(departmentIDList []string) ([]string, error func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, error) { var department db.Department + var parentDepartment db.Department //var parentID string dbConn.LogMode(true) - dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department) - err := dbConn.Model(&department).Where("department_id = ?", department.ParentID).Find(&department).Error + err := dbConn.Model(&department).Where("department_id=?", departmentID).Select("parent_id").First(&department).Error + if err != nil { + return nil, utils.Wrap(err, "") + } + err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error return &department, err } From 317e6f81bb9b379ed3fa193ed9d1b7832e622490 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 8 Jun 2022 20:26:08 +0800 Subject: [PATCH 102/256] batch push --- internal/msg_gateway/gate/rpc_server.go | 6 ++++++ internal/msg_gateway/gate/ws_server.go | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index b0adb5037..30cca624b 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -7,6 +7,7 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbRelay "Open_IM/pkg/proto/relay" + sdk_ws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "bytes" "context" @@ -142,6 +143,11 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser log.NewInfo(req.OperationID, "GetUsersOnlineStatus rpc return ", resp.String()) return &resp, nil } + +func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { + return nil +} + func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index e43a81f5a..20bd3d484 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -19,7 +19,8 @@ import ( type UserConn struct { *websocket.Conn - w *sync.Mutex + w *sync.Mutex + PushedMaxSeq uint32 } type WServer struct { wsAddr string From 6525d63459a68a908b9fcbe1028f911c2e2ca5ae Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 12:39:28 +0800 Subject: [PATCH 103/256] fix bug --- config/config.yaml | 5 +++ internal/demo/register/onboarding_process.go | 2 +- internal/msg_gateway/gate/logic.go | 2 +- internal/rpc/msg/send_msg.go | 24 ++++++++++++- internal/rpc/organization/organization.go | 5 ++- pkg/common/config/config.go | 12 ++++--- pkg/common/constant/constant.go | 35 ++++++++++--------- pkg/common/constant/error.go | 13 +++---- .../im_mysql_model/organization_model.go | 17 ++++++--- 9 files changed, 79 insertions(+), 36 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 628192e4f..29b4174d8 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -230,6 +230,11 @@ chatpersistencemysql: true reliablestorage: false #消息缓存时间 msgCacheTimeout: 1800 +#群聊已读开启 +groupMessageHasReadReceiptEnable: false +#单聊已读开启 +singleMessageHasReadReceiptEnable: false + #token config tokenpolicy: diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 6f3f0b15f..501d49813 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -181,7 +181,7 @@ func onboardingProcessNotification(operationID, userID, groupID string) { Content: content, MsgFrom: constant.UserMsgType, ContentType: constant.Text, - SessionType: constant.SingleChatType, + SessionType: constant.GroupChatType, OperationID: operationID, } // notification user join group diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 7ce2d65ba..b46abee7c 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -210,7 +210,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { } func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) if isPass { diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index ca355abc4..fe9b0360d 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -49,6 +49,24 @@ type MsgCallBackResp struct { } } +func isMessageHasReadEnabled(pb *pbChat.SendMsgReq) (bool, int32, string) { + switch pb.MsgData.ContentType { + case constant.HasReadReceipt: + if config.Config.SingleMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + case constant.GroupHasReadReceipt: + if config.Config.GroupMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + } + return true, 0, "" +} + func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { if data.MsgData.SessionType == constant.SingleChatType { if utils.IsContain(data.MsgData.SendID, config.Config.Manager.AppManagerUid) { @@ -150,7 +168,11 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S replay := pbChat.SendMsgResp{} newTime := db.GetCurrentTimestampByMill() log.NewWarn(pb.OperationID, "rpc sendMsg come here", pb.String(), pb.MsgData.ClientMsgID) - flag, errCode, errMsg := userRelationshipVerification(pb) + flag, errCode, errMsg := isMessageHasReadEnabled(pb) + if !flag { + return returnMsg(&replay, pb, errCode, errMsg, "", 0) + } + flag, errCode, errMsg = userRelationshipVerification(pb) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 5594e760c..7b3624257 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -102,7 +102,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea log.Error(req.OperationID, errMsg) return &rpc.CreateDepartmentResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } - err, createdDepartment := imdb.GetDepartment(department.DepartmentID) + createdDepartment, err := imdb.GetDepartment(department.DepartmentID) if err != nil { errMsg := req.OperationID + " " + "GetDepartment failed " + err.Error() + department.DepartmentID log.Error(req.OperationID, errMsg) @@ -141,6 +141,9 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea resp.ErrMsg = constant.ErrDB.ErrMsg + " createGroup failed " + createGroupResp.ErrMsg return resp, nil } + if err := imdb.SetDepartmentRelatedGroupID(createGroupResp.GroupInfo.GroupID, department.DepartmentID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetDepartmentRelatedGroupID failed", err.Error()) + } return resp, nil } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 8250199a7..dff8a693e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -214,11 +214,13 @@ type config struct { MsgToPush string `yaml:"msgToPush"` } } - Secret string `yaml:"secret"` - MultiLoginPolicy int `yaml:"multiloginpolicy"` - ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` - ReliableStorage bool `yaml:"reliablestorage"` - MsgCacheTimeout int `yaml:"msgCacheTimeout"` + Secret string `yaml:"secret"` + MultiLoginPolicy int `yaml:"multiloginpolicy"` + ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` + ReliableStorage bool `yaml:"reliablestorage"` + MsgCacheTimeout int `yaml:"msgCacheTimeout"` + GroupMessageHasReadReceiptEnable bool `yaml:"groupMessageHasReadReceiptEnable"` + SingleMessageHasReadReceiptEnable bool `yaml:"singleMessageHasReadReceiptEnable"` TokenPolicy struct { AccessSecret string `yaml:"accessSecret"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index bae1f15b9..fe7dbc9f5 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -28,23 +28,24 @@ const ( ///ContentType //UserRelated - Text = 101 - Picture = 102 - Voice = 103 - Video = 104 - File = 105 - AtText = 106 - Merger = 107 - Card = 108 - Location = 109 - Custom = 110 - Revoke = 111 - HasReadReceipt = 112 - Typing = 113 - Quote = 114 - Common = 200 - GroupMsg = 201 - SignalMsg = 202 + Text = 101 + Picture = 102 + Voice = 103 + Video = 104 + File = 105 + AtText = 106 + Merger = 107 + Card = 108 + Location = 109 + Custom = 110 + Revoke = 111 + HasReadReceipt = 112 + Typing = 113 + Quote = 114 + GroupHasReadReceipt = 116 + Common = 200 + GroupMsg = 201 + SignalMsg = 202 //SysRelated NotificationBegin = 1000 diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index b0c28725e..52c1253e1 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -49,12 +49,13 @@ var ( ErrTokenUnknown = ErrInfo{705, TokenUnknownMsg.Error()} ErrTokenKicked = ErrInfo{706, TokenUserKickedMsg.Error()} - ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} - ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} - ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} - ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} - ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} - ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} + ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} + ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} + ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} + ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} + ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrMessageHasReadDisable = ErrInfo{ErrCode: 811, ErrMsg: "message has read disable"} ) var ( diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index fb7a0ab18..7d8a7a2fd 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -16,14 +16,14 @@ func CreateDepartment(department *db.Department) error { return dbConn.Table("departments").Create(department).Error } -func GetDepartment(departmentID string) (error, *db.Department) { +func GetDepartment(departmentID string) (*db.Department, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { - return err, nil + return nil, err } var department db.Department err = dbConn.Table("departments").Where("department_id=?", departmentID).Find(&department).Error - return err, &department + return &department, err } func UpdateDepartment(department *db.Department, args map[string]interface{}) error { @@ -237,6 +237,15 @@ func GetSubDepartmentNum(departmentID string) (error, uint32) { return nil, number } +func SetDepartmentRelatedGroupID(groupID, departmentID string) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return utils.Wrap(err, "DefaultGormDB failed") + } + department := &db.Department{RelatedGroupID: groupID} + return dbConn.Model(&department).Where("department_id=?", departmentID).Update(department).Error +} + func GetDepartmentRelatedGroupIDList(departmentIDList []string) ([]string, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { @@ -257,7 +266,7 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, return nil, utils.Wrap(err, "") } err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error - return &department, err + return &parentDepartment, utils.Wrap(err, "") } func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]string) error { From 9eb0dd5e704c1abd46bf77ab083b9a407f62b18f Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 12:49:16 +0800 Subject: [PATCH 104/256] batch push --- internal/msg_gateway/gate/batch_push.go | 39 +++++++++++++++++++++++++ internal/msg_gateway/gate/rpc_server.go | 5 ---- internal/msg_gateway/gate/ws_server.go | 2 +- internal/rpc/friend/firend.go | 2 +- 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 internal/msg_gateway/gate/batch_push.go diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go new file mode 100644 index 000000000..c373fa996 --- /dev/null +++ b/internal/msg_gateway/gate/batch_push.go @@ -0,0 +1,39 @@ +package gate + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbChat "Open_IM/pkg/proto/chat" + sdk_ws "Open_IM/pkg/proto/sdk_ws" + "strings" +) + +var MaxPullMsgNum = 100 + +func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { + +} + +func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { + seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + if err != nil { + return nil + } + rpcReq := sdk_ws.PullMessageBySeqListReq{} + rpcReq.SeqList = seqList + rpcReq.UserID = pushToUserID + rpcReq.OperationID = operationID + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + msgClient := pbChat.NewChatClient(grpcConn) + reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) + + return nil +} + +func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { + return nil +} + +func (r *RPCServer) GetMaxSeq(userID string) (uint32, error) { + return 0, nil +} diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 30cca624b..cc16f1226 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -7,7 +7,6 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbRelay "Open_IM/pkg/proto/relay" - sdk_ws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "bytes" "context" @@ -144,10 +143,6 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser return &resp, nil } -func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { - return nil -} - func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 20bd3d484..690e57cd3 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -61,7 +61,7 @@ func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { //Connection mapping relationship, //userID+" "+platformID->conn //Initialize a lock for each user - newConn := &UserConn{conn, new(sync.Mutex)} + newConn := &UserConn{conn, new(sync.Mutex), 0} userCount++ ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0]) go ws.readMsg(newConn) diff --git a/internal/rpc/friend/firend.go b/internal/rpc/friend/firend.go index 313b2becf..4e3172b44 100644 --- a/internal/rpc/friend/firend.go +++ b/internal/rpc/friend/firend.go @@ -63,7 +63,7 @@ func (s *friendServer) Run() { defer srv.GracefulStop() //User friend related services register to etcd pbFriend.RegisterFriendServer(srv, s) - rpcRegisterIP := "" + rpcRegisterIP := config.Config.RpcRegisterIP if config.Config.RpcRegisterIP == "" { rpcRegisterIP, err = utils.GetLocalIP() if err != nil { From 5fd91e808a88d5c6e9e0647890b4950fca3127d7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 14:07:09 +0800 Subject: [PATCH 105/256] batch push --- internal/msg_gateway/gate/batch_push.go | 28 +++++++++++-------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index c373fa996..6a7e7886f 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -1,31 +1,27 @@ package gate import ( - "Open_IM/pkg/common/config" - "Open_IM/pkg/grpc-etcdv3/getcdv3" - pbChat "Open_IM/pkg/proto/chat" sdk_ws "Open_IM/pkg/proto/sdk_ws" - "strings" ) var MaxPullMsgNum = 100 func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { - + return nil, nil } func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { - seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) - if err != nil { - return nil - } - rpcReq := sdk_ws.PullMessageBySeqListReq{} - rpcReq.SeqList = seqList - rpcReq.UserID = pushToUserID - rpcReq.OperationID = operationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) - reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) + //seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + //if err != nil { + // return nil + //} + //rpcReq := sdk_ws.PullMessageBySeqListReq{} + //rpcReq.SeqList = seqList + //rpcReq.UserID = pushToUserID + //rpcReq.OperationID = operationID + //grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + //msgClient := pbChat.NewChatClient(grpcConn) + //reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) return nil } From 4f184a6723619b451ec5bcbc71efa0a4c77d0f44 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 14:24:24 +0800 Subject: [PATCH 106/256] batch push --- internal/msg_gateway/gate/batch_push.go | 45 ++++++++++++++++++------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 6a7e7886f..089c91e4c 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -1,7 +1,13 @@ package gate import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/log" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbChat "Open_IM/pkg/proto/chat" sdk_ws "Open_IM/pkg/proto/sdk_ws" + "context" + "strings" ) var MaxPullMsgNum = 100 @@ -9,21 +15,34 @@ var MaxPullMsgNum = 100 func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { return nil, nil } +func (r *RPCServer) GetMergeSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { + return nil + //ws.getUserConn(pushToUserID, platformID) + //msgData.Seq + //msgList := r.GetSingleMsgForPush(operationID, msgData, pushToUserID, platformID) +} func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { - //seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) - //if err != nil { - // return nil - //} - //rpcReq := sdk_ws.PullMessageBySeqListReq{} - //rpcReq.SeqList = seqList - //rpcReq.UserID = pushToUserID - //rpcReq.OperationID = operationID - //grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - //msgClient := pbChat.NewChatClient(grpcConn) - //reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) - - return nil + seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + if err != nil { + log.Error(operationID, "GenPullSeqList failed ", err.Error(), msgData.Seq, pushToUserID) + return nil + } + rpcReq := sdk_ws.PullMessageBySeqListReq{} + rpcReq.SeqList = seqList + rpcReq.UserID = pushToUserID + rpcReq.OperationID = operationID + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + msgClient := pbChat.NewChatClient(grpcConn) + reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) + if err != nil { + log.Error(operationID, "PullMessageBySeqList failed ", err.Error(), rpcReq.String()) + return nil + } + if len(reply.List) == 0 { + return nil + } + return reply.List } func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { From 7b08d98647fb8a1df818cb0aca39ce4c3c860170 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 14:58:43 +0800 Subject: [PATCH 107/256] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 7d8a7a2fd..f0539edbd 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -276,7 +276,7 @@ func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]s } if department.DepartmentID != "" { *parentIDList = append(*parentIDList, department.ParentID) - err = GetDepartmentParent(departmentID, dbConn, parentIDList) + err = GetDepartmentParent(department.DepartmentID, dbConn, parentIDList) if err != nil { return err } From 60f8f93a0275eb15758876f3a2dd1acf68ce882e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 15:20:40 +0800 Subject: [PATCH 108/256] batch push --- internal/msg_gateway/gate/batch_push.go | 72 +++++++++++++++++++------ 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 089c91e4c..075de0586 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -2,10 +2,12 @@ package gate import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" sdk_ws "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" "context" "strings" ) @@ -13,24 +15,62 @@ import ( var MaxPullMsgNum = 100 func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { - return nil, nil + maxSeq, err := db.DB.GetUserMaxSeq(userID) + if err != nil { + log.Error(operationID, "GetUserMaxSeq failed ", userID, err.Error()) + return nil, utils.Wrap(err, "") + } + + var seqList []uint32 + num := 0 + for i := currentSeq + 1; i < uint32(maxSeq); i++ { + seqList = append(seqList, i) + num++ + if num == MaxPullMsgNum { + break + } + } + log.Info(operationID, "GenPullSeqList ", seqList, "current seq", currentSeq) + return seqList, nil } -func (r *RPCServer) GetMergeSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { - return nil - //ws.getUserConn(pushToUserID, platformID) - //msgData.Seq - //msgList := r.GetSingleMsgForPush(operationID, msgData, pushToUserID, platformID) +func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { + userConn := ws.getUserConn(pushToUserID, platformID) + if userConn == nil { + return []*sdk_ws.MsgData{msgData} + } + if msgData.Seq <= userConn.PushedMaxSeq { + return nil + } + + msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) + if msgList == nil { + userConn.PushedMaxSeq = msgData.Seq + return []*sdk_ws.MsgData{msgData} + } + msgList = append(msgList, msgData) + + for _, v := range msgList { + if v.Seq > userConn.PushedMaxSeq { + userConn.PushedMaxSeq = v.Seq + } + } + return msgList } -func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID string) []*sdk_ws.MsgData { - seqList, err := r.GenPullSeqList(msgData.Seq, operationID, pushToUserID) + +func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, userID string) []*sdk_ws.MsgData { + seqList, err := r.GenPullSeqList(currentMsgSeq, operationID, userID) if err != nil { - log.Error(operationID, "GenPullSeqList failed ", err.Error(), msgData.Seq, pushToUserID) + log.Error(operationID, "GenPullSeqList failed ", err.Error(), currentMsgSeq, userID) + return nil + } + if len(seqList) == 0 { + log.Error(operationID, "GenPullSeqList len == 0 ", currentMsgSeq, userID) return nil } rpcReq := sdk_ws.PullMessageBySeqListReq{} rpcReq.SeqList = seqList - rpcReq.UserID = pushToUserID + rpcReq.UserID = userID rpcReq.OperationID = operationID grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) msgClient := pbChat.NewChatClient(grpcConn) @@ -45,10 +85,10 @@ func (r *RPCServer) GetSingleMsgForPush(operationID string, msgData *sdk_ws.MsgD return reply.List } -func (r *RPCServer) GetBatchMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID string) map[string][]*sdk_ws.MsgData { - return nil -} - -func (r *RPCServer) GetMaxSeq(userID string) (uint32, error) { - return 0, nil +func (r *RPCServer) GetBatchUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID int) map[string][]*sdk_ws.MsgData { + user2PushMsg := make(map[string][]*sdk_ws.MsgData, 0) + for _, v := range pushToUserIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, v, platformID) + } + return user2PushMsg } From c8bf95578c4a43a87f30df6eab2c8ad798de8888 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:25:02 +0800 Subject: [PATCH 109/256] fix bug --- .../db/mysql_model/im_mysql_model/organization_model.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index f0539edbd..baf6acc8e 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -265,7 +265,9 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, if err != nil { return nil, utils.Wrap(err, "") } - err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error + if department.ParentID != "" { + err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error + } return &parentDepartment, utils.Wrap(err, "") } From 3f129513bbc7cc089bf1eabf7759359fd04d63b8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:33:28 +0800 Subject: [PATCH 110/256] fix bug --- internal/demo/register/onboarding_process.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 501d49813..a1860c9e2 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -13,7 +13,6 @@ import ( "context" "errors" "fmt" - "github.com/golang/protobuf/proto" "math/rand" "strings" "time" @@ -167,18 +166,18 @@ func onboardingProcessNotification(operationID, userID, groupID string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupID) }() - var tips commonPb.TipsComm - tips.DefaultTips = config.Config.Notification.JoinDepartmentNotification.DefaultTips.Tips - tips.JsonDetail = "" - content, err := proto.Marshal(&tips) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), "proto marshal failed") - return - } + //var tips commonPb.TipsComm + //tips.DefaultTips = config.Config.Notification.JoinDepartmentNotification.DefaultTips.Tips + //tips.JsonDetail = "" + //content, err := proto.Marshal(&tips) + //if err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), "proto marshal failed") + // return + //} notification := &msg.NotificationMsg{ SendID: userID, RecvID: groupID, - Content: content, + Content: []byte("大家来欢迎我加入部门"), MsgFrom: constant.UserMsgType, ContentType: constant.Text, SessionType: constant.GroupChatType, From 9b4890a99ffbed600272d5d99ef7de3aaaef1ab9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:33:37 +0800 Subject: [PATCH 111/256] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index baf6acc8e..43a144963 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -277,7 +277,7 @@ func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]s return err } if department.DepartmentID != "" { - *parentIDList = append(*parentIDList, department.ParentID) + *parentIDList = append(*parentIDList, department.DepartmentID) err = GetDepartmentParent(department.DepartmentID, dbConn, parentIDList) if err != nil { return err From c46f574aa884d160072ae78b404d682036d2c1d2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 15:40:53 +0800 Subject: [PATCH 112/256] fix bug --- internal/demo/register/onboarding_process.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a1860c9e2..b25b2d763 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -157,12 +157,12 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { log.NewError(req.OperationID, utils.GetSelfFuncName(), resp) continue } - onboardingProcessNotification(operationID, userID, groupID) + onboardingProcessNotification(operationID, userID, groupID, userName) } } // welcome user join department notification -func onboardingProcessNotification(operationID, userID, groupID string) { +func onboardingProcessNotification(operationID, userID, groupID, userName string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupID) }() @@ -174,10 +174,11 @@ func onboardingProcessNotification(operationID, userID, groupID string) { // log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), "proto marshal failed") // return //} + welcomeString := fmt.Sprintf("欢迎%s加入部门", userName) notification := &msg.NotificationMsg{ SendID: userID, RecvID: groupID, - Content: []byte("大家来欢迎我加入部门"), + Content: []byte(welcomeString), MsgFrom: constant.UserMsgType, ContentType: constant.Text, SessionType: constant.GroupChatType, From e57ce28d2b41cc882cd62258aad441aeac039f97 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Jun 2022 17:04:16 +0800 Subject: [PATCH 113/256] batch push --- config/config.yaml | 1 + internal/msg_gateway/gate/batch_push.go | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/config/config.yaml b/config/config.yaml index 29b4174d8..69ae4ed65 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -236,6 +236,7 @@ groupMessageHasReadReceiptEnable: false singleMessageHasReadReceiptEnable: false + #token config tokenpolicy: accessSecret: "open_im_server" #token生成相关,默认即可 diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 075de0586..41c71c876 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -33,6 +33,15 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID log.Info(operationID, "GenPullSeqList ", seqList, "current seq", currentSeq) return seqList, nil } + +func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { + user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) + for _, v := range platformIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + } + return user2PushMsg +} + func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { userConn := ws.getUserConn(pushToUserID, platformID) if userConn == nil { From ab76d460079b00dfdded3181ccda1f58c02abd7d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 17:19:39 +0800 Subject: [PATCH 114/256] demo --- internal/demo/register/login.go | 8 ++- internal/demo/register/reset_password.go | 10 +-- internal/demo/register/set_password.go | 7 +- pkg/common/db/model_struct.go | 1 + .../mysql_model/im_mysql_model/demo_model.go | 3 +- pkg/utils/encryption .go | 64 +++++++++++++++++++ pkg/utils/md5.go | 13 ---- 7 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 pkg/utils/encryption .go delete mode 100644 pkg/utils/md5.go diff --git a/internal/demo/register/login.go b/internal/demo/register/login.go index b5d587844..4f0ea5cbd 100644 --- a/internal/demo/register/login.go +++ b/internal/demo/register/login.go @@ -46,12 +46,18 @@ func Login(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.PasswordErr, "errMsg": "password err"}) return } + var userID string + if r.UserID != "" { + userID = r.UserID + } else { + userID = r.Account + } url := fmt.Sprintf("http://%s:%d/auth/user_token", utils.ServerIP, config.Config.Api.GinPort[0]) openIMGetUserToken := api.UserTokenReq{} openIMGetUserToken.OperationID = params.OperationID openIMGetUserToken.Platform = params.Platform openIMGetUserToken.Secret = config.Config.Secret - openIMGetUserToken.UserID = account + openIMGetUserToken.UserID = userID openIMGetUserTokenResp := api.UserTokenResp{} bMsg, err := http2.Post(url, openIMGetUserToken, 2) if err != nil { diff --git a/internal/demo/register/reset_password.go b/internal/demo/register/reset_password.go index b668f4f62..aee1a7cf5 100644 --- a/internal/demo/register/reset_password.go +++ b/internal/demo/register/reset_password.go @@ -15,8 +15,8 @@ type resetPasswordRequest struct { VerificationCode string `json:"verificationCode" binding:"required"` Email string `json:"email"` PhoneNumber string `json:"phoneNumber"` - NewPassword string `json:"newPassword" binding:"required"` - OperationID string `json:"operationID"` + NewPassword string `json:"newPassword" binding:"required"` + OperationID string `json:"operationID"` } func ResetPassword(c *gin.Context) { @@ -44,12 +44,14 @@ func ResetPassword(c *gin.Context) { } user, err := im_mysql_model.GetRegister(account) if err != nil || user.Account == "" { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) + } c.JSON(http.StatusOK, gin.H{"errCode": constant.NotRegistered, "errMsg": "user not register!"}) return } if err := im_mysql_model.ResetPassword(account, req.NewPassword); err != nil { - c.JSON(http.StatusOK, gin.H{"errCode": constant.ResetPasswordFailed, "errMsg": "reset password failed: "+err.Error()}) + c.JSON(http.StatusOK, gin.H{"errCode": constant.ResetPasswordFailed, "errMsg": "reset password failed: " + err.Error()}) return } c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "reset password success"}) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 7a0578264..c45f53a23 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -52,11 +52,12 @@ func SetPassword(c *gin.Context) { return } } + userID := utils.Md5(account) url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID openIMRegisterReq.Platform = params.Platform - openIMRegisterReq.UserID = account + openIMRegisterReq.UserID = userID openIMRegisterReq.Nickname = params.Name openIMRegisterReq.Secret = config.Config.Secret openIMRegisterResp := api.UserRegisterResp{} @@ -76,7 +77,7 @@ func SetPassword(c *gin.Context) { return } log.Info(params.OperationID, "begin store mysql", account, params.Password) - err = im_mysql_model.SetPassword(account, params.Password, params.Ex) + err = im_mysql_model.SetPassword(account, params.Password, params.Ex, userID) if err != nil { log.NewError(params.OperationID, "set phone number password error", account, "err", err.Error()) c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": err.Error()}) @@ -84,7 +85,7 @@ func SetPassword(c *gin.Context) { } log.Info(params.OperationID, "end setPassword", account, params.Password) // demo onboarding - onboardingProcess(params.OperationID, account, params.Name) + onboardingProcess(params.OperationID, userID, params.Name) c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken}) return } diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index b0854169e..f8e9bca7b 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -6,6 +6,7 @@ type Register struct { Account string `gorm:"column:account;primary_key;type:char(255)" json:"account"` Password string `gorm:"column:password;type:varchar(255)" json:"password"` Ex string `gorm:"column:ex;size:1024" json:"ex"` + UserID string `gorm:"column:user_id;type:varchar(255)" json:"userID"` } // diff --git a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go index eff3050be..278e8bd7f 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go @@ -15,11 +15,12 @@ func GetRegister(account string) (*db.Register, error) { account).Take(&r).Error } -func SetPassword(account, password, ex string) error { +func SetPassword(account, password, ex, userID string) error { r := db.Register{ Account: account, Password: password, Ex: ex, + UserID: userID, } dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { diff --git a/pkg/utils/encryption .go b/pkg/utils/encryption .go new file mode 100644 index 000000000..a4862de2e --- /dev/null +++ b/pkg/utils/encryption .go @@ -0,0 +1,64 @@ +package utils + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/md5" + "encoding/hex" + "errors" +) + +func Md5(s string, salt ...string) string { + h := md5.New() + h.Write([]byte(s)) + if len(salt) > 0 { + h.Write([]byte(salt[0])) + } + cipher := h.Sum(nil) + return hex.EncodeToString(cipher) +} + +func AesEncrypt(data []byte, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + encryptBytes := pkcs7Padding(data, blockSize) + crypted := make([]byte, len(encryptBytes)) + blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) + blockMode.CryptBlocks(crypted, encryptBytes) + return crypted, nil +} + +func AesDecrypt(data []byte, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) + crypted := make([]byte, len(data)) + blockMode.CryptBlocks(crypted, data) + crypted, err = pkcs7UnPadding(crypted) + if err != nil { + return nil, err + } + return crypted, nil +} + +func pkcs7Padding(data []byte, blockSize int) []byte { + padding := blockSize - len(data)%blockSize + padText := bytes.Repeat([]byte{byte(padding)}, padding) + return append(data, padText...) +} + +func pkcs7UnPadding(data []byte) ([]byte, error) { + length := len(data) + if length == 0 { + return nil, errors.New("encrypt error") + } + unPadding := int(data[length-1]) + return data[:(length - unPadding)], nil +} diff --git a/pkg/utils/md5.go b/pkg/utils/md5.go deleted file mode 100644 index 8e3531668..000000000 --- a/pkg/utils/md5.go +++ /dev/null @@ -1,13 +0,0 @@ -package utils - -import ( - "crypto/md5" - "encoding/hex" -) - -func Md5(s string) string { - h := md5.New() - h.Write([]byte(s)) - cipher := h.Sum(nil) - return hex.EncodeToString(cipher) -} From ceca0f095bcc946114a0edcaa2a57007472fabc2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 17:24:30 +0800 Subject: [PATCH 115/256] demo --- pkg/common/db/mysql.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/mysql.go b/pkg/common/db/mysql.go index 0f9f4303f..9713537b9 100644 --- a/pkg/common/db/mysql.go +++ b/pkg/common/db/mysql.go @@ -53,7 +53,9 @@ func initMysqlDB() { } fmt.Println("open db ok ", dsn) - db.AutoMigrate(&Friend{}, + db.AutoMigrate( + &Register{}, + &Friend{}, &FriendRequest{}, &Group{}, &GroupMember{}, From 1d4dc81e553ab27af461ea21c984ea758707ef47 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 9 Jun 2022 18:08:42 +0800 Subject: [PATCH 116/256] add batch push --- internal/msg_gateway/gate/rpc_server.go | 108 ++++++++++++++++++++---- 1 file changed, 91 insertions(+), 17 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index cc16f1226..05853a04a 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -7,6 +7,7 @@ import ( "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbRelay "Open_IM/pkg/proto/relay" + sdk_ws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "bytes" "context" @@ -143,30 +144,78 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser return &resp, nil } +//func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { +// log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) +// var singleUserResult []*pbRelay.SingelMsgToUserResultList +// //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) +// msgBytes, _ := proto.Marshal(req.MsgData) +// mReply := Resp{ +// ReqIdentifier: constant.WSPushMsg, +// OperationID: req.OperationID, +// Data: msgBytes, +// } +// var replyBytes bytes.Buffer +// enc := gob.NewEncoder(&replyBytes) +// err := enc.Encode(mReply) +// if err != nil { +// log.NewError(req.OperationID, "data encode err", err.Error()) +// } +// for _, v := range req.PushToUserIDList { +// var resp []*pbRelay.SingleMsgToUserPlatform +// tempT := &pbRelay.SingelMsgToUserResultList{ +// UserID: v, +// } +// userConnMap := ws.getUserAllCons(v) +// for platform, userConn := range userConnMap { +// if userConn != nil { +// resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) +// if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { +// tempT.OnlinePush = true +// log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) +// temp := &pbRelay.SingleMsgToUserPlatform{ +// ResultCode: resultCode, +// RecvID: v, +// RecvPlatFormID: int32(platform), +// } +// resp = append(resp, temp) +// } +// +// } +// } +// tempT.Resp = resp +// singleUserResult = append(singleUserResult, tempT) +// +// } +// +// return &pbRelay.OnlineBatchPushOneMsgResp{ +// SinglePushResult: singleUserResult, +// }, nil +//} func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList - msgBytes, _ := proto.Marshal(req.MsgData) - mReply := Resp{ - ReqIdentifier: constant.WSPushMsg, - OperationID: req.OperationID, - Data: msgBytes, - } - var replyBytes bytes.Buffer - enc := gob.NewEncoder(&replyBytes) - err := enc.Encode(mReply) - if err != nil { - log.NewError(req.OperationID, "data encode err", err.Error()) - } + for _, v := range req.PushToUserIDList { var resp []*pbRelay.SingleMsgToUserPlatform tempT := &pbRelay.SingelMsgToUserResultList{ UserID: v, } userConnMap := ws.getUserAllCons(v) - for platform, userConn := range userConnMap { - if userConn != nil { - resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) + var platformList []int + for k, _ := range userConnMap { + platformList = append(platformList, k) + } + needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) + for platform, list := range needPushMapList { + if list != nil { + for _, v := range list { + req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + } + replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) + if err != nil { + continue + } + resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) @@ -178,17 +227,42 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online resp = append(resp, temp) } + } else { + if utils.IsContainInt(platform, r.pushTerminal) { + tempT.OnlinePush = true + temp := &pbRelay.SingleMsgToUserPlatform{ + ResultCode: 0, + RecvID: v, + RecvPlatFormID: int32(platform), + } + resp = append(resp, temp) + } } } tempT.Resp = resp singleUserResult = append(singleUserResult, tempT) - } - return &pbRelay.OnlineBatchPushOneMsgResp{ SinglePushResult: singleUserResult, }, nil } +func (r *RPCServer) encodeWsData(wsData *sdk_ws.MsgData, operationID string) (bytes.Buffer, error) { + msgBytes, _ := proto.Marshal(wsData) + mReply := Resp{ + ReqIdentifier: constant.WSPushMsg, + OperationID: operationID, + Data: msgBytes, + } + var replyBytes bytes.Buffer + enc := gob.NewEncoder(&replyBytes) + err := enc.Encode(mReply) + if err != nil { + log.NewError(operationID, "data encode err", err.Error()) + return bytes.Buffer{}, err + } + return replyBytes, nil +} + func (r *RPCServer) KickUserOffline(_ context.Context, req *pbRelay.KickUserOfflineReq) (*pbRelay.KickUserOfflineResp, error) { log.NewInfo(req.OperationID, "KickUserOffline is arriving", req.String()) for _, v := range req.KickUserIDList { From 2ede9ef8ed11cdd0c1e283c1f83e2d6c33693616 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 9 Jun 2022 18:24:32 +0800 Subject: [PATCH 117/256] add batch push --- internal/msg_gateway/gate/rpc_server.go | 94 +++++++------- internal/push/logic/push_to_client.go | 2 +- pkg/proto/relay/relay.pb.go | 160 ++++++++++++++---------- pkg/proto/relay/relay.proto | 1 + 4 files changed, 146 insertions(+), 111 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 05853a04a..90c4cbd17 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -144,53 +144,53 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUser return &resp, nil } -//func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { -// log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) -// var singleUserResult []*pbRelay.SingelMsgToUserResultList -// //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) -// msgBytes, _ := proto.Marshal(req.MsgData) -// mReply := Resp{ -// ReqIdentifier: constant.WSPushMsg, -// OperationID: req.OperationID, -// Data: msgBytes, -// } -// var replyBytes bytes.Buffer -// enc := gob.NewEncoder(&replyBytes) -// err := enc.Encode(mReply) -// if err != nil { -// log.NewError(req.OperationID, "data encode err", err.Error()) -// } -// for _, v := range req.PushToUserIDList { -// var resp []*pbRelay.SingleMsgToUserPlatform -// tempT := &pbRelay.SingelMsgToUserResultList{ -// UserID: v, -// } -// userConnMap := ws.getUserAllCons(v) -// for platform, userConn := range userConnMap { -// if userConn != nil { -// resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) -// if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { -// tempT.OnlinePush = true -// log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) -// temp := &pbRelay.SingleMsgToUserPlatform{ -// ResultCode: resultCode, -// RecvID: v, -// RecvPlatFormID: int32(platform), -// } -// resp = append(resp, temp) -// } -// -// } -// } -// tempT.Resp = resp -// singleUserResult = append(singleUserResult, tempT) -// -// } -// -// return &pbRelay.OnlineBatchPushOneMsgResp{ -// SinglePushResult: singleUserResult, -// }, nil -//} +func (r *RPCServer) SuperGroupOnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { + log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) + var singleUserResult []*pbRelay.SingelMsgToUserResultList + //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) + msgBytes, _ := proto.Marshal(req.MsgData) + mReply := Resp{ + ReqIdentifier: constant.WSPushMsg, + OperationID: req.OperationID, + Data: msgBytes, + } + var replyBytes bytes.Buffer + enc := gob.NewEncoder(&replyBytes) + err := enc.Encode(mReply) + if err != nil { + log.NewError(req.OperationID, "data encode err", err.Error()) + } + for _, v := range req.PushToUserIDList { + var resp []*pbRelay.SingleMsgToUserPlatform + tempT := &pbRelay.SingelMsgToUserResultList{ + UserID: v, + } + userConnMap := ws.getUserAllCons(v) + for platform, userConn := range userConnMap { + if userConn != nil { + resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) + if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { + tempT.OnlinePush = true + log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) + temp := &pbRelay.SingleMsgToUserPlatform{ + ResultCode: resultCode, + RecvID: v, + RecvPlatFormID: int32(platform), + } + resp = append(resp, temp) + } + + } + } + tempT.Resp = resp + singleUserResult = append(singleUserResult, tempT) + + } + + return &pbRelay.OnlineBatchPushOneMsgResp{ + SinglePushResult: singleUserResult, + }, nil +} func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.OnlineBatchPushOneMsgReq) (*pbRelay.OnlineBatchPushOneMsgResp, error) { log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) var singleUserResult []*pbRelay.SingelMsgToUserResultList diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 896953cd2..81fb024ca 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -162,7 +162,7 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: cacheResp.UserIDList}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: cacheResp.UserIDList}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue diff --git a/pkg/proto/relay/relay.pb.go b/pkg/proto/relay/relay.pb.go index 8a45ede9b..7affbc050 100644 --- a/pkg/proto/relay/relay.pb.go +++ b/pkg/proto/relay/relay.pb.go @@ -37,7 +37,7 @@ func (m *OnlinePushMsgReq) Reset() { *m = OnlinePushMsgReq{} } func (m *OnlinePushMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgReq) ProtoMessage() {} func (*OnlinePushMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{0} + return fileDescriptor_relay_eb517eee82ca0aca, []int{0} } func (m *OnlinePushMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgReq.Unmarshal(m, b) @@ -89,7 +89,7 @@ func (m *OnlinePushMsgResp) Reset() { *m = OnlinePushMsgResp{} } func (m *OnlinePushMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlinePushMsgResp) ProtoMessage() {} func (*OnlinePushMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{1} + return fileDescriptor_relay_eb517eee82ca0aca, []int{1} } func (m *OnlinePushMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlinePushMsgResp.Unmarshal(m, b) @@ -129,7 +129,7 @@ func (m *SingelMsgToUserResultList) Reset() { *m = SingelMsgToUserResult func (m *SingelMsgToUserResultList) String() string { return proto.CompactTextString(m) } func (*SingelMsgToUserResultList) ProtoMessage() {} func (*SingelMsgToUserResultList) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{2} + return fileDescriptor_relay_eb517eee82ca0aca, []int{2} } func (m *SingelMsgToUserResultList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingelMsgToUserResultList.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *OnlineBatchPushOneMsgReq) Reset() { *m = OnlineBatchPushOneMsgR func (m *OnlineBatchPushOneMsgReq) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgReq) ProtoMessage() {} func (*OnlineBatchPushOneMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{3} + return fileDescriptor_relay_eb517eee82ca0aca, []int{3} } func (m *OnlineBatchPushOneMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgReq.Unmarshal(m, b) @@ -235,7 +235,7 @@ func (m *OnlineBatchPushOneMsgResp) Reset() { *m = OnlineBatchPushOneMsg func (m *OnlineBatchPushOneMsgResp) String() string { return proto.CompactTextString(m) } func (*OnlineBatchPushOneMsgResp) ProtoMessage() {} func (*OnlineBatchPushOneMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{4} + return fileDescriptor_relay_eb517eee82ca0aca, []int{4} } func (m *OnlineBatchPushOneMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OnlineBatchPushOneMsgResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *SingleMsgToUserPlatform) Reset() { *m = SingleMsgToUserPlatform func (m *SingleMsgToUserPlatform) String() string { return proto.CompactTextString(m) } func (*SingleMsgToUserPlatform) ProtoMessage() {} func (*SingleMsgToUserPlatform) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{5} + return fileDescriptor_relay_eb517eee82ca0aca, []int{5} } func (m *SingleMsgToUserPlatform) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleMsgToUserPlatform.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusReq) ProtoMessage() {} func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{6} + return fileDescriptor_relay_eb517eee82ca0aca, []int{6} } func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b) @@ -384,7 +384,7 @@ func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusRe func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp) ProtoMessage() {} func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7} } func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b) @@ -446,7 +446,7 @@ func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() { func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7, 0} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7, 0} } func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b) @@ -493,7 +493,7 @@ func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersO func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {} func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7, 1} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7, 1} } func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b) @@ -549,7 +549,7 @@ func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() { func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) } func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {} func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{7, 2} + return fileDescriptor_relay_eb517eee82ca0aca, []int{7, 2} } func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b) @@ -603,7 +603,7 @@ func (m *KickUserOfflineReq) Reset() { *m = KickUserOfflineReq{} } func (m *KickUserOfflineReq) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineReq) ProtoMessage() {} func (*KickUserOfflineReq) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{8} + return fileDescriptor_relay_eb517eee82ca0aca, []int{8} } func (m *KickUserOfflineReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineReq.Unmarshal(m, b) @@ -654,7 +654,7 @@ func (m *KickUserOfflineResp) Reset() { *m = KickUserOfflineResp{} } func (m *KickUserOfflineResp) String() string { return proto.CompactTextString(m) } func (*KickUserOfflineResp) ProtoMessage() {} func (*KickUserOfflineResp) Descriptor() ([]byte, []int) { - return fileDescriptor_relay_022e07b962c41b1c, []int{9} + return fileDescriptor_relay_eb517eee82ca0aca, []int{9} } func (m *KickUserOfflineResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickUserOfflineResp.Unmarshal(m, b) @@ -704,6 +704,7 @@ type OnlineMessageRelayServiceClient interface { OnlinePushMsg(ctx context.Context, in *OnlinePushMsgReq, opts ...grpc.CallOption) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) + SuperGroupOnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) } @@ -742,6 +743,15 @@ func (c *onlineMessageRelayServiceClient) OnlineBatchPushOneMsg(ctx context.Cont return out, nil } +func (c *onlineMessageRelayServiceClient) SuperGroupOnlineBatchPushOneMsg(ctx context.Context, in *OnlineBatchPushOneMsgReq, opts ...grpc.CallOption) (*OnlineBatchPushOneMsgResp, error) { + out := new(OnlineBatchPushOneMsgResp) + err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/SuperGroupOnlineBatchPushOneMsg", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *onlineMessageRelayServiceClient) KickUserOffline(ctx context.Context, in *KickUserOfflineReq, opts ...grpc.CallOption) (*KickUserOfflineResp, error) { out := new(KickUserOfflineResp) err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/KickUserOffline", in, out, c.cc, opts...) @@ -757,6 +767,7 @@ type OnlineMessageRelayServiceServer interface { OnlinePushMsg(context.Context, *OnlinePushMsgReq) (*OnlinePushMsgResp, error) GetUsersOnlineStatus(context.Context, *GetUsersOnlineStatusReq) (*GetUsersOnlineStatusResp, error) OnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) + SuperGroupOnlineBatchPushOneMsg(context.Context, *OnlineBatchPushOneMsgReq) (*OnlineBatchPushOneMsgResp, error) KickUserOffline(context.Context, *KickUserOfflineReq) (*KickUserOfflineResp, error) } @@ -818,6 +829,24 @@ func _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler(srv interface{}, c return interceptor(ctx, in, info, handler) } +func _OnlineMessageRelayService_SuperGroupOnlineBatchPushOneMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OnlineBatchPushOneMsgReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlineMessageRelayServiceServer).SuperGroupOnlineBatchPushOneMsg(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/relay.OnlineMessageRelayService/SuperGroupOnlineBatchPushOneMsg", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlineMessageRelayServiceServer).SuperGroupOnlineBatchPushOneMsg(ctx, req.(*OnlineBatchPushOneMsgReq)) + } + return interceptor(ctx, in, info, handler) +} + func _OnlineMessageRelayService_KickUserOffline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(KickUserOfflineReq) if err := dec(in); err != nil { @@ -852,6 +881,10 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ MethodName: "OnlineBatchPushOneMsg", Handler: _OnlineMessageRelayService_OnlineBatchPushOneMsg_Handler, }, + { + MethodName: "SuperGroupOnlineBatchPushOneMsg", + Handler: _OnlineMessageRelayService_SuperGroupOnlineBatchPushOneMsg_Handler, + }, { MethodName: "KickUserOffline", Handler: _OnlineMessageRelayService_KickUserOffline_Handler, @@ -861,54 +894,55 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{ Metadata: "relay/relay.proto", } -func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_022e07b962c41b1c) } - -var fileDescriptor_relay_022e07b962c41b1c = []byte{ - // 736 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x4e, 0x1b, 0x4b, - 0x10, 0xd5, 0x60, 0xcc, 0xa3, 0x80, 0x0b, 0xf4, 0x85, 0xcb, 0x30, 0x0b, 0xe3, 0x3b, 0x8b, 0xc8, - 0x8a, 0x12, 0x5b, 0x72, 0xb2, 0xcb, 0x0e, 0x2c, 0x88, 0x15, 0x2c, 0xa3, 0x76, 0xa2, 0x44, 0x6c, - 0xac, 0xc6, 0x6e, 0x9b, 0x91, 0xc7, 0x9e, 0xa6, 0x6b, 0x0c, 0x62, 0x93, 0x6d, 0x76, 0xf9, 0x84, - 0x2c, 0xf2, 0x13, 0xf9, 0x9b, 0x7c, 0x4b, 0xd4, 0x0f, 0x4f, 0x66, 0xfc, 0x80, 0xb0, 0xc8, 0xc6, - 0x72, 0x55, 0x57, 0x9f, 0xaa, 0x73, 0xaa, 0xa6, 0x1a, 0x76, 0x25, 0x0f, 0xd9, 0x7d, 0x45, 0xff, - 0x96, 0x85, 0x8c, 0xe2, 0x88, 0xe4, 0xb5, 0xe1, 0xfd, 0xdf, 0x14, 0x7c, 0xd4, 0xae, 0x37, 0x2a, - 0x62, 0xd0, 0xaf, 0xe8, 0x93, 0x0a, 0x76, 0x07, 0xed, 0x3b, 0xac, 0xdc, 0xa1, 0x89, 0xf4, 0xbf, - 0x3a, 0xb0, 0xd3, 0x1c, 0x85, 0xc1, 0x88, 0x5f, 0x8c, 0xf1, 0xba, 0x81, 0x7d, 0xca, 0x6f, 0x48, - 0x11, 0x36, 0x9a, 0x82, 0x4b, 0x16, 0x07, 0xd1, 0xa8, 0x5e, 0x73, 0x9d, 0xa2, 0x53, 0x5a, 0xa7, - 0x69, 0x17, 0x79, 0x0d, 0xab, 0x43, 0xec, 0xd7, 0x58, 0xcc, 0xdc, 0xa5, 0xa2, 0x53, 0xda, 0xa8, - 0x7a, 0x65, 0xe4, 0xf2, 0x96, 0xcb, 0x36, 0x13, 0x41, 0x5b, 0x30, 0xc9, 0x86, 0x58, 0x6e, 0x98, - 0x08, 0x3a, 0x09, 0x25, 0x3e, 0x6c, 0x8a, 0x31, 0x5e, 0xbf, 0x8f, 0x3e, 0x20, 0x97, 0xf5, 0x9a, - 0x9b, 0xd3, 0xc0, 0x19, 0x9f, 0x7f, 0x06, 0xbb, 0x53, 0xf5, 0xa0, 0x20, 0x55, 0x58, 0x96, 0x1c, - 0x85, 0xeb, 0x14, 0x73, 0xa5, 0x8d, 0x6a, 0xa1, 0x6c, 0xb8, 0xb6, 0x82, 0x51, 0x3f, 0xe4, 0x0d, - 0xec, 0x9b, 0xcb, 0x17, 0x21, 0x8b, 0x7b, 0x91, 0x1c, 0x52, 0x1d, 0xeb, 0x7f, 0x71, 0xe0, 0x50, - 0x45, 0xf0, 0x30, 0x89, 0xa0, 0x1c, 0xc7, 0x61, 0x7c, 0x1e, 0x60, 0x4c, 0xfe, 0x83, 0x95, 0xb1, - 0x29, 0xc2, 0xb0, 0xb3, 0x56, 0x92, 0x69, 0xe9, 0xcf, 0x33, 0x91, 0x02, 0x40, 0x94, 0x94, 0xac, - 0x49, 0xad, 0xd1, 0x94, 0xc7, 0xff, 0xe6, 0x80, 0x6b, 0x38, 0x1d, 0xb3, 0xb8, 0x73, 0xad, 0x7c, - 0xcd, 0x11, 0xff, 0xcb, 0x5a, 0x3f, 0x87, 0x9d, 0xb4, 0xae, 0x8a, 0xb4, 0x9b, 0x2b, 0xe6, 0x4a, - 0xeb, 0x74, 0xc6, 0xef, 0x07, 0x70, 0xb8, 0xa0, 0x3e, 0x14, 0xe4, 0x1c, 0x76, 0x50, 0xd3, 0x57, - 0x7e, 0xa3, 0xa0, 0xed, 0x43, 0x31, 0xa5, 0xce, 0x5c, 0x95, 0xe9, 0xcc, 0x4d, 0xff, 0x1e, 0x0e, - 0x16, 0x88, 0xa9, 0x64, 0x34, 0x41, 0x27, 0x51, 0x97, 0x6b, 0x21, 0x72, 0x34, 0xe5, 0x51, 0x2d, - 0xa3, 0xbc, 0x73, 0x5b, 0xaf, 0x69, 0x19, 0xd6, 0xa9, 0xb5, 0xc8, 0x33, 0xf8, 0x47, 0xfd, 0x53, - 0x38, 0xa7, 0x91, 0x1c, 0xda, 0xb9, 0xca, 0xd3, 0x29, 0xaf, 0x7f, 0x07, 0x07, 0x67, 0x3c, 0x56, - 0x29, 0xd1, 0xb0, 0x6d, 0xc5, 0x2c, 0x1e, 0xa3, 0x6a, 0x42, 0x01, 0x60, 0xfc, 0x5b, 0x26, 0x47, - 0xcb, 0x94, 0xf2, 0xa8, 0x26, 0x45, 0xa9, 0x26, 0x99, 0xfc, 0x69, 0x17, 0xf1, 0x60, 0x2d, 0x12, - 0x99, 0xb1, 0x4e, 0x6c, 0xff, 0xc7, 0x32, 0xb8, 0xf3, 0x33, 0xa3, 0x20, 0x2e, 0xac, 0x72, 0x29, - 0x13, 0xca, 0x79, 0x3a, 0x31, 0x15, 0x5f, 0x2e, 0x65, 0x03, 0xfb, 0x13, 0xbe, 0xc6, 0x22, 0x2d, - 0xd8, 0xc2, 0x71, 0xa7, 0xc3, 0x11, 0x6d, 0x37, 0x72, 0xba, 0x1b, 0x2f, 0x6d, 0x37, 0x16, 0x65, - 0x2a, 0xb7, 0xd2, 0x97, 0x68, 0x16, 0x83, 0x5c, 0xc0, 0x66, 0x8f, 0x05, 0x21, 0xef, 0x5a, 0xcc, - 0x65, 0x8d, 0xf9, 0xe2, 0x31, 0xcc, 0x53, 0x7d, 0xa7, 0xc6, 0x63, 0x16, 0x84, 0x34, 0x83, 0xe0, - 0x9d, 0xc0, 0x96, 0xcd, 0x68, 0x8e, 0x95, 0x44, 0xc2, 0xf6, 0xda, 0x8e, 0x79, 0x62, 0x2b, 0xae, - 0xa8, 0x51, 0x27, 0x5c, 0x8d, 0xe5, 0x7d, 0x82, 0xcd, 0x74, 0x8a, 0xd4, 0x67, 0x9b, 0xcb, 0x7c, - 0xb6, 0x4f, 0x56, 0xd1, 0xfb, 0xee, 0x24, 0xf5, 0x59, 0x09, 0x16, 0xad, 0x84, 0x05, 0xb5, 0x11, - 0x06, 0x7b, 0x5d, 0x5d, 0xd5, 0x64, 0x82, 0x8d, 0x2e, 0x4f, 0x6c, 0x87, 0xd5, 0x6e, 0x2e, 0x94, - 0xff, 0x19, 0xc8, 0xbb, 0xa0, 0x33, 0x50, 0x00, 0xcd, 0x5e, 0x4f, 0x01, 0xd8, 0x95, 0x11, 0xcd, - 0xae, 0x8c, 0xf4, 0x34, 0x16, 0x00, 0x26, 0xd2, 0xda, 0x71, 0xcd, 0xd3, 0x94, 0x47, 0x7d, 0x32, - 0x03, 0x8b, 0x9b, 0x59, 0x0d, 0x53, 0x5e, 0x7f, 0x1f, 0xfe, 0x9d, 0xc9, 0x8f, 0xa2, 0xfa, 0x73, - 0x69, 0xb2, 0x30, 0x1a, 0x1c, 0x91, 0xf5, 0x39, 0x55, 0x54, 0x5b, 0x5c, 0xde, 0x06, 0x1d, 0x4e, - 0x8e, 0x61, 0x2b, 0xb3, 0xc1, 0xc9, 0x81, 0x95, 0x62, 0xfa, 0x9d, 0xf1, 0xdc, 0xf9, 0x07, 0x28, - 0xc8, 0x47, 0xd8, 0x9b, 0x27, 0x1c, 0x29, 0x3c, 0xa8, 0xea, 0x8d, 0x77, 0xf4, 0x88, 0xea, 0xe4, - 0x12, 0xf6, 0xe7, 0xae, 0x3a, 0x72, 0x94, 0xa9, 0x65, 0x76, 0x51, 0x7b, 0xc5, 0x87, 0x03, 0x50, - 0x90, 0xb7, 0xb0, 0x3d, 0xa5, 0x16, 0x39, 0xb4, 0x97, 0x66, 0xbb, 0xe8, 0x79, 0x8b, 0x8e, 0x50, - 0x1c, 0xef, 0x5e, 0x6e, 0x97, 0xcd, 0x83, 0xfe, 0x46, 0x5c, 0x69, 0x71, 0xaf, 0x56, 0xf4, 0x7b, - 0xfd, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xfe, 0xd8, 0xc1, 0xee, 0x07, 0x00, 0x00, +func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_eb517eee82ca0aca) } + +var fileDescriptor_relay_eb517eee82ca0aca = []byte{ + // 749 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x4e, 0xdb, 0x5a, + 0x10, 0x96, 0x31, 0xe1, 0x67, 0x80, 0x0b, 0x9c, 0x0b, 0x17, 0xe3, 0x45, 0xc8, 0xf5, 0xe2, 0x2a, + 0xba, 0x6a, 0x13, 0x29, 0xed, 0xae, 0x3b, 0x88, 0xa0, 0x51, 0x89, 0x82, 0x4e, 0x5a, 0xb5, 0x62, + 0x13, 0x99, 0xe4, 0x24, 0x58, 0x71, 0xe2, 0xc3, 0x19, 0x1b, 0xc4, 0xa6, 0xdb, 0xee, 0xfa, 0x08, + 0x5d, 0xf4, 0x25, 0xfa, 0x02, 0x7d, 0xb0, 0xea, 0xfc, 0xc4, 0xb5, 0xf3, 0x03, 0x65, 0xc1, 0x06, + 0x31, 0x73, 0xe6, 0xcc, 0xcc, 0xf7, 0x7d, 0x73, 0x26, 0x86, 0x5d, 0xc1, 0x42, 0xff, 0xbe, 0xaa, + 0xfe, 0x56, 0xb8, 0x88, 0xe2, 0x88, 0x14, 0x94, 0xe1, 0xfe, 0xdb, 0xe2, 0x6c, 0xdc, 0x69, 0x34, + 0xab, 0x7c, 0x38, 0xa8, 0xaa, 0x93, 0x2a, 0xf6, 0x86, 0x9d, 0x3b, 0xac, 0xde, 0xa1, 0x8e, 0xf4, + 0xbe, 0x5a, 0xb0, 0xd3, 0x1a, 0x87, 0xc1, 0x98, 0x5d, 0x24, 0x78, 0xdd, 0xc4, 0x01, 0x65, 0x37, + 0xa4, 0x04, 0x1b, 0x2d, 0xce, 0x84, 0x1f, 0x07, 0xd1, 0xb8, 0x51, 0x77, 0xac, 0x92, 0x55, 0x5e, + 0xa7, 0x59, 0x17, 0x79, 0x0d, 0xab, 0x23, 0x1c, 0xd4, 0xfd, 0xd8, 0x77, 0x96, 0x4a, 0x56, 0x79, + 0xa3, 0xe6, 0x56, 0x90, 0x89, 0x5b, 0x26, 0x3a, 0x3e, 0x0f, 0x3a, 0xdc, 0x17, 0xfe, 0x08, 0x2b, + 0x4d, 0x1d, 0x41, 0x27, 0xa1, 0xc4, 0x83, 0x4d, 0x9e, 0xe0, 0xf5, 0xfb, 0xe8, 0x03, 0x32, 0xd1, + 0xa8, 0x3b, 0xb6, 0x4a, 0x9c, 0xf3, 0x79, 0x67, 0xb0, 0x3b, 0xd5, 0x0f, 0x72, 0x52, 0x83, 0x65, + 0xc1, 0x90, 0x3b, 0x56, 0xc9, 0x2e, 0x6f, 0xd4, 0x8a, 0x15, 0x8d, 0xb5, 0x1d, 0x8c, 0x07, 0x21, + 0x6b, 0xe2, 0x40, 0x5f, 0xbe, 0x08, 0xfd, 0xb8, 0x1f, 0x89, 0x11, 0x55, 0xb1, 0xde, 0x17, 0x0b, + 0x0e, 0x65, 0x04, 0x0b, 0xd3, 0x08, 0xca, 0x30, 0x09, 0xe3, 0xf3, 0x00, 0x63, 0xf2, 0x0f, 0xac, + 0x24, 0xba, 0x09, 0x8d, 0xce, 0x58, 0x69, 0xa5, 0xa5, 0x3f, 0xaf, 0x44, 0x8a, 0x00, 0x51, 0xda, + 0xb2, 0x02, 0xb5, 0x46, 0x33, 0x1e, 0xef, 0x9b, 0x05, 0x8e, 0xc6, 0x74, 0xec, 0xc7, 0xdd, 0x6b, + 0xe9, 0x6b, 0x8d, 0xd9, 0x33, 0x73, 0xfd, 0x3f, 0xec, 0x64, 0x79, 0x95, 0xa0, 0x1d, 0xbb, 0x64, + 0x97, 0xd7, 0xe9, 0x8c, 0xdf, 0x0b, 0xe0, 0x70, 0x41, 0x7f, 0xc8, 0xc9, 0x39, 0xec, 0xa0, 0x82, + 0x2f, 0xfd, 0x9a, 0x41, 0xa3, 0x43, 0x29, 0xc3, 0xce, 0x5c, 0x96, 0xe9, 0xcc, 0x4d, 0xef, 0x1e, + 0x0e, 0x16, 0x90, 0x29, 0x69, 0xd4, 0x41, 0x27, 0x51, 0x8f, 0x29, 0x22, 0x6c, 0x9a, 0xf1, 0x48, + 0xc9, 0x28, 0xeb, 0xde, 0x36, 0xea, 0x8a, 0x86, 0x75, 0x6a, 0x2c, 0xf2, 0x1f, 0xfc, 0x25, 0xff, + 0x93, 0x79, 0x4e, 0x23, 0x31, 0x32, 0x73, 0x55, 0xa0, 0x53, 0x5e, 0xef, 0x0e, 0x0e, 0xce, 0x58, + 0x2c, 0x4b, 0xa2, 0x46, 0xdb, 0x8e, 0xfd, 0x38, 0x41, 0x29, 0x42, 0x11, 0x20, 0xf9, 0x4d, 0x93, + 0xa5, 0x68, 0xca, 0x78, 0xa4, 0x48, 0x51, 0x46, 0x24, 0x5d, 0x3f, 0xeb, 0x22, 0x2e, 0xac, 0x45, + 0x3c, 0x37, 0xd6, 0xa9, 0xed, 0xfd, 0x58, 0x06, 0x67, 0x7e, 0x65, 0xe4, 0xc4, 0x81, 0x55, 0x26, + 0x44, 0x0a, 0xb9, 0x40, 0x27, 0xa6, 0xc4, 0xcb, 0x84, 0x68, 0xe2, 0x60, 0x82, 0x57, 0x5b, 0xa4, + 0x0d, 0x5b, 0x98, 0x74, 0xbb, 0x0c, 0xd1, 0xa8, 0x61, 0x2b, 0x35, 0x5e, 0x1a, 0x35, 0x16, 0x55, + 0xaa, 0xb4, 0xb3, 0x97, 0x68, 0x3e, 0x07, 0xb9, 0x80, 0xcd, 0xbe, 0x1f, 0x84, 0xac, 0x67, 0x72, + 0x2e, 0xab, 0x9c, 0x2f, 0x1e, 0xcb, 0x79, 0xaa, 0xee, 0xd4, 0x59, 0xec, 0x07, 0x21, 0xcd, 0x65, + 0x70, 0x4f, 0x60, 0xcb, 0x54, 0xd4, 0xc7, 0x92, 0x22, 0x6e, 0xb4, 0x36, 0x63, 0x9e, 0xda, 0x12, + 0x2b, 0xaa, 0xac, 0x13, 0xac, 0xda, 0x72, 0x3f, 0xc1, 0x66, 0xb6, 0x44, 0xe6, 0xd9, 0xda, 0xb9, + 0x67, 0xfb, 0x64, 0x16, 0xdd, 0xef, 0x56, 0xda, 0x9f, 0xa1, 0x60, 0xd1, 0x4a, 0x58, 0xd0, 0x1b, + 0xf1, 0x61, 0xaf, 0xa7, 0xba, 0x9a, 0x4c, 0xb0, 0xe6, 0xe5, 0x89, 0x72, 0x18, 0xee, 0xe6, 0xa6, + 0xf2, 0x3e, 0x03, 0x79, 0x17, 0x74, 0x87, 0x32, 0x41, 0xab, 0xdf, 0x97, 0x09, 0xcc, 0xca, 0x88, + 0x66, 0x57, 0x46, 0x76, 0x1a, 0x8b, 0x00, 0x13, 0x6a, 0xcd, 0xb8, 0x16, 0x68, 0xc6, 0x23, 0x9f, + 0xcc, 0xd0, 0xe4, 0xcd, 0xad, 0x86, 0x29, 0xaf, 0xb7, 0x0f, 0x7f, 0xcf, 0xd4, 0x47, 0x5e, 0xfb, + 0x69, 0x4f, 0x16, 0x46, 0x93, 0x21, 0xfa, 0x03, 0x46, 0x25, 0xd4, 0x36, 0x13, 0xb7, 0x41, 0x97, + 0x91, 0x63, 0xd8, 0xca, 0x6d, 0x70, 0x72, 0x60, 0xa8, 0x98, 0xfe, 0x9d, 0x71, 0x9d, 0xf9, 0x07, + 0xc8, 0xc9, 0x47, 0xd8, 0x9b, 0x47, 0x1c, 0x29, 0x3e, 0xc8, 0xea, 0x8d, 0x7b, 0xf4, 0x08, 0xeb, + 0xe4, 0x12, 0xf6, 0xe7, 0xae, 0x3a, 0x72, 0x94, 0xeb, 0x65, 0x76, 0x51, 0xbb, 0xa5, 0x87, 0x03, + 0x90, 0x93, 0x1e, 0x1c, 0xb5, 0x13, 0xce, 0xc4, 0x99, 0x88, 0x12, 0xfe, 0x6c, 0x55, 0xde, 0xc2, + 0xf6, 0x94, 0x26, 0xe4, 0xd0, 0x5c, 0x9a, 0x9d, 0x15, 0xd7, 0x5d, 0x74, 0x84, 0xfc, 0x78, 0xf7, + 0x72, 0xbb, 0xa2, 0x3f, 0x1b, 0xde, 0xf0, 0x2b, 0x25, 0xe1, 0xd5, 0x8a, 0xfa, 0x2a, 0x78, 0xf5, + 0x2b, 0x00, 0x00, 0xff, 0xff, 0x01, 0x6a, 0x94, 0x1f, 0x54, 0x08, 0x00, 0x00, } diff --git a/pkg/proto/relay/relay.proto b/pkg/proto/relay/relay.proto index 3074fea68..0203aa7ad 100644 --- a/pkg/proto/relay/relay.proto +++ b/pkg/proto/relay/relay.proto @@ -80,6 +80,7 @@ service OnlineMessageRelayService { rpc OnlinePushMsg(OnlinePushMsgReq) returns(OnlinePushMsgResp); rpc GetUsersOnlineStatus(GetUsersOnlineStatusReq)returns(GetUsersOnlineStatusResp); rpc OnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); + rpc SuperGroupOnlineBatchPushOneMsg(OnlineBatchPushOneMsgReq) returns(OnlineBatchPushOneMsgResp); rpc KickUserOffline(KickUserOfflineReq) returns(KickUserOfflineResp); // rpc SendMsgByWS(SendMsgByWSReq) returns(MsgToUserResp); } From ee615fbadf32a6b8814a9cd11548ce5b87b27aac Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 19:34:52 +0800 Subject: [PATCH 118/256] fix word --- config/config.yaml | 2 +- internal/demo/register/set_password.go | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 69ae4ed65..3172baa50 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -727,4 +727,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - signalTimeout: 3000 + signalTimeout: 300 diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index c45f53a23..fbcc30c44 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,12 +16,13 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Name string `json:"name"` + Nickname string `json:"name"` PhoneNumber string `json:"phoneNumber"` Password string `json:"password"` VerificationCode string `json:"verificationCode"` Platform int32 `json:"platform" binding:"required,min=1,max=7"` Ex string `json:"ex"` + FaceURL string `json:"faceURL"` OperationID string `json:"operationID" binding:"required"` } @@ -38,8 +39,8 @@ func SetPassword(c *gin.Context) { } else { account = params.PhoneNumber } - if params.Name == "" { - params.Name = account + if params.Nickname == "" { + params.Nickname = account } if params.VerificationCode != config.Config.Demo.SuperCode { accountKey := account + "_" + constant.VerificationCodeForRegisterSuffix @@ -58,8 +59,9 @@ func SetPassword(c *gin.Context) { openIMRegisterReq.OperationID = params.OperationID openIMRegisterReq.Platform = params.Platform openIMRegisterReq.UserID = userID - openIMRegisterReq.Nickname = params.Name + openIMRegisterReq.Nickname = params.Nickname openIMRegisterReq.Secret = config.Config.Secret + openIMRegisterReq.FaceURL = params.FaceURL openIMRegisterResp := api.UserRegisterResp{} bMsg, err := http2.Post(url, openIMRegisterReq, 2) if err != nil { @@ -85,7 +87,7 @@ func SetPassword(c *gin.Context) { } log.Info(params.OperationID, "end setPassword", account, params.Password) // demo onboarding - onboardingProcess(params.OperationID, userID, params.Name) + onboardingProcess(params.OperationID, userID, params.Nickname) c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken}) return } From fc5ab3572ef6bd21faf8dc0e9ae61397d4f4dbfd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 10:16:18 +0800 Subject: [PATCH 119/256] fix word --- internal/demo/register/set_password.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index fbcc30c44..9151f9eda 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,9 +16,9 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Nickname string `json:"name"` + Nickname string `json:"name" binding:"required"` PhoneNumber string `json:"phoneNumber"` - Password string `json:"password"` + Password string `json:"password" binding:"required"` VerificationCode string `json:"verificationCode"` Platform int32 `json:"platform" binding:"required,min=1,max=7"` Ex string `json:"ex"` From da0e73fe1143025188ee48b630e43c0d210ab602 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 10:24:47 +0800 Subject: [PATCH 120/256] fix json word --- internal/demo/register/set_password.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 9151f9eda..649e361d5 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,7 +16,7 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Nickname string `json:"name" binding:"required"` + Nickname string `json:"nickname" binding:"required"` PhoneNumber string `json:"phoneNumber"` Password string `json:"password" binding:"required"` VerificationCode string `json:"verificationCode"` From 0e77caa329139b911002a5b22075d37d035cd813 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 10:48:03 +0800 Subject: [PATCH 121/256] batch push --- internal/msg_gateway/gate/rpc_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 90c4cbd17..8b050476e 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -206,6 +206,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online platformList = append(platformList, k) } needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { for _, v := range list { @@ -218,7 +219,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true - log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) + log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recv PlatForm", constant.PlatformIDToName(platform), "recvID", v) temp := &pbRelay.SingleMsgToUserPlatform{ ResultCode: resultCode, RecvID: v, From 55f6aa9ff8f39cfc467ef62a2ee228bef7b61489 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 10 Jun 2022 11:08:18 +0800 Subject: [PATCH 122/256] add batch push --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 81fb024ca..f7636137c 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue From 650c7a3ae0923ba0c4ffcf96c7025f929b2dbbf0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 12:17:44 +0800 Subject: [PATCH 123/256] fix json word --- internal/demo/register/set_password.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 649e361d5..db1e7f434 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -16,7 +16,7 @@ import ( type ParamsSetPassword struct { Email string `json:"email"` - Nickname string `json:"nickname" binding:"required"` + Nickname string `json:"nickname"` PhoneNumber string `json:"phoneNumber"` Password string `json:"password" binding:"required"` VerificationCode string `json:"verificationCode"` From 202811f3c66863042015840b06ae440ddd41d33e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 13:32:40 +0800 Subject: [PATCH 124/256] groupID digitization --- internal/msg_gateway/gate/rpc_server.go | 7 ++++--- internal/rpc/group/group.go | 9 ++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 8b050476e..8d799ec20 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -209,11 +209,13 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) for _, v := range list { req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) } replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { + log.Error(req.OperationID, "encodeWsData failed ", req.MsgData.String()) continue } resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) @@ -227,7 +229,6 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } resp = append(resp, temp) } - } else { if utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true @@ -293,11 +294,11 @@ func sendMsgBatchToUser(conn *UserConn, bMsg []byte, in *pbRelay.OnlineBatchPush err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) if err != nil { log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), - "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) + "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recv Platform", RecvPlatForm, "args", in.String(), "recvID", RecvID) ResultCode = -2 return ResultCode } else { - log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recvPlatForm", RecvPlatForm, "recvID", RecvID) + log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recv PlatForm", RecvPlatForm, "recvID", RecvID) ResultCode = 0 return ResultCode } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index fb42fe609..79c186013 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -18,12 +18,12 @@ import ( pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" + "google.golang.org/grpc" + "math/big" "net" "strconv" "strings" "time" - - "google.golang.org/grpc" ) type groupServer struct { @@ -96,7 +96,10 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR groupId := req.GroupInfo.GroupID if groupId == "" { - groupId = utils.Md5(strconv.FormatInt(time.Now().UnixNano(), 10)) + groupId = utils.Md5(req.OperationID + strconv.FormatInt(time.Now().UnixNano(), 10)) + bi := big.NewInt(0) + bi.SetString(groupId[0:8], 16) + groupId = bi.String() } //to group groupInfo := db.Group{} From da573ac573f27b0608e1d67420645450fcd8a26e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 15:37:24 +0800 Subject: [PATCH 125/256] log --- internal/msg_gateway/gate/rpc_server.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 8d799ec20..86a25850d 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -205,6 +205,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for k, _ := range userConnMap { platformList = append(platformList, k) } + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList) needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { From d49ceef6371743aa4f9463cb684b57d62f68d3a8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 15:55:07 +0800 Subject: [PATCH 126/256] log --- internal/msg_gateway/gate/batch_push.go | 1 + internal/push/logic/push_to_client.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 41c71c876..8f556e4d5 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -38,6 +38,7 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) for _, v := range platformIDList { user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) } return user2PushMsg } diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index f7636137c..81fb024ca 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue From 16645bc568a4094705a7c13faf388040fb7fa5c7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:37:31 +0800 Subject: [PATCH 127/256] batch build --- script/batch_build_all_service.sh | 56 +++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 script/batch_build_all_service.sh diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh new file mode 100644 index 000000000..689d5bf94 --- /dev/null +++ b/script/batch_build_all_service.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh + +bin_dir="../bin" +logs_dir="../logs" +sdk_db_dir="../db/sdk/" +#Automatically created when there is no bin, logs folder +if [ ! -d $bin_dir ]; then + mkdir -p $bin_dir +fi +if [ ! -d $logs_dir ]; then + mkdir -p $logs_dir +fi +if [ ! -d $sdk_db_dir ]; then + mkdir -p $sdk_db_dir +fi + +#begin path +begin_path=$PWD + + +build_pid_array=() + +for ((i = 0; i < ${#service_source_root[*]}; i++)); do + cd $begin_path + service_path=${service_source_root[$i]} + cd $service_path + make install & + build_pid=$! + build_pid_array[i]=build_pid + if [ $? -ne 0 ]; then + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + else + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + fi +done + + +for ((i = 0; i < ${#service_source_root[*]}; i++)); do + wait build_pid_array[i] + stat=$? + if [ $stat == 0 ] + then + echo "Exit status - $stat" + else + echo "Exit status - $stat" + fi + + + + +#echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} From eaa416c3947d4093b32e8e54a2c94768956fecc1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:39:58 +0800 Subject: [PATCH 128/256] batch build --- script/batch_build_all_service.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 689d5bf94..ce92fc832 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -39,10 +39,12 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do fi done +echo "wait all build finish" for ((i = 0; i < ${#service_source_root[*]}; i++)); do wait build_pid_array[i] stat=$? + echo build_pid_array[i] " " $stat if [ $stat == 0 ] then echo "Exit status - $stat" From 832f9c042d2aadfe4af7ddb093f9952168e89cef Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:42:45 +0800 Subject: [PATCH 129/256] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index ce92fc832..aa59f5097 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -51,7 +51,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do else echo "Exit status - $stat" fi - +done From 5cb907b0f1a0a3b21cad24995e26fda0ee94d9a9 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:49:00 +0800 Subject: [PATCH 130/256] batch build --- script/batch_build_all_service.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index aa59f5097..a3bba7ee4 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -42,9 +42,11 @@ done echo "wait all build finish" for ((i = 0; i < ${#service_source_root[*]}; i++)); do - wait build_pid_array[i] + + echo "wait pid: " ${build_pid_array[i]} + wait ${build_pid_array[i]} stat=$? - echo build_pid_array[i] " " $stat + echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then echo "Exit status - $stat" From df7d2b54bd41904a2397e39a143b7aa9fdb6e199 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 17:53:34 +0800 Subject: [PATCH 131/256] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index a3bba7ee4..7cceed90f 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -30,7 +30,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do cd $service_path make install & build_pid=$! - build_pid_array[i]=build_pid + build_pid_array[i]=$build_pid if [ $? -ne 0 ]; then echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" exit -1 From c9b25f73d3efb35f310e80c03e9ee8bc76961e46 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:00:04 +0800 Subject: [PATCH 132/256] batch build --- script/batch_build_all_service.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 7cceed90f..fe6c6f264 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -41,6 +41,7 @@ done echo "wait all build finish" +success_num = 0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo "wait pid: " ${build_pid_array[i]} @@ -49,12 +50,19 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then - echo "Exit status - $stat" + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + else - echo "Exit status - $stat" + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + success_num++ fi done +echo "success_num" $success_num +echo "service_source_root" ${#service_source_root[*]} - -#echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +if [ $success_num == ${#service_source_root[*]} ] +then + echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +fi From 843a9cedaf88d5bde58389de631c08ff62b58d2e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:05:36 +0800 Subject: [PATCH 133/256] batch build --- script/batch_build_all_service.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index fe6c6f264..936c6339a 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -43,19 +43,18 @@ echo "wait all build finish" success_num = 0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do - - echo "wait pid: " ${build_pid_array[i]} + echo "wait pid: " ${build_pid_array[i]} ${service_names[$i]} wait ${build_pid_array[i]} stat=$? echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then - echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" - exit -1 + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + success_num++ else - echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num++ + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 fi done From 0aa19ed1b0e692150c9ce77496ae26e67c2ef4c8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:07:49 +0800 Subject: [PATCH 134/256] batch build --- script/batch_build_all_service.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 936c6339a..1bfc4ad93 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -28,18 +28,13 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do cd $begin_path service_path=${service_source_root[$i]} cd $service_path - make install & + make install > /dev/null & build_pid=$! build_pid_array[i]=$build_pid - if [ $? -ne 0 ]; then - echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" - exit -1 - else - echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - fi done -echo "wait all build finish" + +echo "wait all build finish....." success_num = 0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do From 26353fd28fc93378e5ba330fbd959c834f27fed8 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:08:33 +0800 Subject: [PATCH 135/256] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 1bfc4ad93..c96b9dbe2 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -45,7 +45,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num++ + success_num = $success_num +1 else echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" From 915539ca0f4e18b2d15156e1f145f82afc82358b Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:10:11 +0800 Subject: [PATCH 136/256] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index c96b9dbe2..b48bd2436 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -36,7 +36,7 @@ done echo "wait all build finish....." -success_num = 0 +success_num=0 for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo "wait pid: " ${build_pid_array[i]} ${service_names[$i]} wait ${build_pid_array[i]} From f51a074f867cec1e42904ee12513158099f42bba Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:11:46 +0800 Subject: [PATCH 137/256] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index b48bd2436..d0ea15260 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -45,7 +45,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num = $success_num +1 + success_num=$success_num+1 else echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" From fa02c20e1cfec0d9b8849f754c8584e643a3b4d3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 18:13:11 +0800 Subject: [PATCH 138/256] fix signal --- internal/demo/register/onboarding_process.go | 37 ++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index b25b2d763..3ced655ab 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -1,6 +1,7 @@ package register import ( + "Open_IM/internal/api/manage" "Open_IM/internal/rpc/msg" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" @@ -11,6 +12,7 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "encoding/json" "errors" "fmt" "math/rand" @@ -35,6 +37,7 @@ func onboardingProcess(operationID, userID, userName string) { log.NewInfo(operationID, utils.GetSelfFuncName(), groupIDList) joinGroups(operationID, userID, userName, groupIDList) log.NewInfo(operationID, utils.GetSelfFuncName(), "fineshed") + oaNotification(operationID, userID) } func createOrganizationUser(operationID, userID, userName string) error { @@ -184,8 +187,40 @@ func onboardingProcessNotification(operationID, userID, groupID, userName string SessionType: constant.GroupChatType, OperationID: operationID, } + // notification user join group msg.Notification(notification) + +} + +func oaNotification(operationID, userID string) { + elem := manage.OANotificationElem{ + NotificationName: "入职通知", + NotificationFaceURL: "", + NotificationType: 1, + Text: "欢迎你入职公司", + Url: "", + MixType: 0, + PictureElem: manage.PictureElem{}, + SoundElem: manage.SoundElem{}, + VideoElem: manage.VideoElem{}, + FileElem: manage.FileElem{}, + Ex: "", + } + bytes, err := json.Marshal(elem) + if err != nil { + return + } + sysNotification := &msg.NotificationMsg{ + SendID: config.Config.Manager.AppManagerUid[0], + RecvID: userID, + Content: bytes, + MsgFrom: constant.SysMsgType, + ContentType: constant.OANotification, + SessionType: constant.NotificationChatType, + OperationID: operationID, + } + msg.Notification(sysNotification) } func randomEnglishName() string { @@ -193,7 +228,6 @@ func randomEnglishName() string { "feudal", "adverse", "exploit", "occupy", "solve", "amazing", "fantasy", "orchid", "spiky", "approve", "flap"} rand.Seed(time.Now().UnixNano()) index := rand.Intn(len(l) - 1) - fmt.Println(index) return l[index] } @@ -201,6 +235,5 @@ func randomPosition() string { l := []string{"Golang工程师", "前端工程师", "后端工程师", "产品经理", "测试开发工程师", "运维开发工程师"} rand.Seed(time.Now().UnixNano()) index := rand.Intn(len(l) - 1) - fmt.Println(index) return l[index] } From 556ed8413f0ed38f752af52106ef9bda1899e733 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:21:09 +0800 Subject: [PATCH 139/256] batch build --- script/batch_build_all_service.sh | 6 +-- script/batch_start_all.sh | 67 +++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 script/batch_start_all.sh diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index d0ea15260..741da029d 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -45,7 +45,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" - success_num=$success_num+1 + let success_num=$success_num+1 else echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" @@ -53,9 +53,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do fi done -echo "success_num" $success_num -echo "service_source_root" ${#service_source_root[*]} - +echo "success_num" $success_num "service num:" ${#service_source_root[*]} if [ $success_num == ${#service_source_root[*]} ] then echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} diff --git a/script/batch_start_all.sh b/script/batch_start_all.sh new file mode 100644 index 000000000..aaa6177ae --- /dev/null +++ b/script/batch_start_all.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +#fixme This script is the total startup script +#fixme The full name of the shell script that needs to be started is placed in the need_to_start_server_shell array + +#fixme Put the shell script name here +need_to_start_server_shell=( + start_rpc_service.sh + msg_gateway_start.sh + push_start.sh + msg_transfer_start.sh + sdk_svr_start.sh + demo_svr_start.sh +) +time=`date +"%Y-%m-%d %H:%M:%S"` +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========server start time:${time}===========">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & + +build_pid_array=() + +for i in ${need_to_start_server_shell[*]}; do + chmod +x $i + ./$i & + build_pid=$! + build_pid_array[i]=$build_pid +done + +echo "wait all start finish....." + +for i in ${need_to_start_server_shell[*]}; do + chmod +x $i + ./$i & + if [ $? -ne 0 ]; then + exit -1 + fi +done + + + +success_num=0 +for ((i = 0; i < ${#need_to_start_server_shell[*]}; i++)); do + echo "wait pid: " ${build_pid_array[i]} ${need_to_start_server_shell[$i]} + wait ${build_pid_array[i]} + stat=$? + echo ${build_pid_array[i]} " " $stat + if [ $stat == 0 ] + then + echo -e "${GREEN_PREFIX}${need_to_start_server_shell[$i]} successfully be built ${COLOR_SUFFIX}\n" + let success_num=$success_num+1 + + else + echo -e "${RED_PREFIX}${need_to_start_server_shell[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + fi +done + +echo "success_num" $success_num "service num:" ${#need_to_start_server_shell[*]} +if [ $success_num == ${#need_to_start_server_shell[*]} ] +then + echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +fi + + From fdaf4380facfd37bbd022c019507222295dbb7ce Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 18:23:31 +0800 Subject: [PATCH 140/256] base64 userID --- internal/demo/register/onboarding_process.go | 1 + internal/demo/register/set_password.go | 2 +- pkg/utils/base64.go | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 pkg/utils/base64.go diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 3ced655ab..e52ac5aed 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -209,6 +209,7 @@ func oaNotification(operationID, userID string) { } bytes, err := json.Marshal(elem) if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "elem: ", elem, err.Error()) return } sysNotification := &msg.NotificationMsg{ diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index db1e7f434..fde97a634 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -53,7 +53,7 @@ func SetPassword(c *gin.Context) { return } } - userID := utils.Md5(account) + userID := utils.Base64Encode(account) url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID diff --git a/pkg/utils/base64.go b/pkg/utils/base64.go new file mode 100644 index 000000000..3f01c1488 --- /dev/null +++ b/pkg/utils/base64.go @@ -0,0 +1,12 @@ +package utils + +import "encoding/base64" + +func Base64Encode(data string) string { + return base64.StdEncoding.EncodeToString([]byte(data)) +} + +func Base64Decode(data string) string { + decodedByte, _ := base64.StdEncoding.DecodeString(data) + return string(decodedByte) +} From 8a471a5455fc6f28698e2ddbd4d4c7842fa1b557 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 10 Jun 2022 18:38:55 +0800 Subject: [PATCH 141/256] base64 userID --- internal/demo/register/onboarding_process.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index e52ac5aed..a41552962 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -15,6 +15,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/golang/protobuf/proto" "math/rand" "strings" "time" @@ -194,6 +195,7 @@ func onboardingProcessNotification(operationID, userID, groupID, userName string } func oaNotification(operationID, userID string) { + var err error elem := manage.OANotificationElem{ NotificationName: "入职通知", NotificationFaceURL: "", @@ -207,20 +209,22 @@ func oaNotification(operationID, userID string) { FileElem: manage.FileElem{}, Ex: "", } - bytes, err := json.Marshal(elem) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "elem: ", elem, err.Error()) - return - } sysNotification := &msg.NotificationMsg{ SendID: config.Config.Manager.AppManagerUid[0], RecvID: userID, - Content: bytes, MsgFrom: constant.SysMsgType, ContentType: constant.OANotification, SessionType: constant.NotificationChatType, OperationID: operationID, } + var tips commonPb.TipsComm + tips.JsonDetail = utils.StructToJsonString(elem) + sysNotification.Content, err = proto.Marshal(&tips) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "elem: ", elem, err.Error()) + return + } + msg.Notification(sysNotification) } From 722ada3f0e814f2e8295f79270454bc4e8427cae Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 18:55:21 +0800 Subject: [PATCH 142/256] batch build --- script/batch_start_all.sh | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/script/batch_start_all.sh b/script/batch_start_all.sh index aaa6177ae..6ccf74281 100644 --- a/script/batch_start_all.sh +++ b/script/batch_start_all.sh @@ -31,15 +31,7 @@ done echo "wait all start finish....." -for i in ${need_to_start_server_shell[*]}; do - chmod +x $i - ./$i & - if [ $? -ne 0 ]; then - exit -1 - fi -done - - +exit 0 success_num=0 for ((i = 0; i < ${#need_to_start_server_shell[*]}; i++)); do @@ -49,11 +41,11 @@ for ((i = 0; i < ${#need_to_start_server_shell[*]}; i++)); do echo ${build_pid_array[i]} " " $stat if [ $stat == 0 ] then - echo -e "${GREEN_PREFIX}${need_to_start_server_shell[$i]} successfully be built ${COLOR_SUFFIX}\n" + # echo -e "${GREEN_PREFIX}${need_to_start_server_shell[$i]} successfully be built ${COLOR_SUFFIX}\n" let success_num=$success_num+1 else - echo -e "${RED_PREFIX}${need_to_start_server_shell[$i]} build failed ${COLOR_SUFFIX}\n" + #echo -e "${RED_PREFIX}${need_to_start_server_shell[$i]} build failed ${COLOR_SUFFIX}\n" exit -1 fi done From a6a80a8b936fb6887cea2c72f09463cbe7992f50 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 10 Jun 2022 21:37:48 +0800 Subject: [PATCH 143/256] batch build --- script/batch_start_all.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/script/batch_start_all.sh b/script/batch_start_all.sh index 6ccf74281..c2d78c509 100644 --- a/script/batch_start_all.sh +++ b/script/batch_start_all.sh @@ -21,12 +21,14 @@ echo "==========================================================">>../logs/openI echo "==========================================================">>../logs/openIM.log 2>&1 & build_pid_array=() - +idx=0 for i in ${need_to_start_server_shell[*]}; do chmod +x $i ./$i & build_pid=$! - build_pid_array[i]=$build_pid + echo "build_pid " $build_pid + build_pid_array[idx]=$build_pid + let idx=idx+1 done echo "wait all start finish....." From dc10c7e3e76ff1450b9b9158dfabe8b89454d3ee Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 09:23:51 +0800 Subject: [PATCH 144/256] batch push --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 81fb024ca..a04bc9f8e 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -47,7 +47,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { grpcCons = getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName) } //Online push message - log.Debug("test", pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) + log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) From 952033f409427353319e4a3be9b7a44039f9f973 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 09:26:49 +0800 Subject: [PATCH 145/256] compile --- internal/demo/register/onboarding_process.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a41552962..56be5bc78 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -12,7 +12,6 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "encoding/json" "errors" "fmt" "github.com/golang/protobuf/proto" From f232ffb5cc46227f53aefada0c7932ff8d489186 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 09:50:24 +0800 Subject: [PATCH 146/256] batch build --- script/batch_build_all_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/batch_build_all_service.sh b/script/batch_build_all_service.sh index 741da029d..bf780008f 100644 --- a/script/batch_build_all_service.sh +++ b/script/batch_build_all_service.sh @@ -41,7 +41,7 @@ for ((i = 0; i < ${#service_source_root[*]}; i++)); do echo "wait pid: " ${build_pid_array[i]} ${service_names[$i]} wait ${build_pid_array[i]} stat=$? - echo ${build_pid_array[i]} " " $stat + echo ${service_names[$i]} "pid: " ${build_pid_array[i]} "stat: " $stat if [ $stat == 0 ] then echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" From 9216a085cf0f45cacc9432b3505625c5f9c3e07e Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 10:42:26 +0800 Subject: [PATCH 147/256] log --- internal/msg_gateway/gate/batch_push.go | 4 ++++ internal/msg_gateway/gate/rpc_server.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 8f556e4d5..ebb2fa05f 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -46,15 +46,18 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { userConn := ws.getUserConn(pushToUserID, platformID) if userConn == nil { + log.Debug(operationID, "userConn == nil") return []*sdk_ws.MsgData{msgData} } if msgData.Seq <= userConn.PushedMaxSeq { + log.Debug(operationID, "msgData.Seq <= userConn.PushedMaxSeq", msgData.Seq, userConn.PushedMaxSeq) return nil } msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) if msgList == nil { + log.Debug(operationID, "GetSingleUserMsg msgList == nil", msgData.Seq, userConn.PushedMaxSeq) userConn.PushedMaxSeq = msgData.Seq return []*sdk_ws.MsgData{msgData} } @@ -65,6 +68,7 @@ func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws. userConn.PushedMaxSeq = v.Seq } } + log.Debug(operationID, "GetSingleUserMsg msgList len ", len(msgList), userConn.PushedMaxSeq) return msgList } diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 86a25850d..0a8754257 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -207,10 +207,10 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online } log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList) needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", req.MsgData.Seq, v, platformList, len(needPushMapList)) + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms end", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) + log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) for _, v := range list { req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) } From dad40d60b38af79f46d8a938025ebce0937d7faa Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 10:54:17 +0800 Subject: [PATCH 148/256] debug --- internal/msg_gateway/gate/batch_push.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index ebb2fa05f..34d7c0792 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -36,10 +36,10 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) - for _, v := range platformIDList { - user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - } + //for _, v := range platformIDList { + // user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + // log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + //} return user2PushMsg } From 9619584de563832e3f9681007865d503c66372ee Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 11:27:58 +0800 Subject: [PATCH 149/256] debug --- internal/msg_gateway/gate/batch_push.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 34d7c0792..d166a4159 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -36,14 +36,16 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) - //for _, v := range platformIDList { - // user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - // log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - //} + for _, v := range platformIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + } return user2PushMsg } func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { + return []*sdk_ws.MsgData{msgData} + userConn := ws.getUserConn(pushToUserID, platformID) if userConn == nil { log.Debug(operationID, "userConn == nil") From ae6c09aae2854d35fa41ad7e0498356b5d3c7f58 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 11:53:04 +0800 Subject: [PATCH 150/256] debug log --- internal/msg_gateway/gate/rpc_server.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 0a8754257..5f5d3646c 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -212,13 +212,17 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online if list != nil { log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) for _, v := range list { + log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) } + replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { log.Error(req.OperationID, "encodeWsData failed ", req.MsgData.String()) continue } + log.Debug(req.OperationID, "encodeWsData", "len: ", replyBytes.Len()) resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { tempT.OnlinePush = true From 8269e61163d5f85ec31e7adaa898896ffb96a902 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:03:12 +0800 Subject: [PATCH 151/256] debug log --- internal/msg_gateway/gate/rpc_server.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 5f5d3646c..af6e62e16 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -254,7 +254,13 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online }, nil } func (r *RPCServer) encodeWsData(wsData *sdk_ws.MsgData, operationID string) (bytes.Buffer, error) { - msgBytes, _ := proto.Marshal(wsData) + log.Debug(operationID, "encodeWsData begin", wsData.String()) + msgBytes, err := proto.Marshal(wsData) + if err != nil { + log.NewError(operationID, "Marshal", err.Error()) + return bytes.Buffer{}, utils.Wrap(err, "") + } + log.Debug(operationID, "encodeWsData begin", wsData.String()) mReply := Resp{ ReqIdentifier: constant.WSPushMsg, OperationID: operationID, @@ -262,10 +268,10 @@ func (r *RPCServer) encodeWsData(wsData *sdk_ws.MsgData, operationID string) (by } var replyBytes bytes.Buffer enc := gob.NewEncoder(&replyBytes) - err := enc.Encode(mReply) + err = enc.Encode(mReply) if err != nil { log.NewError(operationID, "data encode err", err.Error()) - return bytes.Buffer{}, err + return bytes.Buffer{}, utils.Wrap(err, "") } return replyBytes, nil } From 85c0e1f330254e910746902d504d190fd1a431be Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:09:50 +0800 Subject: [PATCH 152/256] debug log --- internal/msg_gateway/gate/rpc_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index af6e62e16..582b38e47 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -216,7 +216,8 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) } - + log.Debug(req.OperationID, "r.encodeWsData no string") + log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { log.Error(req.OperationID, "encodeWsData failed ", req.MsgData.String()) From c171728749305d8662affb16de0f1601067ac851 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:16:32 +0800 Subject: [PATCH 153/256] fix bug --- internal/msg_gateway/gate/rpc_server.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 582b38e47..2f2dbb7f3 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -211,11 +211,13 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for platform, list := range needPushMapList { if list != nil { log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) - for _, v := range list { - log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) - req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) - } + //for _, v := range list { + // log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) + // req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + // log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + //} + req.MsgData.MsgDataList = list + log.Debug(req.OperationID, "r.encodeWsData no string") log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) From 5f813c6f704563763c2fd52964525fb10b4e3ac6 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:43:54 +0800 Subject: [PATCH 154/256] fix bug --- internal/msg_gateway/gate/batch_push.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index d166a4159..9e08c4ef4 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -44,6 +44,7 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData } func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { + msgData.MsgDataList = nil return []*sdk_ws.MsgData{msgData} userConn := ws.getUserConn(pushToUserID, platformID) From ef23fba147f8a057ca21eaf857991b649280123a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 12:50:20 +0800 Subject: [PATCH 155/256] log --- internal/msg_gateway/gate/rpc_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 2f2dbb7f3..119afa0dd 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -205,7 +205,7 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for k, _ := range userConnMap { platformList = append(platformList, k) } - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList) + log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList, req.MsgData.String()) needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms end", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { From af612e4b9237d99f4343a7264f5b7ea8e2f943c9 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 11 Jun 2022 13:25:32 +0800 Subject: [PATCH 156/256] log --- internal/msg_gateway/gate/rpc_server.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 119afa0dd..a3a137f0e 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -211,14 +211,15 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online for platform, list := range needPushMapList { if list != nil { log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) - //for _, v := range list { - // log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList)) - // req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - // log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) - //} - req.MsgData.MsgDataList = list + for _, v := range list { + log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList), v.String()) + req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + } log.Debug(req.OperationID, "r.encodeWsData no string") + log.Debug(req.OperationID, "r.encodeWsData data0 list ", req.MsgData.MsgDataList[0].String()) + log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) if err != nil { From f9c2b4c28e0348ab710ae11ed6c72a500a18ac97 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 09:00:09 +0800 Subject: [PATCH 157/256] SuperGroupOnlineBatchPushOneMsg --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index a04bc9f8e..289b18308 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) continue From dbc055efb43f49e7668c9ba6350fce6c038b86e0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 10:38:00 +0800 Subject: [PATCH 158/256] org --- internal/demo/register/onboarding_process.go | 8 +++++++- .../mysql_model/im_mysql_model/organization_model.go | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a41552962..a8d80666f 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -5,6 +5,8 @@ import ( "Open_IM/internal/rpc/msg" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" groupRpc "Open_IM/pkg/proto/group" @@ -30,7 +32,11 @@ func onboardingProcess(operationID, userID, userName string) { if err := joinTestDepartment(operationID, userID, departmentID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - + departmentID, err := imdb.GetRandomDepartmentID() + if err != nil { + log.NewError(utils.GetSelfFuncName(), "GetRandomDepartmentID failed", err.Error()) + return + } groupIDList, err := GetDepartmentGroupIDList(operationID, departmentID) if err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 43a144963..519b1f021 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -295,3 +295,13 @@ func GetDepartmentParentIDList(departmentID string) ([]string, error) { err = GetDepartmentParent(departmentID, dbConn, &parentIDList) return parentIDList, err } + +func GetRandomDepartmentID() (string, error) { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return "", err + } + department := &db.Department{} + err = dbConn.Model(department).Where("related_group_id != ? AND parent_id != ?", "", "").Take(department).Error + return department.DepartmentID, err +} From 5419478c48e2f21c4acaa9c88a2773aea31683d9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 12:23:13 +0800 Subject: [PATCH 159/256] org --- internal/demo/register/onboarding_process.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index d58372dba..6100165ee 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -5,7 +5,6 @@ import ( "Open_IM/internal/rpc/msg" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" From 39d4d0181474a9c9126c3138dfd5054dfbc4dd97 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 13:01:49 +0800 Subject: [PATCH 160/256] org --- internal/demo/register/onboarding_process.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 6100165ee..a937fc3eb 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -31,6 +31,7 @@ func onboardingProcess(operationID, userID, userName string) { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } departmentID, err := imdb.GetRandomDepartmentID() + log.NewInfo(operationID, utils.GetSelfFuncName(), "random departmentID", departmentID) if err != nil { log.NewError(utils.GetSelfFuncName(), "GetRandomDepartmentID failed", err.Error()) return From 47184ca01e6f2b05bb9d4a655fd4c74334e53ef0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 13 Jun 2022 14:27:41 +0800 Subject: [PATCH 161/256] org --- internal/api/manage/management_chat.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 5519135b3..5ed04bf7e 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -347,15 +347,15 @@ type RevokeElem struct { RevokeMsgClientID string `mapstructure:"revokeMsgClientID" validate:"required"` } type OANotificationElem struct { - NotificationName string `mapstructure:"notificationName" validate:"required"` - NotificationFaceURL string `mapstructure:"notificationFaceURL" validate:"required"` - NotificationType int32 `mapstructure:"notificationType" validate:"required"` - Text string `mapstructure:"text" validate:"required"` - Url string `mapstructure:"url"` - MixType int32 `mapstructure:"mixType"` - PictureElem PictureElem `mapstructure:"pictureElem"` - SoundElem SoundElem `mapstructure:"soundElem"` - VideoElem VideoElem `mapstructure:"videoElem"` - FileElem FileElem `mapstructure:"fileElem"` - Ex string `mapstructure:"ex"` + NotificationName string `mapstructure:"notificationName" json:"notificationName" validate:"required"` + NotificationFaceURL string `mapstructure:"notificationFaceURL" json:"notificationFaceURL" validate:"required"` + NotificationType int32 `mapstructure:"notificationType" json:"notificationType" validate:"required"` + Text string `mapstructure:"text" json:"text" validate:"required"` + Url string `mapstructure:"url" json:"url"` + MixType int32 `mapstructure:"mixType" json:"mixType"` + PictureElem PictureElem `mapstructure:"pictureElem" json:"pictureElem"` + SoundElem SoundElem `mapstructure:"soundElem" json:"soundElem"` + VideoElem VideoElem `mapstructure:"videoElem" json:"videoElem"` + FileElem FileElem `mapstructure:"fileElem" json:"fileElem"` + Ex string `mapstructure:"ex" json:"ex"` } From 9ae84a69be3e499715530bde6341fb5b45fa36a4 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 14:56:24 +0800 Subject: [PATCH 162/256] SuperGroupOnlineBatchPushOneMsg --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 289b18308..5e7daf0e8 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -52,7 +52,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { - log.NewError("push data to client rpc err", pushMsg.OperationID, "err", err) + log.NewError("SuperGroupOnlineBatchPushOneMsg push data to client rpc err", pushMsg.OperationID, "err", err) continue } if reply != nil && reply.SinglePushResult != nil { From f3b083cafdf9fd498ef98682b0f9db665a708827 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:19:04 +0800 Subject: [PATCH 163/256] push update --- internal/msg_gateway/gate/batch_push.go | 12 ++++++------ internal/msg_gateway/gate/rpc_server.go | 20 +++++++++++++------- pkg/proto/sdk_ws/ws.proto | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 9e08c4ef4..7a21dde73 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -34,12 +34,12 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID return seqList, nil } -func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int][]*sdk_ws.MsgData { - user2PushMsg := make(map[int][]*sdk_ws.MsgData, 0) - for _, v := range platformIDList { - user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - } +func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int]*sdk_ws.MsgDataList { + user2PushMsg := make(map[int]*sdk_ws.MsgDataList, 0) + //for _, v := range platformIDList { + //user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + //log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + //} return user2PushMsg } diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index a3a137f0e..6b851b8f0 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -210,15 +210,21 @@ func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *pbRelay.Online log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms end", req.MsgData.Seq, v, platformList, len(needPushMapList)) for platform, list := range needPushMapList { if list != nil { - log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:", len(list)) - for _, v := range list { - log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList), v.String()) - req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:") + //for _, v := range list { + // log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList), v.String()) + // req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) + // log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) + //} + msgBytes, err := proto.Marshal(list) + if err != nil { + log.Error(req.OperationID, "proto marshal err", err.Error()) + continue } - + req.MsgData.MsgDataList = msgBytes + //req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) log.Debug(req.OperationID, "r.encodeWsData no string") - log.Debug(req.OperationID, "r.encodeWsData data0 list ", req.MsgData.MsgDataList[0].String()) + //log.Debug(req.OperationID, "r.encodeWsData data0 list ", req.MsgData.MsgDataList[0].String()) log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index e7fbfe7c5..bb57752d1 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -238,7 +238,7 @@ message MsgData { map options = 18; OfflinePushInfo offlinePushInfo = 19; repeated string atUserIDList = 20; - repeated MsgData msgDataList = 21; + bytes msgDataList = 21; } message OfflinePushInfo{ From 2cbffb96fda541bea540ec36631856c94e9cb50f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:20:23 +0800 Subject: [PATCH 164/256] push update --- pkg/proto/sdk_ws/ws.pb.go | 560 +++++++++++++++++++------------------- 1 file changed, 280 insertions(+), 280 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 184334751..21094b3ee 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,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_df70a2fd28b03292, []int{0} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,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_df70a2fd28b03292, []int{1} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,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_df70a2fd28b03292, []int{2} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -352,7 +352,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_df70a2fd28b03292, []int{3} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -459,7 +459,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_df70a2fd28b03292, []int{4} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +544,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_df70a2fd28b03292, []int{5} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +625,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_df70a2fd28b03292, []int{6} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +733,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_df70a2fd28b03292, []int{7} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +878,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_df70a2fd28b03292, []int{8} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +989,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_df70a2fd28b03292, []int{9} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1103,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_df70a2fd28b03292, []int{10} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1184,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_df70a2fd28b03292, []int{11} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1230,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_df70a2fd28b03292, []int{12} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1279,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_df70a2fd28b03292, []int{13} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1338,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_df70a2fd28b03292, []int{14} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1376,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_df70a2fd28b03292, []int{15} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1417,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_df70a2fd28b03292, []int{16} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1478,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_df70a2fd28b03292, []int{17} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1531,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_df70a2fd28b03292, []int{18} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1580,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_df70a2fd28b03292, []int{19} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1648,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_df70a2fd28b03292, []int{20} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1709,7 +1709,7 @@ type MsgData struct { Options map[string]bool `protobuf:"bytes,18,rep,name=options" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` OfflinePushInfo *OfflinePushInfo `protobuf:"bytes,19,opt,name=offlinePushInfo" json:"offlinePushInfo,omitempty"` AtUserIDList []string `protobuf:"bytes,20,rep,name=atUserIDList" json:"atUserIDList,omitempty"` - MsgDataList []*MsgData `protobuf:"bytes,21,rep,name=msgDataList" json:"msgDataList,omitempty"` + MsgDataList []byte `protobuf:"bytes,21,opt,name=msgDataList,proto3" json:"msgDataList,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1719,7 +1719,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_df70a2fd28b03292, []int{21} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1872,7 +1872,7 @@ func (m *MsgData) GetAtUserIDList() []string { return nil } -func (m *MsgData) GetMsgDataList() []*MsgData { +func (m *MsgData) GetMsgDataList() []byte { if m != nil { return m.MsgDataList } @@ -1894,7 +1894,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_df70a2fd28b03292, []int{22} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1962,7 +1962,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_df70a2fd28b03292, []int{23} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2019,7 +2019,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_df70a2fd28b03292, []int{24} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2088,7 +2088,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_df70a2fd28b03292, []int{25} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2143,7 +2143,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_df70a2fd28b03292, []int{26} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2199,7 +2199,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_df70a2fd28b03292, []int{27} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2254,7 +2254,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_df70a2fd28b03292, []int{28} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2309,7 +2309,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_df70a2fd28b03292, []int{29} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2365,7 +2365,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_df70a2fd28b03292, []int{30} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2428,7 +2428,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_df70a2fd28b03292, []int{31} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2491,7 +2491,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_df70a2fd28b03292, []int{32} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2553,7 +2553,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_df70a2fd28b03292, []int{33} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2607,7 +2607,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_df70a2fd28b03292, []int{34} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2663,7 +2663,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_df70a2fd28b03292, []int{35} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2732,7 +2732,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_df70a2fd28b03292, []int{36} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2793,7 +2793,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_df70a2fd28b03292, []int{37} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2847,7 +2847,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_df70a2fd28b03292, []int{38} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2902,7 +2902,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_df70a2fd28b03292, []int{39} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2962,7 +2962,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_df70a2fd28b03292, []int{40} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3009,7 +3009,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_df70a2fd28b03292, []int{41} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3062,7 +3062,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_df70a2fd28b03292, []int{42} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3108,7 +3108,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_df70a2fd28b03292, []int{43} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3148,7 +3148,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_df70a2fd28b03292, []int{44} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3195,7 +3195,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_df70a2fd28b03292, []int{45} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3243,7 +3243,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_df70a2fd28b03292, []int{46} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3296,7 +3296,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_df70a2fd28b03292, []int{47} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3334,7 +3334,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_df70a2fd28b03292, []int{48} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3372,7 +3372,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_df70a2fd28b03292, []int{49} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3410,7 +3410,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_df70a2fd28b03292, []int{50} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3449,7 +3449,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_df70a2fd28b03292, []int{51} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3488,7 +3488,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_df70a2fd28b03292, []int{52} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3528,7 +3528,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_df70a2fd28b03292, []int{53} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3583,7 +3583,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_df70a2fd28b03292, []int{54} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3637,7 +3637,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_df70a2fd28b03292, []int{55} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3683,7 +3683,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_df70a2fd28b03292, []int{56} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3736,7 +3736,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_df70a2fd28b03292, []int{57} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4003,7 +4003,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_df70a2fd28b03292, []int{58} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4271,7 +4271,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_df70a2fd28b03292, []int{59} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4367,7 +4367,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_df70a2fd28b03292, []int{60} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4422,7 +4422,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_df70a2fd28b03292, []int{61} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4483,7 +4483,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_df70a2fd28b03292, []int{62} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4538,7 +4538,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_df70a2fd28b03292, []int{63} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4599,7 +4599,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_df70a2fd28b03292, []int{64} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4654,7 +4654,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_df70a2fd28b03292, []int{65} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4712,7 +4712,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_df70a2fd28b03292, []int{66} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4747,7 +4747,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_df70a2fd28b03292, []int{67} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4815,7 +4815,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_df70a2fd28b03292, []int{68} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4869,7 +4869,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_df70a2fd28b03292, []int{69} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4920,7 +4920,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_df70a2fd28b03292, []int{70} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4955,7 +4955,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_df70a2fd28b03292, []int{71} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5020,7 +5020,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_df70a2fd28b03292, []int{72} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5054,7 +5054,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_df70a2fd28b03292, []int{73} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5114,7 +5114,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_df70a2fd28b03292, []int{74} + return fileDescriptor_ws_c8bc58641c7ea7c8, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5230,212 +5230,212 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_df70a2fd28b03292) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_c8bc58641c7ea7c8) } -var fileDescriptor_ws_df70a2fd28b03292 = []byte{ - // 3260 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_c8bc58641c7ea7c8 = []byte{ + // 3261 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x09, 0x24, 0xc4, 0x8d, 0x13, 0x1c, 0x38, 0x80, 0xc4, 0x05, 0x81, 0xa2, 0x28, 0x42, - 0x20, 0x71, 0x40, 0x88, 0x03, 0x37, 0x2e, 0x70, 0x44, 0xdc, 0x38, 0x73, 0xe5, 0x80, 0x84, 0x04, - 0x7a, 0x55, 0xaf, 0xbb, 0xdf, 0xeb, 0xee, 0xb1, 0x67, 0x47, 0x56, 0x76, 0xa3, 0xe5, 0xe6, 0xaa, - 0x79, 0x55, 0xaf, 0xaa, 0xbe, 0x7a, 0xaf, 0xaa, 0xdf, 0x7b, 0x86, 0x85, 0xd8, 0x39, 0x7c, 0xef, - 0x6e, 0xfc, 0xfc, 0xdd, 0xf8, 0x52, 0x18, 0x05, 0x49, 0x60, 0x2c, 0xc5, 0x2c, 0x3a, 0x66, 0xd1, - 0x7b, 0x76, 0xe8, 0xbe, 0x17, 0xda, 0x91, 0x3d, 0x8c, 0xcd, 0x7f, 0xe9, 0xd0, 0xbe, 0x1a, 0x05, - 0x69, 0x78, 0xdd, 0xdf, 0x0f, 0x8c, 0x2e, 0x4c, 0x0f, 0x90, 0xd8, 0xea, 0x6a, 0xab, 0xda, 0xb3, - 0x6d, 0x2b, 0x23, 0x8d, 0x0b, 0xd0, 0xc6, 0x3f, 0x77, 0xec, 0x21, 0xeb, 0xea, 0xf8, 0x5b, 0xc1, - 0x30, 0x4c, 0x98, 0xf5, 0x83, 0xc4, 0xdd, 0x77, 0xfb, 0x76, 0xe2, 0x06, 0x7e, 0xb7, 0x81, 0x03, - 0x14, 0x1e, 0x1f, 0xe3, 0xfa, 0x49, 0x14, 0x38, 0x69, 0x1f, 0xc7, 0x4c, 0xd1, 0x18, 0x99, 0xc7, - 0xe7, 0xdf, 0xb7, 0xfb, 0xec, 0xb6, 0x75, 0xa3, 0xdb, 0xa4, 0xf9, 0x05, 0x69, 0xac, 0x42, 0x27, - 0xb8, 0xeb, 0xb3, 0xe8, 0x76, 0xcc, 0xa2, 0xeb, 0x5b, 0xdd, 0x16, 0xfe, 0x2a, 0xb3, 0x8c, 0x8b, - 0x00, 0xfd, 0x88, 0xd9, 0x09, 0xbb, 0xe5, 0x0e, 0x59, 0x77, 0x7a, 0x55, 0x7b, 0x76, 0xce, 0x92, - 0x38, 0x5c, 0xc3, 0x90, 0x0d, 0xf7, 0x58, 0xb4, 0x19, 0xa4, 0x7e, 0xd2, 0x9d, 0xc1, 0x01, 0x32, - 0xcb, 0x98, 0x07, 0x9d, 0xdd, 0xeb, 0xb6, 0x51, 0xb5, 0xce, 0xee, 0x19, 0xcb, 0xd0, 0x8a, 0x13, - 0x3b, 0x49, 0xe3, 0x2e, 0xac, 0x6a, 0xcf, 0x36, 0x2d, 0x41, 0x19, 0x6b, 0x30, 0x87, 0x7a, 0x83, - 0xcc, 0x9a, 0x0e, 0x8a, 0xa8, 0xcc, 0x3c, 0x62, 0xb7, 0xee, 0x87, 0xac, 0x3b, 0x8b, 0x0a, 0x0a, - 0x86, 0xf9, 0x37, 0x1d, 0xce, 0x61, 0xdc, 0xb7, 0xd1, 0x80, 0x2b, 0xa9, 0xe7, 0x9d, 0x82, 0xc0, - 0x32, 0xb4, 0x52, 0x9a, 0x8e, 0xc2, 0x2f, 0x28, 0x3e, 0x4f, 0x14, 0x78, 0xec, 0x06, 0x3b, 0x66, - 0x1e, 0x06, 0xbe, 0x69, 0x15, 0x0c, 0x63, 0x05, 0x66, 0xee, 0x04, 0xae, 0x8f, 0x31, 0x99, 0xc2, - 0x1f, 0x73, 0x9a, 0xff, 0xe6, 0xbb, 0xfd, 0x43, 0x9f, 0x43, 0x4a, 0xe1, 0xce, 0x69, 0x19, 0x89, - 0x96, 0x8a, 0xc4, 0x33, 0x30, 0x6f, 0x87, 0xe1, 0xb6, 0xed, 0x0f, 0x58, 0x44, 0x93, 0x4e, 0xa3, - 0xde, 0x12, 0x97, 0xe3, 0xc1, 0x67, 0xea, 0x05, 0x69, 0xd4, 0x67, 0x18, 0xee, 0xa6, 0x25, 0x71, - 0xb8, 0x9e, 0x20, 0x64, 0x91, 0x14, 0x46, 0x8a, 0x7c, 0x89, 0x2b, 0x50, 0x81, 0x1c, 0x15, 0x8e, - 0x63, 0x9a, 0xb0, 0x37, 0x7c, 0x07, 0x9d, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x7d, 0x0d, 0xe6, - 0x77, 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0x1e, 0xd6, 0x22, 0x78, 0x9a, 0x12, 0x3c, 0x39, 0x04, - 0xfa, 0xe8, 0x10, 0x34, 0xd4, 0x10, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0x22, 0xa4, 0x82, - 0x12, 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x1f, 0xeb, 0x30, 0xf3, 0x11, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, - 0x20, 0xf0, 0xd9, 0x4e, 0xca, 0xd3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, - 0xe4, 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, - 0x1c, 0x9a, 0xc9, 0x63, 0xaf, 0xae, 0xb1, 0x76, 0x65, 0x8d, 0x55, 0x73, 0x03, 0xea, 0x72, 0xc3, - 0xfc, 0xb7, 0x06, 0x70, 0x25, 0x72, 0x99, 0xef, 0x60, 0x68, 0x4a, 0x8b, 0x5b, 0xab, 0x2e, 0xee, - 0x65, 0x68, 0x45, 0x6c, 0x68, 0x47, 0x87, 0x59, 0xf2, 0x13, 0x55, 0x32, 0xa8, 0x51, 0x31, 0xe8, - 0x55, 0x80, 0x7d, 0x9c, 0x87, 0xeb, 0xc1, 0x50, 0x75, 0x5e, 0xfc, 0xd4, 0xa5, 0xca, 0x36, 0x78, - 0x29, 0x43, 0xc9, 0x92, 0x86, 0xf3, 0x95, 0x65, 0x3b, 0x8e, 0x48, 0xe0, 0x26, 0xad, 0xac, 0x9c, - 0x51, 0x93, 0xbf, 0xad, 0x13, 0xf2, 0x77, 0x3a, 0x4f, 0x8a, 0x7f, 0x6a, 0xd0, 0xde, 0xf0, 0xec, - 0xfe, 0xe1, 0x98, 0xae, 0xab, 0x2e, 0xea, 0x15, 0x17, 0xaf, 0xc2, 0xdc, 0x1e, 0x57, 0x97, 0xb9, - 0x80, 0x51, 0xe8, 0xbc, 0xf8, 0x99, 0x1a, 0x2f, 0xd5, 0x45, 0x61, 0xa9, 0x72, 0xaa, 0xbb, 0x53, - 0xa7, 0xbb, 0xdb, 0x3c, 0xc1, 0xdd, 0x56, 0xee, 0xee, 0x5f, 0x75, 0x98, 0xc5, 0x8d, 0xce, 0x62, - 0x47, 0x29, 0x8b, 0x13, 0xe3, 0x75, 0x98, 0x49, 0x33, 0x53, 0xb5, 0x71, 0x4d, 0xcd, 0x45, 0x8c, - 0x57, 0xc4, 0xb6, 0x8a, 0xf2, 0x3a, 0xca, 0x5f, 0xa8, 0x91, 0xcf, 0x6b, 0x9a, 0x55, 0x0c, 0xe7, - 0x25, 0xe8, 0xc0, 0xf6, 0x1d, 0x8f, 0x59, 0x2c, 0x4e, 0xbd, 0x44, 0xec, 0x96, 0x0a, 0x8f, 0x32, - 0xed, 0x68, 0x3b, 0x1e, 0x88, 0x02, 0x25, 0x28, 0x1e, 0x1d, 0x1a, 0xc7, 0x7f, 0x22, 0xd7, 0x0b, - 0x06, 0x5f, 0xa8, 0x11, 0x3b, 0x42, 0x84, 0x68, 0x59, 0x65, 0x64, 0x31, 0xa7, 0x88, 0x1a, 0x25, - 0x82, 0xc2, 0xe3, 0x10, 0x13, 0x8d, 0x0a, 0xa8, 0x32, 0x49, 0x9c, 0x72, 0x61, 0x32, 0xff, 0xde, - 0x80, 0x39, 0x5a, 0x3e, 0x59, 0x50, 0x2f, 0xf2, 0x3c, 0x0f, 0x86, 0x4a, 0x16, 0x49, 0x1c, 0x6e, - 0x05, 0xa7, 0x76, 0xd4, 0x8d, 0x46, 0xe1, 0xf1, 0x54, 0xe4, 0xf4, 0x15, 0x65, 0xc3, 0x91, 0x59, - 0xd9, 0x2c, 0x57, 0xe5, 0x8d, 0x47, 0xe2, 0xf0, 0xad, 0x2c, 0x09, 0x94, 0xec, 0xc8, 0x69, 0x2e, - 0x9b, 0x04, 0xf9, 0xfc, 0x94, 0x1f, 0x12, 0x87, 0xc7, 0x37, 0x09, 0xb2, 0xb9, 0x29, 0x48, 0x05, - 0x83, 0x34, 0x8b, 0x79, 0xa9, 0x94, 0xe4, 0x74, 0x05, 0xd5, 0xf6, 0x89, 0xa8, 0x82, 0x82, 0xaa, - 0xba, 0xb8, 0x3a, 0x95, 0xc5, 0xb5, 0x06, 0x73, 0xa4, 0x27, 0x4b, 0xfa, 0x59, 0x2a, 0xf5, 0x0a, - 0x53, 0xcd, 0x8d, 0xb9, 0x72, 0x6e, 0xa8, 0xe8, 0xce, 0x8f, 0x40, 0x77, 0x21, 0x47, 0xf7, 0xd7, - 0x3a, 0xc0, 0x16, 0x0b, 0xed, 0x28, 0x19, 0x32, 0x3f, 0xe1, 0xee, 0x39, 0x39, 0x95, 0x83, 0xab, - 0xf0, 0xe4, 0x3a, 0xa1, 0xab, 0x75, 0xc2, 0x80, 0x29, 0x0c, 0x38, 0xa1, 0x89, 0x7f, 0xf3, 0x60, - 0x86, 0x76, 0x44, 0xda, 0x28, 0xc9, 0x73, 0x9a, 0xd7, 0x81, 0x20, 0x72, 0x44, 0xe5, 0x68, 0x5a, - 0x44, 0xf0, 0xc5, 0x5f, 0xcc, 0x87, 0x0d, 0x4d, 0x8b, 0xf6, 0x75, 0x95, 0x7b, 0x6a, 0x0f, 0xf6, - 0x1c, 0x2c, 0xc6, 0xe9, 0x5e, 0xe1, 0xdc, 0x4e, 0x3a, 0x14, 0xe9, 0x5e, 0xe1, 0xf3, 0xa0, 0x52, - 0x73, 0xc6, 0x07, 0x51, 0xa9, 0x29, 0x18, 0xe5, 0xae, 0xc0, 0x7c, 0x5f, 0x87, 0xc5, 0x9b, 0xd1, - 0xc0, 0xf6, 0xdd, 0x6f, 0x63, 0xbb, 0x89, 0x1b, 0xf8, 0x24, 0x25, 0x77, 0x15, 0x3a, 0xcc, 0x1f, - 0x78, 0x6e, 0x7c, 0xb0, 0x53, 0xc4, 0x4d, 0x66, 0xc9, 0xc1, 0x9e, 0x1a, 0x55, 0x94, 0x9b, 0x4a, - 0x51, 0x5e, 0x86, 0xd6, 0x30, 0xd8, 0x73, 0xbd, 0x2c, 0xef, 0x05, 0x85, 0x39, 0xcf, 0x3c, 0x86, - 0xd5, 0x39, 0xcf, 0xf9, 0x8c, 0x51, 0x14, 0xea, 0x99, 0xda, 0x42, 0xdd, 0x96, 0x0b, 0xb5, 0x1a, - 0x78, 0xa8, 0x04, 0x9e, 0xc2, 0xd5, 0xc9, 0xc3, 0xf5, 0x47, 0x0d, 0x16, 0x8b, 0x70, 0x53, 0x0f, - 0x3a, 0x32, 0x5c, 0xe5, 0x0c, 0xd4, 0x6b, 0x32, 0x30, 0xcf, 0x9b, 0x86, 0x9c, 0x37, 0x3c, 0xd3, - 0x82, 0xd8, 0x95, 0xfa, 0xfd, 0x9c, 0xe6, 0xb3, 0x79, 0xcc, 0x96, 0x82, 0x45, 0x94, 0xd4, 0x75, - 0xb7, 0x94, 0xae, 0xbb, 0x5c, 0x47, 0x7f, 0xa7, 0xc1, 0x79, 0x8e, 0x72, 0xc5, 0x8d, 0x9b, 0xb0, - 0x18, 0x94, 0x32, 0x41, 0x14, 0x9a, 0xa7, 0x6b, 0x0a, 0x45, 0x39, 0x69, 0xac, 0x8a, 0x30, 0x57, - 0xe8, 0x94, 0x26, 0x11, 0x95, 0xa7, 0x4e, 0x61, 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x5e, 0x83, - 0x45, 0x2a, 0x6d, 0xd2, 0x3a, 0x3f, 0x73, 0xb3, 0xdf, 0x81, 0xf3, 0xe5, 0x99, 0x6f, 0xb8, 0x71, - 0xd2, 0xd5, 0x57, 0x1b, 0xe3, 0x9a, 0x5e, 0xab, 0x80, 0xaf, 0xb5, 0x27, 0x77, 0x53, 0xcf, 0xdb, - 0x66, 0x71, 0x6c, 0x0f, 0xd8, 0xc6, 0xfd, 0x1e, 0x3b, 0xe2, 0x3f, 0x58, 0xec, 0x68, 0x64, 0x0e, - 0xf1, 0x3e, 0x07, 0x1b, 0x05, 0x37, 0xf0, 0xf3, 0x14, 0x92, 0x59, 0x7c, 0x59, 0xc5, 0xa4, 0xa7, - 0xdb, 0x58, 0x6d, 0xf0, 0x12, 0x2a, 0x48, 0xe3, 0x5b, 0x30, 0x8b, 0x35, 0x5c, 0x4c, 0xd3, 0x9d, - 0x42, 0x07, 0x5e, 0xab, 0xed, 0x1a, 0x6a, 0xad, 0xa2, 0x6e, 0x40, 0xd0, 0x6f, 0xf8, 0x49, 0x74, - 0xdf, 0x52, 0x34, 0xae, 0xbc, 0x0b, 0x4b, 0x95, 0x21, 0xc6, 0x22, 0x34, 0x0e, 0xd9, 0x7d, 0xe1, - 0x07, 0xff, 0xd3, 0x78, 0x01, 0x9a, 0xc7, 0xb6, 0x97, 0x32, 0x81, 0xfe, 0x4a, 0x8d, 0x05, 0xc2, - 0x66, 0x8b, 0x06, 0xbe, 0xa2, 0x7f, 0x59, 0x33, 0x9f, 0xce, 0x1d, 0x93, 0x7d, 0xd4, 0x14, 0x1f, - 0xcd, 0xb7, 0xa0, 0xb3, 0x1d, 0x0f, 0xb6, 0xec, 0xc4, 0xc6, 0x81, 0xaf, 0x41, 0x67, 0x58, 0x90, - 0x38, 0xb8, 0x7e, 0x3e, 0x21, 0x64, 0xc9, 0xc3, 0xcd, 0xbf, 0xe8, 0xd0, 0xad, 0x0f, 0x45, 0x1c, - 0x72, 0x1b, 0x58, 0x14, 0x6d, 0x06, 0x0e, 0x43, 0xd7, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, 0x14, - 0xf1, 0x1a, 0x26, 0x9a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, 0x8e, - 0x33, 0x86, 0xb0, 0x88, 0xd1, 0x95, 0x1c, 0x12, 0x98, 0xad, 0x8f, 0x8d, 0x59, 0x1c, 0x12, 0x68, - 0x92, 0x0e, 0x02, 0xae, 0xa2, 0x7a, 0xa5, 0x0f, 0x4f, 0xd4, 0x0e, 0xad, 0x01, 0xf0, 0x4b, 0x2a, - 0x80, 0x17, 0x47, 0xbb, 0x52, 0x06, 0x31, 0x04, 0xe3, 0x2a, 0x4b, 0xb6, 0xed, 0x7b, 0xeb, 0xbe, - 0xb3, 0xed, 0xfa, 0x3d, 0x76, 0xc4, 0xb3, 0x7d, 0x15, 0x3a, 0xe2, 0xf3, 0x3c, 0x87, 0xa9, 0x6d, - 0xc9, 0xac, 0x91, 0x5f, 0xed, 0xa5, 0xf5, 0xd0, 0xa8, 0xac, 0x07, 0xf3, 0x32, 0xcc, 0xca, 0xd3, - 0x61, 0x11, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x3a, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0x38, 0x42, 0x7c, - 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xf3, 0xa5, - 0x31, 0x2a, 0x5f, 0xa6, 0x94, 0x7c, 0x39, 0x84, 0x25, 0x02, 0x49, 0x9a, 0xba, 0xdb, 0xc4, 0x04, - 0x78, 0xbd, 0xae, 0x55, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, 0x83, - 0xe5, 0xfa, 0xc1, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xe9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, 0xfc, - 0x8f, 0x60, 0x81, 0x6f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x03, 0xb9, 0x0a, 0x1d, 0x92, - 0xdf, 0x8e, 0x07, 0xc5, 0xa7, 0x9b, 0xc4, 0xe2, 0x23, 0xfa, 0x9e, 0xcb, 0x37, 0x4f, 0x1c, 0x21, - 0x36, 0x3d, 0x89, 0xc5, 0x0b, 0x64, 0xcc, 0xc4, 0x49, 0x06, 0x8f, 0x6e, 0xc3, 0xca, 0x69, 0xf3, - 0xa7, 0x2d, 0x98, 0x16, 0xd9, 0x88, 0x45, 0x91, 0x7f, 0x2d, 0xe7, 0xdb, 0x2a, 0x51, 0xd4, 0xd7, - 0xf6, 0x8f, 0x8b, 0xf4, 0x22, 0x4a, 0x3e, 0x46, 0x6a, 0xa8, 0xc7, 0x48, 0x25, 0x9b, 0xa6, 0xaa, - 0x36, 0x95, 0xfc, 0x6a, 0x56, 0xfd, 0xe2, 0x6d, 0x1c, 0x76, 0x36, 0xbb, 0x9e, 0x9d, 0xec, 0x07, - 0xd1, 0x50, 0x7c, 0xfc, 0x36, 0xad, 0x0a, 0x9f, 0xb7, 0x8e, 0xc4, 0xcb, 0x7b, 0x7f, 0x2a, 0xe1, - 0x25, 0x2e, 0xef, 0xb4, 0x89, 0x93, 0x7d, 0x03, 0xd0, 0xa9, 0x83, 0xca, 0x24, 0xdb, 0xe2, 0xd8, - 0x0d, 0x7c, 0xec, 0x42, 0xa9, 0xd5, 0x97, 0x59, 0xdc, 0xf3, 0x61, 0x3c, 0xb8, 0x12, 0x05, 0x43, - 0x71, 0xf6, 0x90, 0x91, 0xe8, 0x79, 0xe0, 0x27, 0x59, 0x07, 0xdb, 0x21, 0x59, 0x89, 0xc5, 0x65, - 0x05, 0x89, 0x7d, 0xfe, 0xac, 0x95, 0x91, 0x3c, 0x97, 0x62, 0x76, 0x24, 0x9a, 0x77, 0xfe, 0xa7, - 0x82, 0xdc, 0x82, 0x8a, 0x5c, 0xa9, 0x1b, 0x5b, 0xc4, 0x5f, 0xe5, 0x6e, 0xac, 0x68, 0x71, 0x96, - 0x94, 0x16, 0x67, 0x1d, 0xa6, 0x83, 0x90, 0x2f, 0xff, 0xb8, 0x6b, 0xe0, 0x72, 0xf9, 0xec, 0xe8, - 0x0d, 0xea, 0xd2, 0x4d, 0x1a, 0x49, 0x0b, 0x23, 0x93, 0x33, 0x6e, 0xc0, 0x42, 0xb0, 0xbf, 0xef, - 0xb9, 0x3e, 0xdb, 0x4d, 0xe3, 0x03, 0xfc, 0x48, 0x3e, 0x87, 0xc9, 0x6e, 0xd6, 0x35, 0x11, 0xea, - 0x48, 0xab, 0x2c, 0xca, 0x3b, 0x3f, 0x3b, 0xa1, 0x8f, 0x1c, 0xdc, 0xe0, 0xce, 0xe3, 0x06, 0xa7, - 0xf0, 0xca, 0xa5, 0xea, 0x89, 0x07, 0x2a, 0x55, 0x2b, 0xaf, 0xc0, 0xac, 0xec, 0x48, 0xcd, 0xa2, - 0x3d, 0x2f, 0x2f, 0xda, 0x19, 0x79, 0x4d, 0xfe, 0x48, 0x83, 0x85, 0x92, 0x0b, 0x7c, 0x74, 0xe2, - 0x26, 0x1e, 0x13, 0x1a, 0x88, 0xe0, 0x5f, 0x41, 0x0e, 0x8b, 0xfb, 0x62, 0x91, 0xe0, 0xdf, 0xa2, - 0x9f, 0x6c, 0xe4, 0x67, 0x5b, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, 0x48, 0x7d, 0x27, - 0x3f, 0x9f, 0x96, 0x78, 0x3c, 0x49, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, 0x3a, 0x45, 0x6e, - 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, 0xc8, 0xa1, 0x76, - 0x58, 0xc2, 0xfb, 0x75, 0x0d, 0x33, 0x4a, 0x50, 0x3c, 0x19, 0x1d, 0xb6, 0x6f, 0xa7, 0x5e, 0xc2, - 0x87, 0x66, 0x5b, 0x83, 0xc4, 0xc2, 0xf3, 0xd3, 0x38, 0xf0, 0xb7, 0x48, 0x9a, 0xec, 0x94, 0x38, - 0xe6, 0x9f, 0x74, 0x58, 0xc4, 0x9d, 0x6f, 0x13, 0x13, 0xcb, 0x41, 0xa1, 0x17, 0xa1, 0x89, 0x0b, - 0x5d, 0x74, 0x8e, 0x27, 0x9f, 0x8c, 0xd0, 0x50, 0xe3, 0x32, 0xb4, 0x82, 0x10, 0xdb, 0x4d, 0xda, - 0x16, 0x9f, 0x19, 0x25, 0xa4, 0x1e, 0x55, 0x5b, 0x42, 0xca, 0xb8, 0x02, 0x30, 0x2c, 0xba, 0x4b, - 0x6a, 0x12, 0xc6, 0xd5, 0x21, 0x49, 0xf2, 0xe0, 0xe6, 0xf5, 0x2f, 0x3f, 0xaf, 0x6e, 0x58, 0x2a, - 0xd3, 0xd8, 0x81, 0x79, 0x34, 0xfb, 0x66, 0x76, 0x44, 0x86, 0x18, 0x8c, 0x3f, 0x63, 0x49, 0xda, - 0xfc, 0xb9, 0x26, 0xc2, 0xc8, 0x7f, 0xed, 0x31, 0x8a, 0x7d, 0x11, 0x12, 0x6d, 0xa2, 0x90, 0xac, - 0xc0, 0xcc, 0x30, 0x95, 0x4e, 0xec, 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0xc6, 0x86, 0xc8, 0xfc, - 0x85, 0x06, 0xdd, 0x37, 0x03, 0xd7, 0xc7, 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x97, 0x2a, 0x13, 0x63, - 0xfe, 0x55, 0x68, 0xdb, 0xa4, 0xc6, 0x4f, 0x04, 0xec, 0x63, 0x9c, 0xc2, 0x15, 0x32, 0xd2, 0x81, - 0x4a, 0x43, 0x3e, 0x50, 0x31, 0x3f, 0xd0, 0x60, 0x9e, 0x82, 0xf2, 0x76, 0xea, 0x26, 0x13, 0xdb, - 0xb7, 0x01, 0x33, 0x47, 0xa9, 0x9b, 0x4c, 0x90, 0x95, 0xb9, 0x5c, 0x35, 0x9f, 0x1a, 0x35, 0xf9, - 0x64, 0x7e, 0xa8, 0xc1, 0x85, 0x72, 0x58, 0xd7, 0xfb, 0x7d, 0x16, 0x3e, 0xcc, 0x25, 0xa5, 0x1c, - 0x28, 0x4d, 0x95, 0x0e, 0x94, 0x6a, 0x4d, 0xb6, 0xd8, 0x1d, 0xd6, 0x7f, 0x74, 0x4d, 0xfe, 0x9e, - 0x0e, 0x9f, 0xbc, 0x9a, 0x2f, 0xbc, 0x5b, 0x91, 0xed, 0xc7, 0xfb, 0x2c, 0x8a, 0x1e, 0xa2, 0xbd, - 0x37, 0x60, 0xce, 0x67, 0x77, 0x0b, 0x9b, 0xc4, 0x72, 0x1c, 0x57, 0x8d, 0x2a, 0x3c, 0xde, 0xde, - 0x65, 0xfe, 0x47, 0x83, 0x45, 0xd2, 0xf3, 0x96, 0xdb, 0x3f, 0x7c, 0x88, 0xce, 0xef, 0xc0, 0xfc, - 0x21, 0x5a, 0xc0, 0xa9, 0x09, 0xb6, 0xed, 0x92, 0xf4, 0x98, 0xee, 0xff, 0x57, 0x83, 0x25, 0x52, - 0x74, 0xdd, 0x3f, 0x76, 0x1f, 0x66, 0xb2, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x4c, 0x18, 0x80, 0xb2, - 0xf8, 0x98, 0x11, 0xf8, 0xad, 0x06, 0x0b, 0xa4, 0xe9, 0x0d, 0x3f, 0x61, 0xd1, 0xc4, 0xfe, 0x5f, - 0x83, 0x0e, 0xf3, 0x93, 0xc8, 0xf6, 0x27, 0xd9, 0x21, 0x65, 0xd1, 0x31, 0x37, 0xc9, 0x0f, 0x34, - 0x30, 0x50, 0xd5, 0x96, 0x1b, 0x0f, 0xdd, 0x38, 0x7e, 0x88, 0xd0, 0x8d, 0x67, 0xf0, 0x4f, 0x74, - 0x38, 0x2f, 0x69, 0xd9, 0x4e, 0x93, 0x47, 0xdd, 0x64, 0x63, 0x0b, 0xda, 0xbc, 0x47, 0x90, 0x6f, - 0x2a, 0xc7, 0x9d, 0xa8, 0x10, 0xe4, 0x5d, 0x2c, 0x12, 0x3d, 0xd6, 0x0f, 0x7c, 0x27, 0xc6, 0xe6, - 0x68, 0xce, 0x52, 0x78, 0x7c, 0x1b, 0x5a, 0x91, 0xd4, 0x6c, 0xda, 0x7e, 0x9f, 0x79, 0x8f, 0x4d, - 0x88, 0xcc, 0x5f, 0x69, 0x30, 0x4f, 0x43, 0x1e, 0x7d, 0x97, 0x79, 0xad, 0xa7, 0x44, 0xfe, 0xd8, - 0xa0, 0xc4, 0xd3, 0x6b, 0x59, 0xd2, 0x22, 0xf7, 0xd5, 0x8f, 0x6e, 0x6a, 0x5d, 0x83, 0x4e, 0xff, - 0xc0, 0xf6, 0x07, 0x13, 0x25, 0x97, 0x2c, 0x6a, 0x26, 0xf0, 0xa4, 0x7c, 0x38, 0xbf, 0x49, 0x3f, - 0xa1, 0xfb, 0x2f, 0x95, 0x5c, 0x39, 0xf1, 0x25, 0xc2, 0x83, 0x05, 0xfd, 0x10, 0x96, 0xe8, 0x46, - 0x58, 0xea, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x51, 0x68, 0x28, 0x94, 0x91, 0xea, 0x5d, - 0xbf, 0x78, 0xce, 0x55, 0xdc, 0xf5, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, 0x72, 0x5c, 0x3f, - 0x6b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, 0x6e, 0xf7, 0xc4, - 0xdb, 0x67, 0xf9, 0x5e, 0x58, 0x57, 0xef, 0x85, 0xcd, 0x6f, 0xc2, 0x13, 0x15, 0xc3, 0x31, 0x58, - 0x9b, 0x74, 0x65, 0x9d, 0x4d, 0x22, 0x52, 0xa6, 0xee, 0xcc, 0x4e, 0xb6, 0xc5, 0x52, 0x84, 0xcc, - 0xef, 0x6a, 0xf0, 0x54, 0x45, 0xfd, 0x7a, 0x18, 0x46, 0xc1, 0xb1, 0xc0, 0xe4, 0x2c, 0xa6, 0x51, - 0x9b, 0x5f, 0xbd, 0xdc, 0xfc, 0xd6, 0x1a, 0xa1, 0x34, 0xec, 0x1f, 0x81, 0x11, 0xbf, 0xd4, 0x60, - 0x41, 0x18, 0xe1, 0x38, 0x62, 0xda, 0x97, 0xa1, 0x45, 0xcf, 0x5d, 0xc4, 0x84, 0x4f, 0xd5, 0x4e, - 0x98, 0x3d, 0xd3, 0xb1, 0xc4, 0xe0, 0x6a, 0x46, 0xea, 0x75, 0x2b, 0xea, 0x2b, 0x79, 0xb2, 0x8f, - 0xfd, 0x20, 0x45, 0x08, 0x98, 0x5f, 0xcf, 0x92, 0x79, 0x8b, 0x79, 0xec, 0x2c, 0x63, 0x64, 0xde, - 0x86, 0x79, 0x7c, 0x7b, 0x53, 0xc4, 0xe0, 0x4c, 0xd4, 0xbe, 0x03, 0x8b, 0xa8, 0xf6, 0xcc, 0xed, - 0xcd, 0x57, 0x07, 0x8f, 0x8f, 0xbc, 0x95, 0x9c, 0x89, 0xf6, 0x2f, 0xc2, 0xb9, 0x2c, 0xf6, 0xb7, - 0x43, 0x27, 0x3f, 0x44, 0x1a, 0x71, 0x87, 0x67, 0xbe, 0x00, 0xcb, 0x9b, 0x81, 0x7f, 0xcc, 0xa2, - 0x98, 0x2e, 0x19, 0x51, 0x24, 0x93, 0x50, 0x16, 0xbf, 0xa0, 0xcc, 0x3b, 0xb0, 0x22, 0x4b, 0xf4, - 0x58, 0xb2, 0x1b, 0xb9, 0xc7, 0x92, 0x94, 0x38, 0xbc, 0xd6, 0x94, 0xc3, 0xeb, 0xe2, 0xb0, 0x5b, - 0x57, 0x0e, 0xbb, 0x2f, 0x40, 0xdb, 0x8d, 0x85, 0x02, 0x4c, 0xaa, 0x19, 0xab, 0x60, 0x98, 0x36, - 0x2c, 0x51, 0xf8, 0xc5, 0x65, 0x12, 0x4e, 0xb1, 0x02, 0x33, 0x94, 0x53, 0xf9, 0x24, 0x39, 0x3d, - 0xf2, 0x6a, 0x66, 0xe4, 0x45, 0xa4, 0xd9, 0x83, 0x25, 0xf1, 0xe0, 0x66, 0xd7, 0x1e, 0xb8, 0x3e, - 0x6d, 0xb2, 0x17, 0x01, 0x42, 0x7b, 0x90, 0x3d, 0xb8, 0xa3, 0x2b, 0x35, 0x89, 0xc3, 0x7f, 0x8f, - 0x0f, 0x82, 0xbb, 0xe2, 0x77, 0x9d, 0x7e, 0x2f, 0x38, 0xe6, 0xd7, 0xc0, 0xb0, 0x58, 0x1c, 0x06, - 0x7e, 0xcc, 0x24, 0xad, 0xab, 0xd0, 0xd9, 0x4c, 0xa3, 0x88, 0xf9, 0x7c, 0xaa, 0xec, 0xf5, 0x99, - 0xcc, 0xe2, 0x7a, 0x7b, 0x85, 0x5e, 0x3a, 0x7e, 0x97, 0x38, 0xe6, 0xcf, 0x1a, 0xd0, 0xee, 0xb9, - 0x03, 0xdf, 0xf6, 0x2c, 0x76, 0x64, 0xbc, 0x06, 0x2d, 0xfa, 0x64, 0x11, 0x99, 0x52, 0x77, 0x1c, - 0x4c, 0xa3, 0xe9, 0xdb, 0xcc, 0x62, 0x47, 0xd7, 0x3e, 0x61, 0x09, 0x19, 0xe3, 0x6d, 0x98, 0xa3, - 0xbf, 0xae, 0xd3, 0x11, 0x94, 0xa8, 0x5f, 0x9f, 0x3b, 0x45, 0x89, 0x18, 0x4d, 0xba, 0x54, 0x0d, - 0xdc, 0xa0, 0x3e, 0xb6, 0x34, 0x62, 0x7b, 0x18, 0x6d, 0x10, 0x75, 0x3e, 0xc2, 0x20, 0x92, 0xe1, - 0xd2, 0x36, 0x1e, 0xd2, 0x88, 0x4a, 0x3d, 0x5a, 0x9a, 0xce, 0x72, 0x84, 0x34, 0xc9, 0x70, 0xe9, - 0x83, 0xd4, 0x1f, 0xdc, 0x0e, 0xc5, 0xd9, 0xe1, 0x68, 0xe9, 0x6b, 0x38, 0x4c, 0x48, 0x93, 0x0c, - 0x97, 0x8e, 0x70, 0xf3, 0xc6, 0xa0, 0x9f, 0x24, 0x4d, 0x7b, 0xbc, 0x90, 0x26, 0x99, 0x8d, 0x36, - 0x4c, 0x87, 0xf6, 0x7d, 0x2f, 0xb0, 0x1d, 0xf3, 0xfd, 0x06, 0x40, 0x36, 0x30, 0xc6, 0x46, 0x47, - 0x81, 0x68, 0xed, 0x54, 0x88, 0x42, 0xef, 0xbe, 0x04, 0x52, 0xaf, 0x1e, 0xa4, 0xcf, 0x8f, 0x0b, - 0x12, 0x69, 0x2b, 0xc1, 0x74, 0xb9, 0x04, 0xd3, 0xda, 0xa9, 0x30, 0x09, 0xa3, 0x04, 0x50, 0x97, - 0x4b, 0x40, 0xad, 0x9d, 0x0a, 0x94, 0x90, 0x17, 0x50, 0x5d, 0x2e, 0x41, 0xb5, 0x76, 0x2a, 0x54, - 0x42, 0x5e, 0x80, 0x75, 0xb9, 0x04, 0xd6, 0xda, 0xa9, 0x60, 0x09, 0xf9, 0x2a, 0x5c, 0x1f, 0xea, - 0x30, 0x8f, 0x21, 0xa3, 0x1b, 0x5a, 0x7f, 0x3f, 0xc0, 0xfb, 0x00, 0x0c, 0x97, 0xfa, 0x7e, 0x53, - 0x65, 0x1a, 0x5f, 0x80, 0x25, 0x62, 0x30, 0xe9, 0x2a, 0x45, 0xc7, 0xab, 0x94, 0xea, 0x0f, 0x78, - 0x79, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x6b, 0xbe, 0x0a, 0x8e, 0x7c, 0xb5, 0x37, - 0x55, 0x79, 0x21, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0xb3, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x21, 0x0b, - 0xd2, 0x44, 0x6c, 0x13, 0x19, 0x49, 0x6f, 0xac, 0x1c, 0xd7, 0xc6, 0x0b, 0x31, 0xf1, 0x00, 0x29, - 0x67, 0xe0, 0xce, 0x56, 0x5c, 0xf0, 0x89, 0x17, 0xdc, 0x05, 0xe7, 0xf4, 0xcb, 0x38, 0xf3, 0x1f, - 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, 0xd1, 0x07, - 0xe5, 0x11, 0xa7, 0xf6, 0x60, 0x8f, 0x38, 0x77, 0x61, 0x61, 0xa0, 0x7e, 0x5d, 0x3c, 0xe0, 0x87, - 0x41, 0x59, 0x5c, 0x79, 0x91, 0xda, 0x78, 0xe0, 0x17, 0xa9, 0xe6, 0x0f, 0x74, 0x58, 0x28, 0x6d, - 0x9d, 0x27, 0xd6, 0x9d, 0x75, 0x00, 0x37, 0x4f, 0xa3, 0x13, 0x0e, 0xdf, 0xd5, 0x5c, 0xb3, 0x24, - 0xa1, 0xba, 0x5b, 0xbe, 0xc6, 0xe4, 0xb7, 0x7c, 0xd7, 0xa0, 0x13, 0x16, 0x20, 0x9d, 0xf0, 0xed, - 0x53, 0x03, 0xa5, 0x25, 0x8b, 0x9a, 0xef, 0xc2, 0x52, 0x65, 0x87, 0xc2, 0x2b, 0xb9, 0xe0, 0x90, - 0xf9, 0xf9, 0x95, 0x1c, 0x27, 0xa4, 0x64, 0xd5, 0xcb, 0xc9, 0xea, 0xb9, 0xc7, 0xf2, 0x93, 0x77, - 0x41, 0x9a, 0x3f, 0xd4, 0x61, 0xb9, 0xbe, 0xba, 0x3c, 0xae, 0xe1, 0xde, 0x83, 0xee, 0xa8, 0x9d, - 0xfc, 0xcc, 0xa2, 0x5e, 0x64, 0x77, 0x5e, 0x87, 0x1f, 0xd7, 0x70, 0x9f, 0xcb, 0xb2, 0x5b, 0x2a, - 0x75, 0xe6, 0x6f, 0xf2, 0xf8, 0xe4, 0x9d, 0xc6, 0x63, 0x1a, 0x1f, 0xe3, 0x39, 0x58, 0x24, 0x37, - 0xa5, 0x67, 0x21, 0xd4, 0xb8, 0x56, 0xf8, 0xc5, 0x4e, 0x21, 0x95, 0xfd, 0x33, 0xcb, 0xd9, 0x3f, - 0x68, 0x19, 0x26, 0x79, 0xff, 0xf6, 0xb1, 0xc2, 0xa4, 0xc8, 0x34, 0xa9, 0xa9, 0x91, 0x32, 0x2d, - 0xef, 0x2b, 0xff, 0x9f, 0x69, 0xa7, 0x67, 0x5a, 0x1e, 0x4b, 0xa9, 0xc1, 0x33, 0xbf, 0x03, 0x73, - 0x5b, 0xcc, 0xdb, 0x8e, 0x07, 0xd9, 0xbb, 0xd5, 0x33, 0xfd, 0x50, 0x2c, 0xbf, 0xee, 0x9b, 0xaa, - 0xbe, 0xee, 0xdb, 0x80, 0x79, 0xd9, 0x80, 0x49, 0xde, 0x65, 0x6e, 0x5c, 0xf8, 0xc6, 0xca, 0xa5, - 0xe7, 0xe9, 0x7f, 0x3c, 0x5f, 0xad, 0x04, 0x71, 0xaf, 0x85, 0xff, 0xf3, 0xf9, 0xd2, 0xff, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xbb, 0xd4, 0xa8, 0x81, 0x06, 0x3a, 0x00, 0x00, + 0xcb, 0x05, 0x29, 0x48, 0x88, 0x1b, 0x27, 0x38, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, + 0x90, 0x38, 0x20, 0xc4, 0x81, 0x1b, 0x17, 0x38, 0x22, 0x6e, 0x9c, 0xb9, 0x72, 0x40, 0x42, 0x02, + 0xbd, 0xaa, 0xd7, 0xdd, 0xef, 0x75, 0xf7, 0xd8, 0xb3, 0x23, 0x2b, 0xbb, 0xd1, 0x72, 0x9b, 0xaa, + 0x7e, 0x55, 0xaf, 0x5e, 0x7d, 0xf5, 0x5e, 0xd5, 0xfb, 0x19, 0x58, 0x88, 0x9d, 0xc3, 0xf7, 0xee, + 0xc6, 0xcf, 0xdf, 0x8d, 0x2f, 0x85, 0x51, 0x90, 0x04, 0xc6, 0x52, 0xcc, 0xa2, 0x63, 0x16, 0xbd, + 0x67, 0x87, 0xee, 0x7b, 0xa1, 0x1d, 0xd9, 0xc3, 0xd8, 0xfc, 0x97, 0x0e, 0xed, 0xab, 0x51, 0x90, + 0x86, 0xd7, 0xfd, 0xfd, 0xc0, 0xe8, 0xc2, 0xf4, 0x00, 0x89, 0xad, 0xae, 0xb6, 0xaa, 0x3d, 0xdb, + 0xb6, 0x32, 0xd2, 0xb8, 0x00, 0x6d, 0xfc, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0x6f, 0x05, 0xc3, + 0x30, 0x61, 0xd6, 0x0f, 0x12, 0x77, 0xdf, 0xed, 0xdb, 0x89, 0x1b, 0xf8, 0xdd, 0x06, 0x36, 0x50, + 0x78, 0xbc, 0x8d, 0xeb, 0x27, 0x51, 0xe0, 0xa4, 0x7d, 0x6c, 0x33, 0x45, 0x6d, 0x64, 0x1e, 0xef, + 0x7f, 0xdf, 0xee, 0xb3, 0xdb, 0xd6, 0x8d, 0x6e, 0x93, 0xfa, 0x17, 0xa4, 0xb1, 0x0a, 0x9d, 0xe0, + 0xae, 0xcf, 0xa2, 0xdb, 0x31, 0x8b, 0xae, 0x6f, 0x75, 0x5b, 0xf8, 0x55, 0x66, 0x19, 0x17, 0x01, + 0xfa, 0x11, 0xb3, 0x13, 0x76, 0xcb, 0x1d, 0xb2, 0xee, 0xf4, 0xaa, 0xf6, 0xec, 0x9c, 0x25, 0x71, + 0xb8, 0x86, 0x21, 0x1b, 0xee, 0xb1, 0x68, 0x33, 0x48, 0xfd, 0xa4, 0x3b, 0x83, 0x0d, 0x64, 0x96, + 0x31, 0x0f, 0x3a, 0xbb, 0xd7, 0x6d, 0xa3, 0x6a, 0x9d, 0xdd, 0x33, 0x96, 0xa1, 0x15, 0x27, 0x76, + 0x92, 0xc6, 0x5d, 0x58, 0xd5, 0x9e, 0x6d, 0x5a, 0x82, 0x32, 0xd6, 0x60, 0x0e, 0xf5, 0x06, 0x99, + 0x35, 0x1d, 0x14, 0x51, 0x99, 0xb9, 0xc7, 0x6e, 0xdd, 0x0f, 0x59, 0x77, 0x16, 0x15, 0x14, 0x0c, + 0xf3, 0x6f, 0x3a, 0x9c, 0x43, 0xbf, 0x6f, 0xa3, 0x01, 0x57, 0x52, 0xcf, 0x3b, 0x05, 0x81, 0x65, + 0x68, 0xa5, 0xd4, 0x1d, 0xb9, 0x5f, 0x50, 0xbc, 0x9f, 0x28, 0xf0, 0xd8, 0x0d, 0x76, 0xcc, 0x3c, + 0x74, 0x7c, 0xd3, 0x2a, 0x18, 0xc6, 0x0a, 0xcc, 0xdc, 0x09, 0x5c, 0x1f, 0x7d, 0x32, 0x85, 0x1f, + 0x73, 0x9a, 0x7f, 0xf3, 0xdd, 0xfe, 0xa1, 0xcf, 0x21, 0x25, 0x77, 0xe7, 0xb4, 0x8c, 0x44, 0x4b, + 0x45, 0xe2, 0x19, 0x98, 0xb7, 0xc3, 0x70, 0xdb, 0xf6, 0x07, 0x2c, 0xa2, 0x4e, 0xa7, 0x51, 0x6f, + 0x89, 0xcb, 0xf1, 0xe0, 0x3d, 0xf5, 0x82, 0x34, 0xea, 0x33, 0x74, 0x77, 0xd3, 0x92, 0x38, 0x5c, + 0x4f, 0x10, 0xb2, 0x48, 0x72, 0x23, 0x79, 0xbe, 0xc4, 0x15, 0xa8, 0x40, 0x8e, 0x0a, 0xc7, 0x31, + 0x4d, 0xd8, 0x1b, 0xbe, 0x83, 0x83, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x03, 0x0d, 0xe6, 0x77, + 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0xee, 0xd6, 0xc2, 0x79, 0x9a, 0xe2, 0x3c, 0xd9, 0x05, 0xfa, + 0x68, 0x17, 0x34, 0x54, 0x17, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0xc2, 0xa5, 0x82, 0x12, + 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x9f, 0xe8, 0x30, 0xf3, 0x31, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, 0x20, + 0xf0, 0xd9, 0x4e, 0xca, 0xc3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, 0xe4, + 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, 0x06, + 0x34, 0x93, 0xfb, 0x5e, 0x9d, 0x63, 0xed, 0xca, 0x1c, 0xab, 0xc6, 0x06, 0xd4, 0xc5, 0x86, 0xf9, + 0x6f, 0x0d, 0xe0, 0x4a, 0xe4, 0x32, 0xdf, 0x41, 0xd7, 0x94, 0x26, 0xb7, 0x56, 0x9d, 0xdc, 0xcb, + 0xd0, 0x8a, 0xd8, 0xd0, 0x8e, 0x0e, 0xb3, 0xe0, 0x27, 0xaa, 0x64, 0x50, 0xa3, 0x62, 0xd0, 0xab, + 0x00, 0xfb, 0xd8, 0x0f, 0xd7, 0x83, 0xae, 0xea, 0xbc, 0xf8, 0x99, 0x4b, 0x95, 0x65, 0xf0, 0x52, + 0x86, 0x92, 0x25, 0x35, 0xe7, 0x33, 0xcb, 0x76, 0x1c, 0x11, 0xc0, 0x4d, 0x9a, 0x59, 0x39, 0xa3, + 0x26, 0x7e, 0x5b, 0x27, 0xc4, 0xef, 0x74, 0x1e, 0x14, 0xff, 0xd4, 0xa0, 0xbd, 0xe1, 0xd9, 0xfd, + 0xc3, 0x31, 0x87, 0xae, 0x0e, 0x51, 0xaf, 0x0c, 0xf1, 0x2a, 0xcc, 0xed, 0x71, 0x75, 0xd9, 0x10, + 0xd0, 0x0b, 0x9d, 0x17, 0x3f, 0x57, 0x33, 0x4a, 0x75, 0x52, 0x58, 0xaa, 0x9c, 0x3a, 0xdc, 0xa9, + 0xd3, 0x87, 0xdb, 0x3c, 0x61, 0xb8, 0xad, 0x7c, 0xb8, 0x7f, 0xd5, 0x61, 0x16, 0x17, 0x3a, 0x8b, + 0x1d, 0xa5, 0x2c, 0x4e, 0x8c, 0xd7, 0x61, 0x26, 0xcd, 0x4c, 0xd5, 0xc6, 0x35, 0x35, 0x17, 0x31, + 0x5e, 0x11, 0xcb, 0x2a, 0xca, 0xeb, 0x28, 0x7f, 0xa1, 0x46, 0x3e, 0xcf, 0x69, 0x56, 0xd1, 0x9c, + 0xa7, 0xa0, 0x03, 0xdb, 0x77, 0x3c, 0x66, 0xb1, 0x38, 0xf5, 0x12, 0xb1, 0x5a, 0x2a, 0x3c, 0x8a, + 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x12, 0x94, 0xa0, 0xb8, 0x77, 0xa8, 0x1d, 0xff, 0x44, 0x43, 0x2f, + 0x18, 0x7c, 0xa2, 0x46, 0xec, 0x08, 0x11, 0xa2, 0x69, 0x95, 0x91, 0x45, 0x9f, 0xc2, 0x6b, 0x14, + 0x08, 0x0a, 0x8f, 0x43, 0x4c, 0x34, 0x2a, 0xa0, 0xcc, 0x24, 0x71, 0xca, 0x89, 0xc9, 0xfc, 0x7b, + 0x03, 0xe6, 0x68, 0xfa, 0x64, 0x4e, 0xbd, 0xc8, 0xe3, 0x3c, 0x18, 0x2a, 0x51, 0x24, 0x71, 0xb8, + 0x15, 0x9c, 0xda, 0x51, 0x17, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x05, 0x47, 0x66, + 0x65, 0xbd, 0x5c, 0x95, 0x17, 0x1e, 0x89, 0xc3, 0x97, 0xb2, 0x24, 0x50, 0xa2, 0x23, 0xa7, 0xb9, + 0x6c, 0x12, 0xe4, 0xfd, 0x53, 0x7c, 0x48, 0x1c, 0xee, 0xdf, 0x24, 0xc8, 0xfa, 0x26, 0x27, 0x15, + 0x0c, 0xd2, 0x2c, 0xfa, 0xa5, 0x54, 0x92, 0xd3, 0x15, 0x54, 0xdb, 0x27, 0xa2, 0x0a, 0x0a, 0xaa, + 0xea, 0xe4, 0xea, 0x54, 0x26, 0xd7, 0x1a, 0xcc, 0x91, 0x9e, 0x2c, 0xe8, 0x67, 0x29, 0xd5, 0x2b, + 0x4c, 0x35, 0x36, 0xe6, 0xca, 0xb1, 0xa1, 0xa2, 0x3b, 0x3f, 0x02, 0xdd, 0x85, 0x1c, 0xdd, 0x5f, + 0xeb, 0x00, 0x5b, 0x2c, 0xb4, 0xa3, 0x64, 0xc8, 0xfc, 0x84, 0x0f, 0xcf, 0xc9, 0xa9, 0x1c, 0x5c, + 0x85, 0x27, 0xe7, 0x09, 0x5d, 0xcd, 0x13, 0x06, 0x4c, 0xa1, 0xc3, 0x09, 0x4d, 0xfc, 0xcd, 0x9d, + 0x19, 0xda, 0x11, 0x69, 0xa3, 0x20, 0xcf, 0x69, 0x9e, 0x07, 0x82, 0xc8, 0x11, 0x99, 0xa3, 0x69, + 0x11, 0xc1, 0x27, 0x7f, 0xd1, 0x1f, 0x16, 0x34, 0x2d, 0x5a, 0xd7, 0x55, 0xee, 0xa9, 0x35, 0xd8, + 0x73, 0xb0, 0x18, 0xa7, 0x7b, 0xc5, 0xe0, 0x76, 0xd2, 0xa1, 0x08, 0xf7, 0x0a, 0x9f, 0x3b, 0x95, + 0x8a, 0x33, 0xde, 0x88, 0x52, 0x4d, 0xc1, 0x28, 0x57, 0x05, 0xe6, 0x07, 0x3a, 0x2c, 0xde, 0x8c, + 0x06, 0xb6, 0xef, 0x7e, 0x17, 0xcb, 0x4d, 0x5c, 0xc0, 0x27, 0x49, 0xb9, 0xab, 0xd0, 0x61, 0xfe, + 0xc0, 0x73, 0xe3, 0x83, 0x9d, 0xc2, 0x6f, 0x32, 0x4b, 0x76, 0xf6, 0xd4, 0xa8, 0xa4, 0xdc, 0x54, + 0x92, 0xf2, 0x32, 0xb4, 0x86, 0xc1, 0x9e, 0xeb, 0x65, 0x71, 0x2f, 0x28, 0x8c, 0x79, 0xe6, 0x31, + 0xcc, 0xce, 0x79, 0xcc, 0x67, 0x8c, 0x22, 0x51, 0xcf, 0xd4, 0x26, 0xea, 0xb6, 0x9c, 0xa8, 0x55, + 0xc7, 0x43, 0xc5, 0xf1, 0xe4, 0xae, 0x4e, 0xee, 0xae, 0x3f, 0x6a, 0xb0, 0x58, 0xb8, 0x9b, 0x6a, + 0xd0, 0x91, 0xee, 0x2a, 0x47, 0xa0, 0x5e, 0x13, 0x81, 0x79, 0xdc, 0x34, 0xe4, 0xb8, 0xe1, 0x91, + 0x16, 0xc4, 0xae, 0x54, 0xef, 0xe7, 0x34, 0xef, 0xcd, 0x63, 0xb6, 0xe4, 0x2c, 0xa2, 0xa4, 0xaa, + 0xbb, 0xa5, 0x54, 0xdd, 0xe5, 0x3c, 0xfa, 0x3b, 0x0d, 0xce, 0x73, 0x94, 0x2b, 0xc3, 0xb8, 0x09, + 0x8b, 0x41, 0x29, 0x12, 0x44, 0xa2, 0x79, 0xba, 0x26, 0x51, 0x94, 0x83, 0xc6, 0xaa, 0x08, 0x73, + 0x85, 0x4e, 0xa9, 0x13, 0x91, 0x79, 0xea, 0x14, 0x96, 0xed, 0xb1, 0x2a, 0xc2, 0xe6, 0xef, 0x35, + 0x58, 0xa4, 0xd4, 0x26, 0xcd, 0xf3, 0x33, 0x37, 0xfb, 0x1d, 0x38, 0x5f, 0xee, 0xf9, 0x86, 0x1b, + 0x27, 0x5d, 0x7d, 0xb5, 0x31, 0xae, 0xe9, 0xb5, 0x0a, 0xf8, 0x5c, 0x7b, 0x72, 0x37, 0xf5, 0xbc, + 0x6d, 0x16, 0xc7, 0xf6, 0x80, 0x6d, 0xdc, 0xef, 0xb1, 0x23, 0xfe, 0xc1, 0x62, 0x47, 0x23, 0x63, + 0x88, 0xd7, 0x39, 0x58, 0x28, 0xb8, 0x81, 0x9f, 0x87, 0x90, 0xcc, 0xe2, 0xd3, 0x2a, 0x26, 0x3d, + 0xdd, 0xc6, 0x6a, 0x83, 0xa7, 0x50, 0x41, 0x1a, 0xdf, 0x81, 0x59, 0xcc, 0xe1, 0xa2, 0x9b, 0xee, + 0x14, 0x0e, 0xe0, 0xb5, 0xda, 0xaa, 0xa1, 0xd6, 0x2a, 0xaa, 0x06, 0x04, 0xfd, 0x86, 0x9f, 0x44, + 0xf7, 0x2d, 0x45, 0xe3, 0xca, 0xbb, 0xb0, 0x54, 0x69, 0x62, 0x2c, 0x42, 0xe3, 0x90, 0xdd, 0x17, + 0xe3, 0xe0, 0x3f, 0x8d, 0x17, 0xa0, 0x79, 0x6c, 0x7b, 0x29, 0x13, 0xe8, 0xaf, 0xd4, 0x58, 0x20, + 0x6c, 0xb6, 0xa8, 0xe1, 0x2b, 0xfa, 0x57, 0x35, 0xf3, 0xe9, 0x7c, 0x60, 0xf2, 0x18, 0x35, 0x65, + 0x8c, 0xe6, 0x5b, 0xd0, 0xd9, 0x8e, 0x07, 0x5b, 0x76, 0x62, 0x63, 0xc3, 0xd7, 0xa0, 0x33, 0x2c, + 0x48, 0x6c, 0x5c, 0xdf, 0x9f, 0x10, 0xb2, 0xe4, 0xe6, 0xe6, 0x5f, 0x74, 0xe8, 0xd6, 0xbb, 0x22, + 0x0e, 0xb9, 0x0d, 0x2c, 0x8a, 0x36, 0x03, 0x87, 0xe1, 0xd0, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, + 0x14, 0xf1, 0x1c, 0x26, 0x8a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, + 0xb6, 0x33, 0x86, 0xb0, 0x88, 0xde, 0x95, 0x06, 0x24, 0x30, 0x5b, 0x1f, 0x1b, 0xb3, 0x38, 0x24, + 0xd0, 0x24, 0x1d, 0x04, 0x5c, 0x45, 0xf5, 0x4a, 0x1f, 0x9e, 0xa8, 0x6d, 0x5a, 0x03, 0xe0, 0x57, + 0x54, 0x00, 0x2f, 0x8e, 0x1e, 0x4a, 0x19, 0xc4, 0x10, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, 0xad, + 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xed, 0x79, 0x0e, 0x53, + 0xdb, 0x92, 0x59, 0x23, 0x77, 0xed, 0xa5, 0xf9, 0xd0, 0xa8, 0xcc, 0x07, 0xf3, 0x32, 0xcc, 0xca, + 0xdd, 0x61, 0x12, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x0e, 0x68, 0xce, 0x12, 0x14, 0xf2, 0xb1, 0x85, + 0xd8, 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xe3, + 0xa5, 0x31, 0x2a, 0x5e, 0xa6, 0x94, 0x78, 0x39, 0x84, 0x25, 0x02, 0x49, 0xea, 0xba, 0xdb, 0xc4, + 0x00, 0x78, 0xbd, 0xae, 0x54, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, + 0x83, 0xe5, 0xfa, 0xc6, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xd9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, + 0xfc, 0x8f, 0x60, 0x81, 0x2f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x1d, 0xb9, 0x0a, 0x1d, + 0x92, 0xdf, 0x8e, 0x07, 0xc5, 0xd6, 0x4d, 0x62, 0xf1, 0x16, 0x7d, 0xcf, 0xe5, 0x8b, 0x27, 0xb6, + 0x10, 0x8b, 0x9e, 0xc4, 0xe2, 0x09, 0x32, 0x66, 0xe2, 0x24, 0x83, 0x7b, 0xb7, 0x61, 0xe5, 0xb4, + 0xf9, 0x7e, 0x0b, 0xa6, 0x45, 0x34, 0x62, 0x52, 0xe4, 0xbb, 0xe5, 0x7c, 0x59, 0x25, 0x8a, 0xea, + 0xda, 0xfe, 0x71, 0x11, 0x5e, 0x44, 0xc9, 0xc7, 0x48, 0x0d, 0xf5, 0x18, 0xa9, 0x64, 0xd3, 0x54, + 0xd5, 0xa6, 0xd2, 0xb8, 0x9a, 0xd5, 0x71, 0xf1, 0x32, 0x0e, 0x2b, 0x9b, 0x5d, 0xcf, 0x4e, 0xf6, + 0x83, 0x68, 0x28, 0x36, 0xbf, 0x4d, 0xab, 0xc2, 0xe7, 0xa5, 0x23, 0xf1, 0xf2, 0xda, 0x9f, 0x52, + 0x78, 0x89, 0xcb, 0x2b, 0x6d, 0xe2, 0x64, 0x7b, 0x00, 0x3a, 0x75, 0x50, 0x99, 0x64, 0x5b, 0x1c, + 0xbb, 0x81, 0x8f, 0x55, 0x28, 0x95, 0xfa, 0x32, 0x8b, 0x8f, 0x7c, 0x18, 0x0f, 0xae, 0x44, 0xc1, + 0x50, 0x9c, 0x3d, 0x64, 0x24, 0x8e, 0x3c, 0xf0, 0x93, 0xac, 0x82, 0xed, 0x90, 0xac, 0xc4, 0xe2, + 0xb2, 0x82, 0xc4, 0x3a, 0x7f, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0xc5, 0x3b, 0xff, + 0xa9, 0x20, 0xb7, 0xa0, 0x22, 0x57, 0xaa, 0xc6, 0x16, 0xf1, 0xab, 0x5c, 0x8d, 0x15, 0x25, 0xce, + 0x92, 0x52, 0xe2, 0xac, 0xc3, 0x74, 0x10, 0xf2, 0xe9, 0x1f, 0x77, 0x0d, 0x9c, 0x2e, 0x9f, 0x1f, + 0xbd, 0x40, 0x5d, 0xba, 0x49, 0x2d, 0x69, 0x62, 0x64, 0x72, 0xc6, 0x0d, 0x58, 0x08, 0xf6, 0xf7, + 0x3d, 0xd7, 0x67, 0xbb, 0x69, 0x7c, 0x80, 0x9b, 0xe4, 0x73, 0x18, 0xec, 0x66, 0x5d, 0x11, 0xa1, + 0xb6, 0xb4, 0xca, 0xa2, 0xbc, 0xf2, 0xb3, 0x13, 0xda, 0xe4, 0xe0, 0x02, 0x77, 0x1e, 0x17, 0x38, + 0x85, 0x87, 0xe7, 0x71, 0xd2, 0x42, 0xff, 0x04, 0x3a, 0x4e, 0x66, 0xad, 0xbc, 0x02, 0xb3, 0xb2, + 0xb1, 0x35, 0x13, 0xf3, 0xbc, 0x3c, 0x31, 0x67, 0xe4, 0x79, 0xf7, 0x63, 0x0d, 0x16, 0x4a, 0x66, + 0xf2, 0xd6, 0x89, 0x9b, 0x78, 0x4c, 0x68, 0x20, 0x82, 0xef, 0x74, 0x1c, 0x16, 0xf7, 0xc5, 0x44, + 0xc0, 0xdf, 0xa2, 0x66, 0x6c, 0xe4, 0xe7, 0x57, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, + 0x48, 0x7d, 0x27, 0x3f, 0x83, 0x96, 0x78, 0x3c, 0x10, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, + 0x3a, 0x29, 0x6e, 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, + 0xc8, 0xe1, 0x74, 0x58, 0xc2, 0x6b, 0x72, 0x0d, 0x07, 0x2f, 0x28, 0xee, 0x19, 0x87, 0xed, 0xdb, + 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xf4, 0x97, 0x58, 0x78, 0x46, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, + 0x9d, 0x12, 0xc7, 0xfc, 0x93, 0x0e, 0x8b, 0xb8, 0xba, 0x6d, 0x62, 0xf0, 0x38, 0x28, 0xf4, 0x22, + 0x34, 0x71, 0x32, 0x8b, 0xea, 0xf0, 0xe4, 0xd3, 0x0f, 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, + 0x49, 0x49, 0x4b, 0xdf, 0x33, 0xa3, 0x84, 0xd4, 0xe3, 0x68, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, + 0x45, 0x05, 0x49, 0x85, 0xc0, 0xb8, 0x3a, 0x24, 0x49, 0xee, 0xdc, 0x3c, 0xc7, 0xe5, 0x67, 0xd2, + 0x0d, 0x4b, 0x65, 0x1a, 0x3b, 0x30, 0x8f, 0x66, 0xdf, 0xcc, 0x8e, 0xc1, 0x10, 0x83, 0xf1, 0x7b, + 0x2c, 0x49, 0x9b, 0x3f, 0xd7, 0x84, 0x1b, 0xf9, 0xd7, 0x1e, 0x23, 0xdf, 0x17, 0x2e, 0xd1, 0x26, + 0x72, 0xc9, 0x0a, 0xcc, 0x0c, 0x53, 0xe9, 0x54, 0xae, 0x61, 0xe5, 0x74, 0x01, 0x51, 0x63, 0x6c, + 0x88, 0xcc, 0x5f, 0x68, 0xd0, 0x7d, 0x33, 0x70, 0x7d, 0xfc, 0xb0, 0x1e, 0x86, 0x9e, 0xb8, 0x38, + 0x99, 0x18, 0xf3, 0xaf, 0x43, 0xdb, 0x26, 0x35, 0x7e, 0x22, 0x60, 0x1f, 0xe3, 0xa4, 0xad, 0x90, + 0x91, 0x0e, 0x4d, 0x1a, 0xf2, 0xa1, 0x89, 0xf9, 0xa1, 0x06, 0xf3, 0xe4, 0x94, 0xb7, 0x53, 0x37, + 0x99, 0xd8, 0xbe, 0x0d, 0x98, 0x39, 0x4a, 0xdd, 0x64, 0x82, 0xa8, 0xcc, 0xe5, 0xaa, 0xf1, 0xd4, + 0xa8, 0x89, 0x27, 0xf3, 0x23, 0x0d, 0x2e, 0x94, 0xdd, 0xba, 0xde, 0xef, 0xb3, 0xf0, 0x61, 0x4e, + 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, 0xb2, 0xc5, 0xee, 0xb0, 0xfe, 0xa3, 0x6b, + 0xf2, 0xf7, 0x75, 0xf8, 0xf4, 0xd5, 0x7c, 0xe2, 0xdd, 0x8a, 0x6c, 0x3f, 0xde, 0x67, 0x51, 0xf4, + 0x10, 0xed, 0xbd, 0x01, 0x73, 0x3e, 0xbb, 0x5b, 0xd8, 0x24, 0xa6, 0xe3, 0xb8, 0x6a, 0x54, 0xe1, + 0xf1, 0xd6, 0x2e, 0xf3, 0x3f, 0x1a, 0x2c, 0x92, 0x9e, 0xb7, 0xdc, 0xfe, 0xe1, 0x43, 0x1c, 0xfc, + 0x0e, 0xcc, 0x1f, 0xa2, 0x05, 0x9c, 0x9a, 0x60, 0xd9, 0x2e, 0x49, 0x8f, 0x39, 0xfc, 0xff, 0x6a, + 0xb0, 0x44, 0x8a, 0xae, 0xfb, 0xc7, 0xee, 0xc3, 0x0c, 0xd6, 0x5d, 0x58, 0x70, 0xc9, 0x84, 0x09, + 0x1d, 0x50, 0x16, 0x1f, 0xd3, 0x03, 0xbf, 0xd5, 0x60, 0x81, 0x34, 0xbd, 0xe1, 0x27, 0x2c, 0x9a, + 0x78, 0xfc, 0xd7, 0xa0, 0xc3, 0xfc, 0x24, 0xb2, 0xfd, 0x49, 0x56, 0x48, 0x59, 0x74, 0xcc, 0x45, + 0xf2, 0x43, 0x0d, 0x0c, 0x54, 0xb5, 0xe5, 0xc6, 0x43, 0x37, 0x8e, 0x1f, 0x22, 0x74, 0xe3, 0x19, + 0xfc, 0x53, 0x1d, 0xce, 0x4b, 0x5a, 0xb6, 0xd3, 0xe4, 0x51, 0x37, 0xd9, 0xd8, 0x82, 0x36, 0xaf, + 0x11, 0xe4, 0xdb, 0xc8, 0x71, 0x3b, 0x2a, 0x04, 0x79, 0x15, 0x8b, 0x44, 0x8f, 0xf5, 0x03, 0xdf, + 0x89, 0xb1, 0x38, 0x9a, 0xb3, 0x14, 0x1e, 0x5f, 0x86, 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, + 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0x53, 0x93, 0x47, 0x7f, 0xc8, 0x3c, 0xd7, 0x53, + 0x20, 0x7f, 0x62, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, 0x91, 0xeb, 0xea, 0x47, 0x37, 0xb4, 0xae, + 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x80, + 0xdf, 0xa4, 0x4f, 0x38, 0xfc, 0x97, 0x4a, 0x43, 0x39, 0xf1, 0xb5, 0xc1, 0x83, 0x39, 0xfd, 0x10, + 0x96, 0xe8, 0xd6, 0x57, 0xaa, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x43, 0x68, 0x28, 0x94, + 0x91, 0xea, 0x7d, 0xbe, 0x78, 0xb2, 0x55, 0xdc, 0xe7, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, + 0x72, 0x5c, 0x3f, 0x2b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, + 0xfe, 0xf6, 0xc4, 0x1b, 0x66, 0xf9, 0xee, 0x57, 0x57, 0xef, 0x7e, 0xcd, 0x6f, 0xc3, 0x13, 0x15, + 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x2d, 0x9d, 0x75, 0x22, 0x42, 0xa6, 0xee, 0x5c, 0x4e, 0xb6, 0xc5, + 0x52, 0x84, 0xcc, 0xf7, 0x35, 0x78, 0xaa, 0xa2, 0x7e, 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, + 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc1, 0x88, + 0x5f, 0x6a, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, 0xcb, 0xd0, 0xa2, 0x27, 0x2d, 0xa2, 0xc3, + 0xa7, 0x6a, 0x3b, 0xcc, 0x9e, 0xe2, 0x58, 0xa2, 0x71, 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0xb5, + 0x3c, 0xd8, 0xc7, 0x7e, 0x74, 0x22, 0x04, 0xcc, 0x6f, 0x66, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, + 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0xaf, 0x29, 0x7c, 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, + 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x97, 0xe1, 0x5c, + 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, 0xa7, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, + 0x3f, 0x66, 0x51, 0x4c, 0x17, 0x89, 0x28, 0x92, 0x49, 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, + 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x50, 0x6b, 0xca, 0x01, 0x75, + 0x71, 0xa0, 0xad, 0x2b, 0x07, 0xda, 0x17, 0xa0, 0xed, 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, + 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xc2, 0x08, 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, + 0x93, 0x9c, 0x1e, 0x79, 0xfd, 0x32, 0xf2, 0xb2, 0xd1, 0xec, 0xc1, 0x92, 0x78, 0x54, 0xb3, 0x6b, + 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, 0xc8, 0x1e, 0xd5, 0xd1, 0xb5, 0x99, 0xc4, + 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, 0xf7, 0x82, 0x63, 0x7e, 0x03, 0x0c, 0x8b, + 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, + 0x5e, 0x98, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, 0x23, 0x76, 0x89, 0x63, 0xfe, 0xac, 0x01, + 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, + 0xba, 0x23, 0x5f, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, 0x5d, 0xfb, 0x94, 0x25, 0x64, 0x8c, 0xb7, + 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, 0xbe, 0x70, 0x8a, 0x12, 0xd1, 0x9a, 0x74, + 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, + 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, + 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, + 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, + 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, 0xe6, 0x07, 0x0d, 0x80, 0xac, 0x61, 0x8c, + 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x5f, + 0x1c, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, + 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, + 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, + 0x3e, 0xd2, 0x61, 0x1e, 0x5d, 0x46, 0xb7, 0xb0, 0xfe, 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, + 0x8d, 0xa6, 0xca, 0x34, 0xbe, 0x04, 0x4b, 0xc4, 0x60, 0xd2, 0x75, 0x89, 0x8e, 0xd7, 0x25, 0xd5, + 0x0f, 0x78, 0x41, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, + 0x7d, 0x37, 0x55, 0x79, 0x05, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0x97, 0x13, 0x14, 0x97, 0x48, 0xdc, + 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xef, 0xa8, 0x1c, 0xd7, 0xc6, 0x4b, 0x2f, 0xf1, + 0xc8, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xe2, 0x89, 0x57, 0xda, 0x05, 0xe7, 0xf4, 0x0b, 0x37, + 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, + 0x71, 0x0c, 0xca, 0x43, 0x4d, 0xed, 0xc1, 0x1e, 0x6a, 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, + 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x3a, 0x6d, 0x3c, 0xf0, 0xab, 0x53, 0xf3, 0x87, 0x3a, 0x2c, + 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, + 0x59, 0x92, 0x50, 0xdd, 0x4d, 0x5e, 0x63, 0xf2, 0x9b, 0xbc, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, + 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, + 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, + 0xac, 0x5d, 0x90, 0xe6, 0x8f, 0x74, 0x58, 0xae, 0xcf, 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, + 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, + 0x96, 0x52, 0x9d, 0xf9, 0x9b, 0xdc, 0x3f, 0x79, 0xa5, 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, + 0x69, 0x98, 0xd2, 0xd3, 0x0f, 0x2a, 0x5c, 0x2b, 0xfc, 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, + 0xec, 0x1f, 0xb4, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x44, 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, + 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, + 0x83, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0x6d, 0xea, 0x99, 0x6e, 0x14, 0xcb, 0x2f, 0xf8, + 0xa6, 0xaa, 0x2f, 0xf8, 0x36, 0x60, 0x5e, 0x36, 0x60, 0x92, 0xb7, 0x97, 0x1b, 0x17, 0xbe, 0xb5, + 0x72, 0xe9, 0x79, 0xfa, 0x1f, 0xe7, 0xab, 0x15, 0x27, 0xee, 0xb5, 0xf0, 0x7f, 0x9d, 0x2f, 0xfd, + 0x2f, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x19, 0x19, 0x47, 0xea, 0x39, 0x00, 0x00, } From 043188ab5e6436b25f7bf87e18f131853e46ddc9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:24:13 +0800 Subject: [PATCH 165/256] push update --- internal/msg_gateway/gate/batch_push.go | 78 ++++++++++++------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 7a21dde73..acb314284 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -36,43 +36,43 @@ func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformIDList []int) map[int]*sdk_ws.MsgDataList { user2PushMsg := make(map[int]*sdk_ws.MsgDataList, 0) - //for _, v := range platformIDList { - //user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - //log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - //} + for _, v := range platformIDList { + user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) + //log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) + } return user2PushMsg } -func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) []*sdk_ws.MsgData { +func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) *sdk_ws.MsgDataList { msgData.MsgDataList = nil - return []*sdk_ws.MsgData{msgData} - - userConn := ws.getUserConn(pushToUserID, platformID) - if userConn == nil { - log.Debug(operationID, "userConn == nil") - return []*sdk_ws.MsgData{msgData} - } - - if msgData.Seq <= userConn.PushedMaxSeq { - log.Debug(operationID, "msgData.Seq <= userConn.PushedMaxSeq", msgData.Seq, userConn.PushedMaxSeq) - return nil - } - - msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) - if msgList == nil { - log.Debug(operationID, "GetSingleUserMsg msgList == nil", msgData.Seq, userConn.PushedMaxSeq) - userConn.PushedMaxSeq = msgData.Seq - return []*sdk_ws.MsgData{msgData} - } - msgList = append(msgList, msgData) + return &sdk_ws.MsgDataList{} - for _, v := range msgList { - if v.Seq > userConn.PushedMaxSeq { - userConn.PushedMaxSeq = v.Seq - } - } - log.Debug(operationID, "GetSingleUserMsg msgList len ", len(msgList), userConn.PushedMaxSeq) - return msgList + //userConn := ws.getUserConn(pushToUserID, platformID) + //if userConn == nil { + // log.Debug(operationID, "userConn == nil") + // return []*sdk_ws.MsgData{msgData} + //} + // + //if msgData.Seq <= userConn.PushedMaxSeq { + // log.Debug(operationID, "msgData.Seq <= userConn.PushedMaxSeq", msgData.Seq, userConn.PushedMaxSeq) + // return nil + //} + // + //msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) + //if msgList == nil { + // log.Debug(operationID, "GetSingleUserMsg msgList == nil", msgData.Seq, userConn.PushedMaxSeq) + // userConn.PushedMaxSeq = msgData.Seq + // return []*sdk_ws.MsgData{msgData} + //} + //msgList = append(msgList, msgData) + // + //for _, v := range msgList { + // if v.Seq > userConn.PushedMaxSeq { + // userConn.PushedMaxSeq = v.Seq + // } + //} + //log.Debug(operationID, "GetSingleUserMsg msgList len ", len(msgList), userConn.PushedMaxSeq) + //return msgList } func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, userID string) []*sdk_ws.MsgData { @@ -102,10 +102,10 @@ func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, u return reply.List } -func (r *RPCServer) GetBatchUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID int) map[string][]*sdk_ws.MsgData { - user2PushMsg := make(map[string][]*sdk_ws.MsgData, 0) - for _, v := range pushToUserIDList { - user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, v, platformID) - } - return user2PushMsg -} +//func (r *RPCServer) GetBatchUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserIDList []string, platformID int) map[string][]*sdk_ws.MsgData { +// user2PushMsg := make(map[string][]*sdk_ws.MsgData, 0) +// for _, v := range pushToUserIDList { +// user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, v, platformID) +// } +// return user2PushMsg +//} From d43b9fc6c14a0de9b7d8cbe439118b977f113344 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 15:58:14 +0800 Subject: [PATCH 166/256] redis model update --- pkg/common/db/newRedisModel.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ab7a28d8c..5b5e74a7c 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -10,6 +10,7 @@ import ( "context" "errors" "fmt" + "github.com/golang/protobuf/jsonpb" "github.com/garyburd/redigo/redis" @@ -33,22 +34,21 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - result, err := d.rdb.HGetAll(context.Background(), key).Result() + result, err := d.rdb.Get(context.Background(), key).Result() if err != nil { errResult = err failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "redis get message error:", err.Error(), v) } else { - msg, err := Map2Pb(result) - //msg := pbCommon.MsgData{} - //err = jsonpb.UnmarshalString(result, &msg) + msg := pbCommon.MsgData{} + err = jsonpb.UnmarshalString(result, &msg) if err != nil { errResult = err failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) } else { log2.NewDebug(operationID, "redis get msg is ", msg.String()) - seqMsg = append(seqMsg, msg) + seqMsg = append(seqMsg, &msg) } } @@ -69,21 +69,18 @@ func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid stri var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) - s, err := utils.Pb2Map(msg.MsgData) + s, err := utils.Pb2String(msg.MsgData) if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2Map failed", msg.MsgData.String(), uid, err.Error()) + log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) continue } - log2.NewDebug(operationID, "convert map is ", s) - fmt.Println("ts", s) - err = d.rdb.HMSet(context.Background(), key, s).Err() + log2.NewDebug(operationID, "convert string is ", s) + err = d.rdb.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err() //err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { - return err log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) failedList = append(failedList, *msg) } - d.rdb.Expire(ctx, key, time.Second*time.Duration(config.Config.MsgCacheTimeout)) } if len(failedList) != 0 { return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) From 034201a45b6d20ab00f2dddac52fa60a855eb499 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 13 Jun 2022 16:09:34 +0800 Subject: [PATCH 167/256] redis model update --- pkg/common/db/redisModel_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index 2d6fb5544..de05583df 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -82,7 +82,7 @@ func Test_NewGetMessageListBySeq(t *testing.T) { data.ClientMsgID = "23jwhjsdf" msg.MsgData = &data - seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{11}, "cacheTest") + seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{1212}, "cacheTest") assert.Nil(t, err) fmt.Println(seqMsg, failedSeqList) From 5be23220e4ab73e761890ad6572d63c593660365 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Mon, 13 Jun 2022 18:27:52 +0800 Subject: [PATCH 168/256] super group --- internal/push/logic/push_to_client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 5e7daf0e8..a82560c84 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -50,7 +50,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("SuperGroupOnlineBatchPushOneMsg push data to client rpc err", pushMsg.OperationID, "err", err) continue From 7308d0f9c6dbcb5bd5aeed40dfc98270e5ce5674 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 14 Jun 2022 10:37:39 +0800 Subject: [PATCH 169/256] config --- internal/msg_gateway/gate/batch_push.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index acb314284..6640fa485 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -44,8 +44,8 @@ func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData } func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdk_ws.MsgData, pushToUserID string, platformID int) *sdk_ws.MsgDataList { - msgData.MsgDataList = nil - return &sdk_ws.MsgDataList{} + //msgData.MsgDataList = nil + return &sdk_ws.MsgDataList{MsgDataList: []*sdk_ws.MsgData{msgData}} //userConn := ws.getUserConn(pushToUserID, platformID) //if userConn == nil { From d8ce1222540c8c8f1d08c3a8281d11e619143bd4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 15:47:34 +0800 Subject: [PATCH 170/256] redis model update --- pkg/common/db/newRedisModel.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 5b5e74a7c..9223cf1ef 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -19,7 +19,6 @@ import ( "time" "github.com/golang/protobuf/proto" - "github.com/mitchellh/mapstructure" ) //func (d * DataBases)pubMessage(channel, msg string) { @@ -55,15 +54,6 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper } return seqMsg, failedSeqList, errResult } -func Map2Pb(m map[string]string) (*pbCommon.MsgData, error) { - var data pbCommon.MsgData - err := mapstructure.Decode(m, &data) - if err != nil { - return nil, err - } - return &data, nil -} - func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ From 38ded2c43d442ed8ddd1fe5d80e3f4329774d182 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 17:24:40 +0800 Subject: [PATCH 171/256] send message remove online status split --- internal/rpc/msg/send_msg.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index fe9b0360d..e9f9c5958 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -280,12 +280,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S default: } m := make(map[string][]string, 2) - if len(memberUserIDList) > GroupMemberNum { - getOnlineAndOfflineUserIDList(memberUserIDList, m, pb.OperationID) - log.Debug(pb.OperationID, m[constant.OnlineStatus], m[constant.OfflineStatus]) - } else { - m[constant.OnlineStatus] = memberUserIDList - } + //if len(memberUserIDList) > GroupMemberNum { + // getOnlineAndOfflineUserIDList(memberUserIDList, m, pb.OperationID) + // log.Debug(pb.OperationID, m[constant.OnlineStatus], m[constant.OfflineStatus]) + //} else { + m[constant.OnlineStatus] = memberUserIDList + //} log.Debug(pb.OperationID, "send msg cost time1 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID) newTime = db.GetCurrentTimestampByMill() From 926de3fa948753ba78ba06ac7d4f5ee3413e184d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 17:27:04 +0800 Subject: [PATCH 172/256] log --- internal/msg_gateway/gate/logic.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index b46abee7c..40095a229 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -292,7 +292,9 @@ func (ws *WServer) sendMsg(conn *UserConn, mReply interface{}) { err = ws.writeMsg(conn, websocket.BinaryMessage, b.Bytes()) if err != nil { uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "WS WriteMsg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws writeMsg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + } else { + log.Debug(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws write response success") } } func (ws *WServer) sendErrMsg(conn *UserConn, errCode int32, errMsg string, reqIdentifier int32, msgIncr string, operationID string) { From cfcccd0240157b9c3e85af416bef247edcf20573 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 14 Jun 2022 18:20:08 +0800 Subject: [PATCH 173/256] user add global set message recv opt --- pkg/base_info/public_struct.go | 17 +- pkg/common/db/model_struct.go | 21 +- pkg/proto/sdk_ws/ws.pb.go | 572 +++++++++++++++++---------------- pkg/proto/sdk_ws/ws.proto | 1 + 4 files changed, 312 insertions(+), 299 deletions(-) diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 2950dbea8..7c4a6fa8d 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -6,14 +6,15 @@ import ( ) type ApiUserInfo struct { - UserID string `json:"userID" binding:"required,min=1,max=64"` - Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` - FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` - Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` - PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` - Birth uint32 `json:"birth" binding:"omitempty"` - Email string `json:"email" binding:"omitempty,max=64"` - Ex string `json:"ex" binding:"omitempty,max=1024"` + UserID string `json:"userID" binding:"required,min=1,max=64"` + Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` + FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` + Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` + PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` + Birth uint32 `json:"birth" binding:"omitempty"` + Email string `json:"email" binding:"omitempty,max=64"` + GlobalRecvMsgOpt int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` + Ex string `json:"ex" binding:"omitempty,max=1024"` } //type Conversation struct { diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index f8e9bca7b..7bb337775 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -148,16 +148,17 @@ type GroupRequest struct { //int32 AppMangerLevel = 10; //open_im_sdk.User == imdb.User type User struct { - UserID string `gorm:"column:user_id;primary_key;size:64"` - Nickname string `gorm:"column:name;size:255"` - FaceURL string `gorm:"column:face_url;size:255"` - Gender int32 `gorm:"column:gender"` - PhoneNumber string `gorm:"column:phone_number;size:32"` - Birth time.Time `gorm:"column:birth"` - Email string `gorm:"column:email;size:64"` - Ex string `gorm:"column:ex;size:1024"` - CreateTime time.Time `gorm:"column:create_time"` - AppMangerLevel int32 `gorm:"column:app_manger_level"` + UserID string `gorm:"column:user_id;primary_key;size:64"` + Nickname string `gorm:"column:name;size:255"` + FaceURL string `gorm:"column:face_url;size:255"` + Gender int32 `gorm:"column:gender"` + PhoneNumber string `gorm:"column:phone_number;size:32"` + Birth time.Time `gorm:"column:birth"` + Email string `gorm:"column:email;size:64"` + Ex string `gorm:"column:ex;size:1024"` + CreateTime time.Time `gorm:"column:create_time"` + AppMangerLevel int32 `gorm:"column:app_manger_level"` + GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"` } //message BlackInfo{ diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 21094b3ee..583f7a319 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,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_c8bc58641c7ea7c8, []int{0} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,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_c8bc58641c7ea7c8, []int{1} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,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_c8bc58641c7ea7c8, []int{2} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -343,6 +343,7 @@ type UserInfo struct { Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` + GlobalRecvMsgOpt int32 `protobuf:"varint,11,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -352,7 +353,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_c8bc58641c7ea7c8, []int{3} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -442,6 +443,13 @@ func (m *UserInfo) GetAppMangerLevel() int32 { return 0 } +func (m *UserInfo) GetGlobalRecvMsgOpt() int32 { + if m != nil { + return m.GlobalRecvMsgOpt + } + return 0 +} + type FriendInfo struct { OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` @@ -459,7 +467,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_c8bc58641c7ea7c8, []int{4} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +552,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_c8bc58641c7ea7c8, []int{5} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +633,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_c8bc58641c7ea7c8, []int{6} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +741,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_c8bc58641c7ea7c8, []int{7} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +886,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_c8bc58641c7ea7c8, []int{8} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +997,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_c8bc58641c7ea7c8, []int{9} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1111,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_c8bc58641c7ea7c8, []int{10} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1192,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_c8bc58641c7ea7c8, []int{11} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1238,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_c8bc58641c7ea7c8, []int{12} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1287,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_c8bc58641c7ea7c8, []int{13} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1346,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_c8bc58641c7ea7c8, []int{14} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1384,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_c8bc58641c7ea7c8, []int{15} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1425,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_c8bc58641c7ea7c8, []int{16} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1486,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_c8bc58641c7ea7c8, []int{17} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1539,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_c8bc58641c7ea7c8, []int{18} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1588,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_c8bc58641c7ea7c8, []int{19} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1656,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_c8bc58641c7ea7c8, []int{20} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1719,7 +1727,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_c8bc58641c7ea7c8, []int{21} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1894,7 +1902,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_c8bc58641c7ea7c8, []int{22} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1962,7 +1970,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_c8bc58641c7ea7c8, []int{23} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2019,7 +2027,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_c8bc58641c7ea7c8, []int{24} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2088,7 +2096,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_c8bc58641c7ea7c8, []int{25} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2143,7 +2151,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_c8bc58641c7ea7c8, []int{26} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2199,7 +2207,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_c8bc58641c7ea7c8, []int{27} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2254,7 +2262,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_c8bc58641c7ea7c8, []int{28} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2309,7 +2317,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_c8bc58641c7ea7c8, []int{29} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2365,7 +2373,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_c8bc58641c7ea7c8, []int{30} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2428,7 +2436,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_c8bc58641c7ea7c8, []int{31} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2491,7 +2499,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_c8bc58641c7ea7c8, []int{32} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2553,7 +2561,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_c8bc58641c7ea7c8, []int{33} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2607,7 +2615,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_c8bc58641c7ea7c8, []int{34} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2663,7 +2671,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_c8bc58641c7ea7c8, []int{35} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2732,7 +2740,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_c8bc58641c7ea7c8, []int{36} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2793,7 +2801,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_c8bc58641c7ea7c8, []int{37} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2847,7 +2855,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_c8bc58641c7ea7c8, []int{38} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2902,7 +2910,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_c8bc58641c7ea7c8, []int{39} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2962,7 +2970,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_c8bc58641c7ea7c8, []int{40} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3009,7 +3017,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_c8bc58641c7ea7c8, []int{41} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3062,7 +3070,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_c8bc58641c7ea7c8, []int{42} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3108,7 +3116,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_c8bc58641c7ea7c8, []int{43} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3148,7 +3156,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_c8bc58641c7ea7c8, []int{44} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3195,7 +3203,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_c8bc58641c7ea7c8, []int{45} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3243,7 +3251,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_c8bc58641c7ea7c8, []int{46} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3296,7 +3304,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_c8bc58641c7ea7c8, []int{47} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3334,7 +3342,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_c8bc58641c7ea7c8, []int{48} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3372,7 +3380,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_c8bc58641c7ea7c8, []int{49} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3410,7 +3418,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_c8bc58641c7ea7c8, []int{50} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3449,7 +3457,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_c8bc58641c7ea7c8, []int{51} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3488,7 +3496,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_c8bc58641c7ea7c8, []int{52} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3528,7 +3536,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_c8bc58641c7ea7c8, []int{53} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3583,7 +3591,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_c8bc58641c7ea7c8, []int{54} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3637,7 +3645,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_c8bc58641c7ea7c8, []int{55} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3683,7 +3691,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_c8bc58641c7ea7c8, []int{56} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3736,7 +3744,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_c8bc58641c7ea7c8, []int{57} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4003,7 +4011,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_c8bc58641c7ea7c8, []int{58} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4271,7 +4279,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_c8bc58641c7ea7c8, []int{59} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4367,7 +4375,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_c8bc58641c7ea7c8, []int{60} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4422,7 +4430,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_c8bc58641c7ea7c8, []int{61} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4483,7 +4491,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_c8bc58641c7ea7c8, []int{62} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4538,7 +4546,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_c8bc58641c7ea7c8, []int{63} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4599,7 +4607,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_c8bc58641c7ea7c8, []int{64} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4654,7 +4662,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_c8bc58641c7ea7c8, []int{65} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4712,7 +4720,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_c8bc58641c7ea7c8, []int{66} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4747,7 +4755,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_c8bc58641c7ea7c8, []int{67} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4815,7 +4823,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_c8bc58641c7ea7c8, []int{68} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4869,7 +4877,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_c8bc58641c7ea7c8, []int{69} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4920,7 +4928,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_c8bc58641c7ea7c8, []int{70} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4955,7 +4963,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_c8bc58641c7ea7c8, []int{71} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5020,7 +5028,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_c8bc58641c7ea7c8, []int{72} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5054,7 +5062,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_c8bc58641c7ea7c8, []int{73} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5114,7 +5122,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_c8bc58641c7ea7c8, []int{74} + return fileDescriptor_ws_17c9ab6c274be9ad, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5230,212 +5238,214 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_c8bc58641c7ea7c8) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_17c9ab6c274be9ad) } -var fileDescriptor_ws_c8bc58641c7ea7c8 = []byte{ - // 3261 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_17c9ab6c274be9ad = []byte{ + // 3285 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, - 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x29, 0x48, 0x88, 0x1b, 0x27, 0x38, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x14, 0x21, - 0x90, 0x38, 0x20, 0xc4, 0x81, 0x1b, 0x17, 0x38, 0x22, 0x6e, 0x9c, 0xb9, 0x72, 0x40, 0x42, 0x02, - 0xbd, 0xaa, 0xd7, 0xdd, 0xef, 0x75, 0xf7, 0xd8, 0xb3, 0x23, 0x2b, 0xbb, 0xd1, 0x72, 0x9b, 0xaa, - 0x7e, 0x55, 0xaf, 0x5e, 0x7d, 0xf5, 0x5e, 0xd5, 0xfb, 0x19, 0x58, 0x88, 0x9d, 0xc3, 0xf7, 0xee, - 0xc6, 0xcf, 0xdf, 0x8d, 0x2f, 0x85, 0x51, 0x90, 0x04, 0xc6, 0x52, 0xcc, 0xa2, 0x63, 0x16, 0xbd, - 0x67, 0x87, 0xee, 0x7b, 0xa1, 0x1d, 0xd9, 0xc3, 0xd8, 0xfc, 0x97, 0x0e, 0xed, 0xab, 0x51, 0x90, - 0x86, 0xd7, 0xfd, 0xfd, 0xc0, 0xe8, 0xc2, 0xf4, 0x00, 0x89, 0xad, 0xae, 0xb6, 0xaa, 0x3d, 0xdb, - 0xb6, 0x32, 0xd2, 0xb8, 0x00, 0x6d, 0xfc, 0xb9, 0x63, 0x0f, 0x59, 0x57, 0xc7, 0x6f, 0x05, 0xc3, - 0x30, 0x61, 0xd6, 0x0f, 0x12, 0x77, 0xdf, 0xed, 0xdb, 0x89, 0x1b, 0xf8, 0xdd, 0x06, 0x36, 0x50, - 0x78, 0xbc, 0x8d, 0xeb, 0x27, 0x51, 0xe0, 0xa4, 0x7d, 0x6c, 0x33, 0x45, 0x6d, 0x64, 0x1e, 0xef, - 0x7f, 0xdf, 0xee, 0xb3, 0xdb, 0xd6, 0x8d, 0x6e, 0x93, 0xfa, 0x17, 0xa4, 0xb1, 0x0a, 0x9d, 0xe0, - 0xae, 0xcf, 0xa2, 0xdb, 0x31, 0x8b, 0xae, 0x6f, 0x75, 0x5b, 0xf8, 0x55, 0x66, 0x19, 0x17, 0x01, - 0xfa, 0x11, 0xb3, 0x13, 0x76, 0xcb, 0x1d, 0xb2, 0xee, 0xf4, 0xaa, 0xf6, 0xec, 0x9c, 0x25, 0x71, - 0xb8, 0x86, 0x21, 0x1b, 0xee, 0xb1, 0x68, 0x33, 0x48, 0xfd, 0xa4, 0x3b, 0x83, 0x0d, 0x64, 0x96, - 0x31, 0x0f, 0x3a, 0xbb, 0xd7, 0x6d, 0xa3, 0x6a, 0x9d, 0xdd, 0x33, 0x96, 0xa1, 0x15, 0x27, 0x76, - 0x92, 0xc6, 0x5d, 0x58, 0xd5, 0x9e, 0x6d, 0x5a, 0x82, 0x32, 0xd6, 0x60, 0x0e, 0xf5, 0x06, 0x99, - 0x35, 0x1d, 0x14, 0x51, 0x99, 0xb9, 0xc7, 0x6e, 0xdd, 0x0f, 0x59, 0x77, 0x16, 0x15, 0x14, 0x0c, - 0xf3, 0x6f, 0x3a, 0x9c, 0x43, 0xbf, 0x6f, 0xa3, 0x01, 0x57, 0x52, 0xcf, 0x3b, 0x05, 0x81, 0x65, - 0x68, 0xa5, 0xd4, 0x1d, 0xb9, 0x5f, 0x50, 0xbc, 0x9f, 0x28, 0xf0, 0xd8, 0x0d, 0x76, 0xcc, 0x3c, - 0x74, 0x7c, 0xd3, 0x2a, 0x18, 0xc6, 0x0a, 0xcc, 0xdc, 0x09, 0x5c, 0x1f, 0x7d, 0x32, 0x85, 0x1f, - 0x73, 0x9a, 0x7f, 0xf3, 0xdd, 0xfe, 0xa1, 0xcf, 0x21, 0x25, 0x77, 0xe7, 0xb4, 0x8c, 0x44, 0x4b, - 0x45, 0xe2, 0x19, 0x98, 0xb7, 0xc3, 0x70, 0xdb, 0xf6, 0x07, 0x2c, 0xa2, 0x4e, 0xa7, 0x51, 0x6f, - 0x89, 0xcb, 0xf1, 0xe0, 0x3d, 0xf5, 0x82, 0x34, 0xea, 0x33, 0x74, 0x77, 0xd3, 0x92, 0x38, 0x5c, - 0x4f, 0x10, 0xb2, 0x48, 0x72, 0x23, 0x79, 0xbe, 0xc4, 0x15, 0xa8, 0x40, 0x8e, 0x0a, 0xc7, 0x31, - 0x4d, 0xd8, 0x1b, 0xbe, 0x83, 0x83, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x03, 0x0d, 0xe6, 0x77, - 0xd3, 0x3d, 0xcf, 0xed, 0xa3, 0x0a, 0xee, 0xd6, 0xc2, 0x79, 0x9a, 0xe2, 0x3c, 0xd9, 0x05, 0xfa, - 0x68, 0x17, 0x34, 0x54, 0x17, 0x2c, 0x43, 0x6b, 0xc0, 0x7c, 0x87, 0x45, 0xc2, 0xa5, 0x82, 0x12, - 0xa6, 0x36, 0x33, 0x53, 0xcd, 0x9f, 0xe8, 0x30, 0xf3, 0x31, 0x9b, 0xb0, 0x0a, 0x9d, 0xf0, 0x20, - 0xf0, 0xd9, 0x4e, 0xca, 0xc3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0xf3, 0xd0, 0xdc, 0x73, 0xa3, 0xe4, - 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb4, 0x5d, 0x02, 0xb3, 0x6d, 0x11, 0x21, 0x06, - 0x34, 0x93, 0xfb, 0x5e, 0x9d, 0x63, 0xed, 0xca, 0x1c, 0xab, 0xc6, 0x06, 0xd4, 0xc5, 0x86, 0xf9, - 0x6f, 0x0d, 0xe0, 0x4a, 0xe4, 0x32, 0xdf, 0x41, 0xd7, 0x94, 0x26, 0xb7, 0x56, 0x9d, 0xdc, 0xcb, - 0xd0, 0x8a, 0xd8, 0xd0, 0x8e, 0x0e, 0xb3, 0xe0, 0x27, 0xaa, 0x64, 0x50, 0xa3, 0x62, 0xd0, 0xab, - 0x00, 0xfb, 0xd8, 0x0f, 0xd7, 0x83, 0xae, 0xea, 0xbc, 0xf8, 0x99, 0x4b, 0x95, 0x65, 0xf0, 0x52, - 0x86, 0x92, 0x25, 0x35, 0xe7, 0x33, 0xcb, 0x76, 0x1c, 0x11, 0xc0, 0x4d, 0x9a, 0x59, 0x39, 0xa3, - 0x26, 0x7e, 0x5b, 0x27, 0xc4, 0xef, 0x74, 0x1e, 0x14, 0xff, 0xd4, 0xa0, 0xbd, 0xe1, 0xd9, 0xfd, - 0xc3, 0x31, 0x87, 0xae, 0x0e, 0x51, 0xaf, 0x0c, 0xf1, 0x2a, 0xcc, 0xed, 0x71, 0x75, 0xd9, 0x10, - 0xd0, 0x0b, 0x9d, 0x17, 0x3f, 0x57, 0x33, 0x4a, 0x75, 0x52, 0x58, 0xaa, 0x9c, 0x3a, 0xdc, 0xa9, - 0xd3, 0x87, 0xdb, 0x3c, 0x61, 0xb8, 0xad, 0x7c, 0xb8, 0x7f, 0xd5, 0x61, 0x16, 0x17, 0x3a, 0x8b, - 0x1d, 0xa5, 0x2c, 0x4e, 0x8c, 0xd7, 0x61, 0x26, 0xcd, 0x4c, 0xd5, 0xc6, 0x35, 0x35, 0x17, 0x31, - 0x5e, 0x11, 0xcb, 0x2a, 0xca, 0xeb, 0x28, 0x7f, 0xa1, 0x46, 0x3e, 0xcf, 0x69, 0x56, 0xd1, 0x9c, - 0xa7, 0xa0, 0x03, 0xdb, 0x77, 0x3c, 0x66, 0xb1, 0x38, 0xf5, 0x12, 0xb1, 0x5a, 0x2a, 0x3c, 0x8a, - 0xb4, 0xa3, 0xed, 0x78, 0x20, 0x12, 0x94, 0xa0, 0xb8, 0x77, 0xa8, 0x1d, 0xff, 0x44, 0x43, 0x2f, - 0x18, 0x7c, 0xa2, 0x46, 0xec, 0x08, 0x11, 0xa2, 0x69, 0x95, 0x91, 0x45, 0x9f, 0xc2, 0x6b, 0x14, - 0x08, 0x0a, 0x8f, 0x43, 0x4c, 0x34, 0x2a, 0xa0, 0xcc, 0x24, 0x71, 0xca, 0x89, 0xc9, 0xfc, 0x7b, - 0x03, 0xe6, 0x68, 0xfa, 0x64, 0x4e, 0xbd, 0xc8, 0xe3, 0x3c, 0x18, 0x2a, 0x51, 0x24, 0x71, 0xb8, - 0x15, 0x9c, 0xda, 0x51, 0x17, 0x1a, 0x85, 0xc7, 0x43, 0x91, 0xd3, 0x57, 0x94, 0x05, 0x47, 0x66, - 0x65, 0xbd, 0x5c, 0x95, 0x17, 0x1e, 0x89, 0xc3, 0x97, 0xb2, 0x24, 0x50, 0xa2, 0x23, 0xa7, 0xb9, - 0x6c, 0x12, 0xe4, 0xfd, 0x53, 0x7c, 0x48, 0x1c, 0xee, 0xdf, 0x24, 0xc8, 0xfa, 0x26, 0x27, 0x15, - 0x0c, 0xd2, 0x2c, 0xfa, 0xa5, 0x54, 0x92, 0xd3, 0x15, 0x54, 0xdb, 0x27, 0xa2, 0x0a, 0x0a, 0xaa, - 0xea, 0xe4, 0xea, 0x54, 0x26, 0xd7, 0x1a, 0xcc, 0x91, 0x9e, 0x2c, 0xe8, 0x67, 0x29, 0xd5, 0x2b, - 0x4c, 0x35, 0x36, 0xe6, 0xca, 0xb1, 0xa1, 0xa2, 0x3b, 0x3f, 0x02, 0xdd, 0x85, 0x1c, 0xdd, 0x5f, - 0xeb, 0x00, 0x5b, 0x2c, 0xb4, 0xa3, 0x64, 0xc8, 0xfc, 0x84, 0x0f, 0xcf, 0xc9, 0xa9, 0x1c, 0x5c, - 0x85, 0x27, 0xe7, 0x09, 0x5d, 0xcd, 0x13, 0x06, 0x4c, 0xa1, 0xc3, 0x09, 0x4d, 0xfc, 0xcd, 0x9d, - 0x19, 0xda, 0x11, 0x69, 0xa3, 0x20, 0xcf, 0x69, 0x9e, 0x07, 0x82, 0xc8, 0x11, 0x99, 0xa3, 0x69, - 0x11, 0xc1, 0x27, 0x7f, 0xd1, 0x1f, 0x16, 0x34, 0x2d, 0x5a, 0xd7, 0x55, 0xee, 0xa9, 0x35, 0xd8, - 0x73, 0xb0, 0x18, 0xa7, 0x7b, 0xc5, 0xe0, 0x76, 0xd2, 0xa1, 0x08, 0xf7, 0x0a, 0x9f, 0x3b, 0x95, - 0x8a, 0x33, 0xde, 0x88, 0x52, 0x4d, 0xc1, 0x28, 0x57, 0x05, 0xe6, 0x07, 0x3a, 0x2c, 0xde, 0x8c, - 0x06, 0xb6, 0xef, 0x7e, 0x17, 0xcb, 0x4d, 0x5c, 0xc0, 0x27, 0x49, 0xb9, 0xab, 0xd0, 0x61, 0xfe, - 0xc0, 0x73, 0xe3, 0x83, 0x9d, 0xc2, 0x6f, 0x32, 0x4b, 0x76, 0xf6, 0xd4, 0xa8, 0xa4, 0xdc, 0x54, - 0x92, 0xf2, 0x32, 0xb4, 0x86, 0xc1, 0x9e, 0xeb, 0x65, 0x71, 0x2f, 0x28, 0x8c, 0x79, 0xe6, 0x31, - 0xcc, 0xce, 0x79, 0xcc, 0x67, 0x8c, 0x22, 0x51, 0xcf, 0xd4, 0x26, 0xea, 0xb6, 0x9c, 0xa8, 0x55, - 0xc7, 0x43, 0xc5, 0xf1, 0xe4, 0xae, 0x4e, 0xee, 0xae, 0x3f, 0x6a, 0xb0, 0x58, 0xb8, 0x9b, 0x6a, - 0xd0, 0x91, 0xee, 0x2a, 0x47, 0xa0, 0x5e, 0x13, 0x81, 0x79, 0xdc, 0x34, 0xe4, 0xb8, 0xe1, 0x91, - 0x16, 0xc4, 0xae, 0x54, 0xef, 0xe7, 0x34, 0xef, 0xcd, 0x63, 0xb6, 0xe4, 0x2c, 0xa2, 0xa4, 0xaa, - 0xbb, 0xa5, 0x54, 0xdd, 0xe5, 0x3c, 0xfa, 0x3b, 0x0d, 0xce, 0x73, 0x94, 0x2b, 0xc3, 0xb8, 0x09, - 0x8b, 0x41, 0x29, 0x12, 0x44, 0xa2, 0x79, 0xba, 0x26, 0x51, 0x94, 0x83, 0xc6, 0xaa, 0x08, 0x73, - 0x85, 0x4e, 0xa9, 0x13, 0x91, 0x79, 0xea, 0x14, 0x96, 0xed, 0xb1, 0x2a, 0xc2, 0xe6, 0xef, 0x35, - 0x58, 0xa4, 0xd4, 0x26, 0xcd, 0xf3, 0x33, 0x37, 0xfb, 0x1d, 0x38, 0x5f, 0xee, 0xf9, 0x86, 0x1b, - 0x27, 0x5d, 0x7d, 0xb5, 0x31, 0xae, 0xe9, 0xb5, 0x0a, 0xf8, 0x5c, 0x7b, 0x72, 0x37, 0xf5, 0xbc, - 0x6d, 0x16, 0xc7, 0xf6, 0x80, 0x6d, 0xdc, 0xef, 0xb1, 0x23, 0xfe, 0xc1, 0x62, 0x47, 0x23, 0x63, - 0x88, 0xd7, 0x39, 0x58, 0x28, 0xb8, 0x81, 0x9f, 0x87, 0x90, 0xcc, 0xe2, 0xd3, 0x2a, 0x26, 0x3d, - 0xdd, 0xc6, 0x6a, 0x83, 0xa7, 0x50, 0x41, 0x1a, 0xdf, 0x81, 0x59, 0xcc, 0xe1, 0xa2, 0x9b, 0xee, - 0x14, 0x0e, 0xe0, 0xb5, 0xda, 0xaa, 0xa1, 0xd6, 0x2a, 0xaa, 0x06, 0x04, 0xfd, 0x86, 0x9f, 0x44, - 0xf7, 0x2d, 0x45, 0xe3, 0xca, 0xbb, 0xb0, 0x54, 0x69, 0x62, 0x2c, 0x42, 0xe3, 0x90, 0xdd, 0x17, - 0xe3, 0xe0, 0x3f, 0x8d, 0x17, 0xa0, 0x79, 0x6c, 0x7b, 0x29, 0x13, 0xe8, 0xaf, 0xd4, 0x58, 0x20, - 0x6c, 0xb6, 0xa8, 0xe1, 0x2b, 0xfa, 0x57, 0x35, 0xf3, 0xe9, 0x7c, 0x60, 0xf2, 0x18, 0x35, 0x65, - 0x8c, 0xe6, 0x5b, 0xd0, 0xd9, 0x8e, 0x07, 0x5b, 0x76, 0x62, 0x63, 0xc3, 0xd7, 0xa0, 0x33, 0x2c, - 0x48, 0x6c, 0x5c, 0xdf, 0x9f, 0x10, 0xb2, 0xe4, 0xe6, 0xe6, 0x5f, 0x74, 0xe8, 0xd6, 0xbb, 0x22, - 0x0e, 0xb9, 0x0d, 0x2c, 0x8a, 0x36, 0x03, 0x87, 0xe1, 0xd0, 0x9a, 0x56, 0x46, 0x72, 0xec, 0x58, - 0x14, 0xf1, 0x1c, 0x26, 0x8a, 0x6c, 0xa2, 0x8c, 0x4b, 0x30, 0xe5, 0x65, 0xb0, 0x9c, 0x6c, 0x05, - 0xb6, 0x33, 0x86, 0xb0, 0x88, 0xde, 0x95, 0x06, 0x24, 0x30, 0x5b, 0x1f, 0x1b, 0xb3, 0x38, 0x24, - 0xd0, 0x24, 0x1d, 0x04, 0x5c, 0x45, 0xf5, 0x4a, 0x1f, 0x9e, 0xa8, 0x6d, 0x5a, 0x03, 0xe0, 0x57, - 0x54, 0x00, 0x2f, 0x8e, 0x1e, 0x4a, 0x19, 0xc4, 0x10, 0x8c, 0xab, 0x2c, 0xd9, 0xb6, 0xef, 0xad, - 0xfb, 0xce, 0xb6, 0xeb, 0xf7, 0xd8, 0x11, 0x8f, 0xf6, 0x55, 0xe8, 0x88, 0xed, 0x79, 0x0e, 0x53, - 0xdb, 0x92, 0x59, 0x23, 0x77, 0xed, 0xa5, 0xf9, 0xd0, 0xa8, 0xcc, 0x07, 0xf3, 0x32, 0xcc, 0xca, - 0xdd, 0x61, 0x12, 0xb1, 0xef, 0xf5, 0xd8, 0x11, 0x0e, 0x68, 0xce, 0x12, 0x14, 0xf2, 0xb1, 0x85, - 0xd8, 0x1b, 0x08, 0xca, 0xfc, 0xb3, 0x0e, 0xe7, 0x2a, 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xe3, - 0xa5, 0x31, 0x2a, 0x5e, 0xa6, 0x94, 0x78, 0x39, 0x84, 0x25, 0x02, 0x49, 0xea, 0xba, 0xdb, 0xc4, - 0x00, 0x78, 0xbd, 0xae, 0x54, 0xaf, 0x1a, 0x29, 0xb0, 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, - 0x83, 0xe5, 0xfa, 0xc6, 0x35, 0xf0, 0xbf, 0xac, 0xc2, 0xff, 0xd9, 0x3a, 0xf8, 0x65, 0x4b, 0x24, - 0xfc, 0x8f, 0x60, 0x81, 0x2f, 0xaa, 0x3d, 0xe6, 0x3b, 0xdb, 0xf1, 0x00, 0x1d, 0xb9, 0x0a, 0x1d, - 0x92, 0xdf, 0x8e, 0x07, 0xc5, 0xd6, 0x4d, 0x62, 0xf1, 0x16, 0x7d, 0xcf, 0xe5, 0x8b, 0x27, 0xb6, - 0x10, 0x8b, 0x9e, 0xc4, 0xe2, 0x09, 0x32, 0x66, 0xe2, 0x24, 0x83, 0x7b, 0xb7, 0x61, 0xe5, 0xb4, - 0xf9, 0x7e, 0x0b, 0xa6, 0x45, 0x34, 0x62, 0x52, 0xe4, 0xbb, 0xe5, 0x7c, 0x59, 0x25, 0x8a, 0xea, - 0xda, 0xfe, 0x71, 0x11, 0x5e, 0x44, 0xc9, 0xc7, 0x48, 0x0d, 0xf5, 0x18, 0xa9, 0x64, 0xd3, 0x54, - 0xd5, 0xa6, 0xd2, 0xb8, 0x9a, 0xd5, 0x71, 0xf1, 0x32, 0x0e, 0x2b, 0x9b, 0x5d, 0xcf, 0x4e, 0xf6, - 0x83, 0x68, 0x28, 0x36, 0xbf, 0x4d, 0xab, 0xc2, 0xe7, 0xa5, 0x23, 0xf1, 0xf2, 0xda, 0x9f, 0x52, - 0x78, 0x89, 0xcb, 0x2b, 0x6d, 0xe2, 0x64, 0x7b, 0x00, 0x3a, 0x75, 0x50, 0x99, 0x64, 0x5b, 0x1c, - 0xbb, 0x81, 0x8f, 0x55, 0x28, 0x95, 0xfa, 0x32, 0x8b, 0x8f, 0x7c, 0x18, 0x0f, 0xae, 0x44, 0xc1, - 0x50, 0x9c, 0x3d, 0x64, 0x24, 0x8e, 0x3c, 0xf0, 0x93, 0xac, 0x82, 0xed, 0x90, 0xac, 0xc4, 0xe2, - 0xb2, 0x82, 0xc4, 0x3a, 0x7f, 0xd6, 0xca, 0x48, 0x1e, 0x4b, 0x31, 0x3b, 0x12, 0xc5, 0x3b, 0xff, - 0xa9, 0x20, 0xb7, 0xa0, 0x22, 0x57, 0xaa, 0xc6, 0x16, 0xf1, 0xab, 0x5c, 0x8d, 0x15, 0x25, 0xce, - 0x92, 0x52, 0xe2, 0xac, 0xc3, 0x74, 0x10, 0xf2, 0xe9, 0x1f, 0x77, 0x0d, 0x9c, 0x2e, 0x9f, 0x1f, - 0xbd, 0x40, 0x5d, 0xba, 0x49, 0x2d, 0x69, 0x62, 0x64, 0x72, 0xc6, 0x0d, 0x58, 0x08, 0xf6, 0xf7, - 0x3d, 0xd7, 0x67, 0xbb, 0x69, 0x7c, 0x80, 0x9b, 0xe4, 0x73, 0x18, 0xec, 0x66, 0x5d, 0x11, 0xa1, - 0xb6, 0xb4, 0xca, 0xa2, 0xbc, 0xf2, 0xb3, 0x13, 0xda, 0xe4, 0xe0, 0x02, 0x77, 0x1e, 0x17, 0x38, - 0x85, 0x87, 0xe7, 0x71, 0xd2, 0x42, 0xff, 0x04, 0x3a, 0x4e, 0x66, 0xad, 0xbc, 0x02, 0xb3, 0xb2, - 0xb1, 0x35, 0x13, 0xf3, 0xbc, 0x3c, 0x31, 0x67, 0xe4, 0x79, 0xf7, 0x63, 0x0d, 0x16, 0x4a, 0x66, - 0xf2, 0xd6, 0x89, 0x9b, 0x78, 0x4c, 0x68, 0x20, 0x82, 0xef, 0x74, 0x1c, 0x16, 0xf7, 0xc5, 0x44, - 0xc0, 0xdf, 0xa2, 0x66, 0x6c, 0xe4, 0xe7, 0x57, 0x26, 0xcc, 0xba, 0x37, 0x7b, 0x5c, 0x51, 0x2f, - 0x48, 0x7d, 0x27, 0x3f, 0x83, 0x96, 0x78, 0x3c, 0x10, 0xdd, 0x9b, 0xbd, 0x0d, 0xdb, 0x19, 0x30, - 0x3a, 0x29, 0x6e, 0xa2, 0x4d, 0x2a, 0xd3, 0x74, 0x60, 0xe6, 0x96, 0x1b, 0xc6, 0x9b, 0xc1, 0x70, - 0xc8, 0xe1, 0x74, 0x58, 0xc2, 0x6b, 0x72, 0x0d, 0x07, 0x2f, 0x28, 0xee, 0x19, 0x87, 0xed, 0xdb, - 0xa9, 0x97, 0xf0, 0xa6, 0xd9, 0xf4, 0x97, 0x58, 0x78, 0x46, 0x1a, 0x07, 0xfe, 0x16, 0x49, 0x93, - 0x9d, 0x12, 0xc7, 0xfc, 0x93, 0x0e, 0x8b, 0xb8, 0xba, 0x6d, 0x62, 0xf0, 0x38, 0x28, 0xf4, 0x22, - 0x34, 0x71, 0x32, 0x8b, 0xea, 0xf0, 0xe4, 0xd3, 0x0f, 0x6a, 0x6a, 0x5c, 0x86, 0x56, 0x10, 0x62, - 0x49, 0x49, 0x4b, 0xdf, 0x33, 0xa3, 0x84, 0xd4, 0xe3, 0x68, 0x4b, 0x48, 0x19, 0x57, 0x00, 0x86, - 0x45, 0x05, 0x49, 0x85, 0xc0, 0xb8, 0x3a, 0x24, 0x49, 0xee, 0xdc, 0x3c, 0xc7, 0xe5, 0x67, 0xd2, - 0x0d, 0x4b, 0x65, 0x1a, 0x3b, 0x30, 0x8f, 0x66, 0xdf, 0xcc, 0x8e, 0xc1, 0x10, 0x83, 0xf1, 0x7b, - 0x2c, 0x49, 0x9b, 0x3f, 0xd7, 0x84, 0x1b, 0xf9, 0xd7, 0x1e, 0x23, 0xdf, 0x17, 0x2e, 0xd1, 0x26, - 0x72, 0xc9, 0x0a, 0xcc, 0x0c, 0x53, 0xe9, 0x54, 0xae, 0x61, 0xe5, 0x74, 0x01, 0x51, 0x63, 0x6c, - 0x88, 0xcc, 0x5f, 0x68, 0xd0, 0x7d, 0x33, 0x70, 0x7d, 0xfc, 0xb0, 0x1e, 0x86, 0x9e, 0xb8, 0x38, - 0x99, 0x18, 0xf3, 0xaf, 0x43, 0xdb, 0x26, 0x35, 0x7e, 0x22, 0x60, 0x1f, 0xe3, 0xa4, 0xad, 0x90, - 0x91, 0x0e, 0x4d, 0x1a, 0xf2, 0xa1, 0x89, 0xf9, 0xa1, 0x06, 0xf3, 0xe4, 0x94, 0xb7, 0x53, 0x37, - 0x99, 0xd8, 0xbe, 0x0d, 0x98, 0x39, 0x4a, 0xdd, 0x64, 0x82, 0xa8, 0xcc, 0xe5, 0xaa, 0xf1, 0xd4, - 0xa8, 0x89, 0x27, 0xf3, 0x23, 0x0d, 0x2e, 0x94, 0xdd, 0xba, 0xde, 0xef, 0xb3, 0xf0, 0x61, 0x4e, - 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, 0xb2, 0xc5, 0xee, 0xb0, 0xfe, 0xa3, 0x6b, - 0xf2, 0xf7, 0x75, 0xf8, 0xf4, 0xd5, 0x7c, 0xe2, 0xdd, 0x8a, 0x6c, 0x3f, 0xde, 0x67, 0x51, 0xf4, - 0x10, 0xed, 0xbd, 0x01, 0x73, 0x3e, 0xbb, 0x5b, 0xd8, 0x24, 0xa6, 0xe3, 0xb8, 0x6a, 0x54, 0xe1, - 0xf1, 0xd6, 0x2e, 0xf3, 0x3f, 0x1a, 0x2c, 0x92, 0x9e, 0xb7, 0xdc, 0xfe, 0xe1, 0x43, 0x1c, 0xfc, - 0x0e, 0xcc, 0x1f, 0xa2, 0x05, 0x9c, 0x9a, 0x60, 0xd9, 0x2e, 0x49, 0x8f, 0x39, 0xfc, 0xff, 0x6a, - 0xb0, 0x44, 0x8a, 0xae, 0xfb, 0xc7, 0xee, 0xc3, 0x0c, 0xd6, 0x5d, 0x58, 0x70, 0xc9, 0x84, 0x09, - 0x1d, 0x50, 0x16, 0x1f, 0xd3, 0x03, 0xbf, 0xd5, 0x60, 0x81, 0x34, 0xbd, 0xe1, 0x27, 0x2c, 0x9a, - 0x78, 0xfc, 0xd7, 0xa0, 0xc3, 0xfc, 0x24, 0xb2, 0xfd, 0x49, 0x56, 0x48, 0x59, 0x74, 0xcc, 0x45, - 0xf2, 0x43, 0x0d, 0x0c, 0x54, 0xb5, 0xe5, 0xc6, 0x43, 0x37, 0x8e, 0x1f, 0x22, 0x74, 0xe3, 0x19, - 0xfc, 0x53, 0x1d, 0xce, 0x4b, 0x5a, 0xb6, 0xd3, 0xe4, 0x51, 0x37, 0xd9, 0xd8, 0x82, 0x36, 0xaf, - 0x11, 0xe4, 0xdb, 0xc8, 0x71, 0x3b, 0x2a, 0x04, 0x79, 0x15, 0x8b, 0x44, 0x8f, 0xf5, 0x03, 0xdf, - 0x89, 0xb1, 0x38, 0x9a, 0xb3, 0x14, 0x1e, 0x5f, 0x86, 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, 0x67, - 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x57, 0x1a, 0xcc, 0x53, 0x93, 0x47, 0x7f, 0xc8, 0x3c, 0xd7, 0x53, - 0x20, 0x7f, 0x62, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, 0x91, 0xeb, 0xea, 0x47, 0x37, 0xb4, 0xae, - 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, 0x80, - 0xdf, 0xa4, 0x4f, 0x38, 0xfc, 0x97, 0x4a, 0x43, 0x39, 0xf1, 0xb5, 0xc1, 0x83, 0x39, 0xfd, 0x10, - 0x96, 0xe8, 0xd6, 0x57, 0xaa, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x43, 0x68, 0x28, 0x94, - 0x91, 0xea, 0x7d, 0xbe, 0x78, 0xb2, 0x55, 0xdc, 0xe7, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, 0x20, - 0x72, 0x5c, 0x3f, 0x2b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, 0xe9, - 0xfe, 0xf6, 0xc4, 0x1b, 0x66, 0xf9, 0xee, 0x57, 0x57, 0xef, 0x7e, 0xcd, 0x6f, 0xc3, 0x13, 0x15, - 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x2d, 0x9d, 0x75, 0x22, 0x42, 0xa6, 0xee, 0x5c, 0x4e, 0xb6, 0xc5, - 0x52, 0x84, 0xcc, 0xf7, 0x35, 0x78, 0xaa, 0xa2, 0x7e, 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, 0x72, - 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc1, 0x88, - 0x5f, 0x6a, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, 0xcb, 0xd0, 0xa2, 0x27, 0x2d, 0xa2, 0xc3, - 0xa7, 0x6a, 0x3b, 0xcc, 0x9e, 0xe2, 0x58, 0xa2, 0x71, 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, 0xb5, - 0x3c, 0xd8, 0xc7, 0x7e, 0x74, 0x22, 0x04, 0xcc, 0x6f, 0x66, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, 0x96, - 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0xaf, 0x29, 0x7c, 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, 0x54, - 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x97, 0xe1, 0x5c, - 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, 0xa7, 0x33, 0x5f, 0x80, 0xe5, 0xcd, 0xc0, - 0x3f, 0x66, 0x51, 0x4c, 0x17, 0x89, 0x28, 0x92, 0x49, 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, 0x58, - 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x50, 0x6b, 0xca, 0x01, 0x75, - 0x71, 0xa0, 0xad, 0x2b, 0x07, 0xda, 0x17, 0xa0, 0xed, 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, 0x55, - 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xc2, 0x08, 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, 0xbc, - 0x93, 0x9c, 0x1e, 0x79, 0xfd, 0x32, 0xf2, 0xb2, 0xd1, 0xec, 0xc1, 0x92, 0x78, 0x54, 0xb3, 0x6b, - 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, 0xc8, 0x1e, 0xd5, 0xd1, 0xb5, 0x99, 0xc4, - 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, 0xf7, 0x82, 0x63, 0x7e, 0x03, 0x0c, 0x8b, - 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, 0xca, - 0x5e, 0x98, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, 0x23, 0x76, 0x89, 0x63, 0xfe, 0xac, 0x01, - 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, 0x94, - 0xba, 0x23, 0x5f, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, 0x5d, 0xfb, 0x94, 0x25, 0x64, 0x8c, 0xb7, - 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, 0xbe, 0x70, 0x8a, 0x12, 0xd1, 0x9a, 0x74, - 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, 0x41, - 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, - 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, 0x90, - 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, - 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, 0xe6, 0x07, 0x0d, 0x80, 0xac, 0x61, 0x8c, - 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, 0x5f, - 0x1c, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, - 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, 0xed, - 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, - 0x3e, 0xd2, 0x61, 0x1e, 0x5d, 0x46, 0xb7, 0xb0, 0xfe, 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, - 0x8d, 0xa6, 0xca, 0x34, 0xbe, 0x04, 0x4b, 0xc4, 0x60, 0xd2, 0x75, 0x89, 0x8e, 0xd7, 0x25, 0xd5, - 0x0f, 0x78, 0x41, 0x94, 0xc6, 0x49, 0x30, 0xdc, 0xb2, 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, - 0x7d, 0x37, 0x55, 0x79, 0x05, 0x1e, 0x05, 0xc1, 0x30, 0xbf, 0x97, 0x13, 0x14, 0x97, 0x48, 0xdc, - 0x21, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, 0xef, 0xa8, 0x1c, 0xd7, 0xc6, 0x4b, 0x2f, 0xf1, - 0xc8, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xe2, 0x89, 0x57, 0xda, 0x05, 0xe7, 0xf4, 0x0b, 0x37, - 0xf3, 0x1f, 0x1a, 0x9c, 0xdb, 0xb5, 0xa3, 0xc4, 0xed, 0xbb, 0xa1, 0xed, 0x27, 0xdb, 0x2c, 0xb1, - 0x71, 0x0c, 0xca, 0x43, 0x4d, 0xed, 0xc1, 0x1e, 0x6a, 0xee, 0xc2, 0xc2, 0x40, 0xdd, 0x5d, 0x3c, - 0xe0, 0xc6, 0xa0, 0x2c, 0xae, 0xbc, 0x3a, 0x6d, 0x3c, 0xf0, 0xab, 0x53, 0xf3, 0x87, 0x3a, 0x2c, - 0x94, 0x96, 0xce, 0x13, 0xf3, 0xce, 0x3a, 0x80, 0x9b, 0x87, 0xd1, 0x09, 0x87, 0xef, 0x6a, 0xac, - 0x59, 0x92, 0x50, 0xdd, 0x4d, 0x5e, 0x63, 0xf2, 0x9b, 0xbc, 0x6b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, - 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, 0xbb, 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, - 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, 0x58, 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, - 0xac, 0x5d, 0x90, 0xe6, 0x8f, 0x74, 0x58, 0xae, 0xcf, 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, - 0x6a, 0x25, 0x3f, 0x33, 0xaf, 0x17, 0xd1, 0x9d, 0xe7, 0xe1, 0xc7, 0xd5, 0xdd, 0xe7, 0xb2, 0xe8, - 0x96, 0x52, 0x9d, 0xf9, 0x9b, 0xdc, 0x3f, 0x79, 0xa5, 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, - 0x69, 0x98, 0xd2, 0xd3, 0x0f, 0x2a, 0x5c, 0x2b, 0xfc, 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0x99, 0xc5, - 0xec, 0x1f, 0xb4, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, 0x44, 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, - 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8f, 0xb4, 0xd3, 0x23, 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, - 0x83, 0xb9, 0x2d, 0xe6, 0x6d, 0xc7, 0x83, 0xec, 0x6d, 0xea, 0x99, 0x6e, 0x14, 0xcb, 0x2f, 0xf8, - 0xa6, 0xaa, 0x2f, 0xf8, 0x36, 0x60, 0x5e, 0x36, 0x60, 0x92, 0xb7, 0x97, 0x1b, 0x17, 0xbe, 0xb5, - 0x72, 0xe9, 0x79, 0xfa, 0x1f, 0xe7, 0xab, 0x15, 0x27, 0xee, 0xb5, 0xf0, 0x7f, 0x9d, 0x2f, 0xfd, - 0x2f, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x19, 0x19, 0x47, 0xea, 0x39, 0x00, 0x00, + 0xf1, 0xff, 0x77, 0x8f, 0x67, 0xec, 0xa9, 0xf1, 0x67, 0xef, 0xc6, 0x99, 0xbf, 0xff, 0x9b, 0xfd, + 0x9b, 0x8e, 0x15, 0x42, 0x80, 0x4d, 0x94, 0x10, 0x09, 0xf2, 0xb1, 0xc8, 0x1f, 0xd9, 0x8f, 0x64, + 0xc7, 0x76, 0x7a, 0x76, 0x09, 0x22, 0x48, 0xa1, 0x3d, 0xfd, 0x3c, 0xee, 0xb8, 0xa7, 0xbb, 0xdd, + 0x1f, 0xde, 0x5d, 0x2e, 0x48, 0x41, 0x42, 0xdc, 0x38, 0x71, 0xe1, 0x82, 0xc4, 0x05, 0x81, 0xa2, + 0x28, 0x42, 0x20, 0x71, 0x40, 0x08, 0x21, 0x6e, 0x5c, 0xe0, 0x88, 0xb8, 0x71, 0xe6, 0xca, 0x01, + 0x09, 0x09, 0xf4, 0xaa, 0x5e, 0x77, 0xbf, 0xd7, 0xdd, 0x63, 0xcf, 0x5a, 0x56, 0x76, 0xa3, 0xe5, + 0x36, 0x55, 0xfd, 0xaa, 0x5e, 0xbd, 0xfa, 0xd5, 0x7b, 0x55, 0xef, 0x63, 0x60, 0x21, 0x76, 0x0e, + 0xdf, 0xbb, 0x1b, 0x3f, 0x7f, 0x37, 0xbe, 0x12, 0x46, 0x41, 0x12, 0x18, 0x4b, 0x31, 0x8b, 0x8e, + 0x59, 0xf4, 0x9e, 0x1d, 0xba, 0xef, 0x85, 0x76, 0x64, 0x8f, 0x62, 0xf3, 0x1f, 0x3a, 0xb4, 0xaf, + 0x47, 0x41, 0x1a, 0xde, 0xf4, 0xf7, 0x03, 0xa3, 0x0b, 0xd3, 0x43, 0x24, 0xb6, 0xba, 0xda, 0xaa, + 0xf6, 0x6c, 0xdb, 0xca, 0x48, 0xe3, 0x12, 0xb4, 0xf1, 0xe7, 0xb6, 0x3d, 0x62, 0x5d, 0x1d, 0xbf, + 0x15, 0x0c, 0xc3, 0x84, 0x59, 0x3f, 0x48, 0xdc, 0x7d, 0x77, 0x60, 0x27, 0x6e, 0xe0, 0x77, 0x1b, + 0xd8, 0x40, 0xe1, 0xf1, 0x36, 0xae, 0x9f, 0x44, 0x81, 0x93, 0x0e, 0xb0, 0xcd, 0x14, 0xb5, 0x91, + 0x79, 0xbc, 0xff, 0x7d, 0x7b, 0xc0, 0xee, 0x58, 0xb7, 0xba, 0x4d, 0xea, 0x5f, 0x90, 0xc6, 0x2a, + 0x74, 0x82, 0xbb, 0x3e, 0x8b, 0xee, 0xc4, 0x2c, 0xba, 0xb9, 0xd5, 0x6d, 0xe1, 0x57, 0x99, 0x65, + 0x5c, 0x06, 0x18, 0x44, 0xcc, 0x4e, 0xd8, 0x6d, 0x77, 0xc4, 0xba, 0xd3, 0xab, 0xda, 0xb3, 0x73, + 0x96, 0xc4, 0xe1, 0x1a, 0x46, 0x6c, 0xb4, 0xc7, 0xa2, 0xcd, 0x20, 0xf5, 0x93, 0xee, 0x0c, 0x36, + 0x90, 0x59, 0xc6, 0x3c, 0xe8, 0xec, 0x5e, 0xb7, 0x8d, 0xaa, 0x75, 0x76, 0xcf, 0x58, 0x86, 0x56, + 0x9c, 0xd8, 0x49, 0x1a, 0x77, 0x61, 0x55, 0x7b, 0xb6, 0x69, 0x09, 0xca, 0x58, 0x83, 0x39, 0xd4, + 0x1b, 0x64, 0xd6, 0x74, 0x50, 0x44, 0x65, 0xe6, 0x1e, 0xbb, 0x7d, 0x3f, 0x64, 0xdd, 0x59, 0x54, + 0x50, 0x30, 0xcc, 0xbf, 0xe8, 0x70, 0x01, 0xfd, 0xde, 0x43, 0x03, 0xae, 0xa5, 0x9e, 0x77, 0x0a, + 0x02, 0xcb, 0xd0, 0x4a, 0xa9, 0x3b, 0x72, 0xbf, 0xa0, 0x78, 0x3f, 0x51, 0xe0, 0xb1, 0x5b, 0xec, + 0x98, 0x79, 0xe8, 0xf8, 0xa6, 0x55, 0x30, 0x8c, 0x15, 0x98, 0x79, 0x3f, 0x70, 0x7d, 0xf4, 0xc9, + 0x14, 0x7e, 0xcc, 0x69, 0xfe, 0xcd, 0x77, 0x07, 0x87, 0x3e, 0x87, 0x94, 0xdc, 0x9d, 0xd3, 0x32, + 0x12, 0x2d, 0x15, 0x89, 0x67, 0x60, 0xde, 0x0e, 0xc3, 0x9e, 0xed, 0x0f, 0x59, 0x44, 0x9d, 0x4e, + 0xa3, 0xde, 0x12, 0x97, 0xe3, 0xc1, 0x7b, 0xea, 0x07, 0x69, 0x34, 0x60, 0xe8, 0xee, 0xa6, 0x25, + 0x71, 0xb8, 0x9e, 0x20, 0x64, 0x91, 0xe4, 0x46, 0xf2, 0x7c, 0x89, 0x2b, 0x50, 0x81, 0x1c, 0x15, + 0x8e, 0x63, 0x9a, 0xb0, 0x37, 0x7c, 0x07, 0x07, 0xd5, 0x11, 0x38, 0x16, 0x2c, 0xf3, 0x7b, 0x1a, + 0xcc, 0xef, 0xa6, 0x7b, 0x9e, 0x3b, 0x40, 0x15, 0xdc, 0xad, 0x85, 0xf3, 0x34, 0xc5, 0x79, 0xb2, + 0x0b, 0xf4, 0xf1, 0x2e, 0x68, 0xa8, 0x2e, 0x58, 0x86, 0xd6, 0x90, 0xf9, 0x0e, 0x8b, 0x84, 0x4b, + 0x05, 0x25, 0x4c, 0x6d, 0x66, 0xa6, 0x9a, 0xbf, 0xd7, 0x61, 0xe6, 0x13, 0x36, 0x61, 0x15, 0x3a, + 0xe1, 0x41, 0xe0, 0xb3, 0xed, 0x94, 0x87, 0x95, 0xb0, 0x45, 0x66, 0x19, 0x17, 0xa1, 0xb9, 0xe7, + 0x46, 0xc9, 0x01, 0xe2, 0x3a, 0x67, 0x11, 0xc1, 0xb9, 0x6c, 0x64, 0xbb, 0x04, 0x66, 0xdb, 0x22, + 0x42, 0x0c, 0x68, 0x26, 0xf7, 0xbd, 0x3a, 0xc7, 0xda, 0x95, 0x39, 0x56, 0x8d, 0x0d, 0xa8, 0x8d, + 0x8d, 0xe7, 0x60, 0x71, 0xe8, 0x05, 0x7b, 0xb6, 0x67, 0xb1, 0xc1, 0x71, 0x2f, 0x1e, 0xee, 0x84, + 0x09, 0x02, 0xd9, 0xb4, 0x2a, 0x7c, 0xf3, 0x9f, 0x1a, 0xc0, 0xb5, 0xc8, 0x65, 0xbe, 0x83, 0x6e, + 0x2c, 0x2d, 0x04, 0x5a, 0x75, 0x21, 0x58, 0x86, 0x56, 0xc4, 0x46, 0x76, 0x74, 0x98, 0x4d, 0x14, + 0xa2, 0x4a, 0xc6, 0x37, 0x2a, 0xc6, 0xbf, 0x0a, 0xb0, 0x8f, 0xfd, 0x70, 0x3d, 0xe8, 0xd6, 0xce, + 0x8b, 0xff, 0x77, 0xa5, 0xb2, 0x64, 0x5e, 0xc9, 0x10, 0xb5, 0xa4, 0xe6, 0x7c, 0x16, 0xda, 0x8e, + 0x23, 0x82, 0xbd, 0x49, 0xb3, 0x30, 0x67, 0xd4, 0xc4, 0x7a, 0xeb, 0x84, 0x58, 0x9f, 0xce, 0x03, + 0xe8, 0xef, 0x1a, 0xb4, 0x37, 0x3c, 0x7b, 0x70, 0x38, 0xe1, 0xd0, 0xd5, 0x21, 0xea, 0x95, 0x21, + 0x5e, 0x87, 0xb9, 0x3d, 0xae, 0x2e, 0x1b, 0x02, 0x7a, 0xa1, 0xf3, 0xe2, 0x67, 0x6a, 0x46, 0xa9, + 0x4e, 0x20, 0x4b, 0x95, 0x53, 0x87, 0x3b, 0x75, 0xfa, 0x70, 0x9b, 0x27, 0x0c, 0xb7, 0x95, 0x0f, + 0xf7, 0xcf, 0x3a, 0xcc, 0xe2, 0xa2, 0x68, 0xb1, 0xa3, 0x94, 0xc5, 0x89, 0xf1, 0x3a, 0xcc, 0xa4, + 0x99, 0xa9, 0xda, 0xa4, 0xa6, 0xe6, 0x22, 0xc6, 0x2b, 0x62, 0x09, 0x46, 0x79, 0x1d, 0xe5, 0x2f, + 0xd5, 0xc8, 0xe7, 0xf9, 0xcf, 0x2a, 0x9a, 0xf3, 0x74, 0x75, 0x60, 0xfb, 0x8e, 0xc7, 0x2c, 0x16, + 0xa7, 0x5e, 0x22, 0x56, 0x56, 0x85, 0x47, 0x91, 0x76, 0xd4, 0x8b, 0x87, 0x22, 0x99, 0x09, 0x8a, + 0x7b, 0x87, 0xda, 0xf1, 0x4f, 0x34, 0xf4, 0x82, 0xc1, 0x27, 0x75, 0xc4, 0x8e, 0x10, 0x21, 0x9a, + 0x82, 0x19, 0x59, 0xf4, 0x29, 0xbc, 0x46, 0x81, 0xa0, 0xf0, 0x38, 0xc4, 0x44, 0xa3, 0x02, 0xca, + 0x62, 0x12, 0xa7, 0x9c, 0xc4, 0xcc, 0xbf, 0x36, 0x60, 0x8e, 0xa6, 0x4f, 0xe6, 0xd4, 0xcb, 0x3c, + 0xce, 0x83, 0x91, 0x12, 0x45, 0x12, 0x87, 0x5b, 0xc1, 0xa9, 0x6d, 0x75, 0x51, 0x52, 0x78, 0x3c, + 0x14, 0x39, 0x7d, 0x4d, 0x59, 0x9c, 0x64, 0x56, 0xd6, 0xcb, 0x75, 0x79, 0x91, 0x92, 0x38, 0x7c, + 0xd9, 0x4b, 0x02, 0x25, 0x3a, 0x72, 0x9a, 0xcb, 0x26, 0x41, 0xde, 0x3f, 0xc5, 0x87, 0xc4, 0xe1, + 0xfe, 0x4d, 0x82, 0xac, 0x6f, 0x72, 0x52, 0xc1, 0x20, 0xcd, 0xa2, 0x5f, 0x4a, 0x3b, 0x39, 0x5d, + 0x41, 0xb5, 0x7d, 0x22, 0xaa, 0xa0, 0xa0, 0xaa, 0x4e, 0xae, 0x4e, 0x65, 0x72, 0xad, 0xc1, 0x1c, + 0xe9, 0xc9, 0x82, 0x7e, 0x96, 0xca, 0x02, 0x85, 0xa9, 0xc6, 0xc6, 0x5c, 0x39, 0x36, 0x54, 0x74, + 0xe7, 0xc7, 0xa0, 0xbb, 0x90, 0xa3, 0xfb, 0x0b, 0x1d, 0x60, 0x8b, 0x85, 0x76, 0x94, 0x8c, 0x98, + 0x9f, 0xf0, 0xe1, 0x39, 0x39, 0x95, 0x83, 0xab, 0xf0, 0xe4, 0x9c, 0xa2, 0xab, 0x39, 0xc5, 0x80, + 0x29, 0x74, 0x38, 0xa1, 0x89, 0xbf, 0xb9, 0x33, 0x43, 0x3b, 0x22, 0x6d, 0x14, 0xe4, 0x39, 0xcd, + 0x73, 0x46, 0x10, 0x39, 0x22, 0xcb, 0x34, 0x2d, 0x22, 0xf8, 0xe4, 0x2f, 0xfa, 0xc3, 0xe2, 0xa7, + 0x45, 0x39, 0x40, 0xe5, 0x9e, 0x5a, 0xaf, 0x3d, 0x07, 0x8b, 0x71, 0xba, 0x57, 0x0c, 0x6e, 0x3b, + 0x1d, 0x89, 0x70, 0xaf, 0xf0, 0xb9, 0x53, 0xa9, 0x90, 0xe3, 0x8d, 0x28, 0x2d, 0x15, 0x8c, 0x72, + 0x05, 0x61, 0x7e, 0xa8, 0xc3, 0xe2, 0x4e, 0x34, 0xb4, 0x7d, 0xf7, 0xdb, 0x58, 0x9a, 0xe2, 0x02, + 0x7e, 0x96, 0xf4, 0xbc, 0x0a, 0x1d, 0xe6, 0x0f, 0x3d, 0x37, 0x3e, 0xd8, 0x2e, 0xfc, 0x26, 0xb3, + 0x64, 0x67, 0x4f, 0x8d, 0x4b, 0xe0, 0x4d, 0x25, 0x81, 0x2f, 0x43, 0x6b, 0x14, 0xec, 0xb9, 0x5e, + 0x16, 0xf7, 0x82, 0xc2, 0x98, 0x67, 0x1e, 0xc3, 0x4c, 0x9e, 0xc7, 0x7c, 0xc6, 0x28, 0x92, 0xfa, + 0x4c, 0x6d, 0x52, 0x6f, 0xcb, 0x49, 0x5d, 0x75, 0x3c, 0x54, 0x1c, 0x4f, 0xee, 0xea, 0xe4, 0xee, + 0xfa, 0x9d, 0x06, 0x8b, 0x85, 0xbb, 0xa9, 0x5e, 0x1d, 0xeb, 0xae, 0x72, 0x04, 0xea, 0x35, 0x11, + 0x98, 0xc7, 0x4d, 0x43, 0x8e, 0x1b, 0x1e, 0x69, 0x41, 0xec, 0x4a, 0x7b, 0x83, 0x9c, 0xe6, 0xbd, + 0x79, 0xcc, 0x96, 0x9c, 0x45, 0x94, 0x54, 0xa1, 0xb7, 0x94, 0x0a, 0xbd, 0x9c, 0x47, 0x7f, 0xad, + 0xc1, 0x45, 0x8e, 0x72, 0x65, 0x18, 0x3b, 0xb0, 0x18, 0x94, 0x22, 0x41, 0x24, 0x9a, 0xa7, 0x6b, + 0x12, 0x45, 0x39, 0x68, 0xac, 0x8a, 0x30, 0x57, 0xe8, 0x94, 0x3a, 0x11, 0x99, 0xa7, 0x4e, 0x61, + 0xd9, 0x1e, 0xab, 0x22, 0x6c, 0xfe, 0x46, 0x83, 0x45, 0x4a, 0x6d, 0xd2, 0x3c, 0x3f, 0x77, 0xb3, + 0xdf, 0x81, 0x8b, 0xe5, 0x9e, 0x6f, 0xb9, 0x71, 0xd2, 0xd5, 0x57, 0x1b, 0x93, 0x9a, 0x5e, 0xab, + 0x80, 0xcf, 0xb5, 0x27, 0x77, 0x53, 0xcf, 0xeb, 0xb1, 0x38, 0xb6, 0x87, 0x6c, 0xe3, 0x7e, 0x9f, + 0x1d, 0xf1, 0x0f, 0x16, 0x3b, 0x1a, 0x1b, 0x43, 0xbc, 0xce, 0xc1, 0x42, 0xc1, 0x0d, 0xfc, 0x3c, + 0x84, 0x64, 0x16, 0x9f, 0x56, 0x31, 0xe9, 0xe9, 0x36, 0x56, 0x1b, 0x3c, 0x85, 0x0a, 0xd2, 0xf8, + 0x16, 0xcc, 0x62, 0x0e, 0x17, 0xdd, 0x74, 0xa7, 0x70, 0x00, 0xaf, 0xd5, 0x56, 0x0d, 0xb5, 0x56, + 0x51, 0x35, 0x20, 0xe8, 0x37, 0xfc, 0x24, 0xba, 0x6f, 0x29, 0x1a, 0x57, 0xde, 0x85, 0xa5, 0x4a, + 0x13, 0x63, 0x11, 0x1a, 0x87, 0xec, 0xbe, 0x18, 0x07, 0xff, 0x69, 0xbc, 0x00, 0xcd, 0x63, 0xdb, + 0x4b, 0x99, 0x40, 0x7f, 0xa5, 0xc6, 0x02, 0x61, 0xb3, 0x45, 0x0d, 0x5f, 0xd1, 0xbf, 0xac, 0x99, + 0x4f, 0xe7, 0x03, 0x93, 0xc7, 0xa8, 0x29, 0x63, 0x34, 0xdf, 0x82, 0x4e, 0x2f, 0x1e, 0x6e, 0xd9, + 0x89, 0x8d, 0x0d, 0x5f, 0x83, 0xce, 0xa8, 0x20, 0xb1, 0x71, 0x7d, 0x7f, 0x42, 0xc8, 0x92, 0x9b, + 0x9b, 0x7f, 0xd2, 0xa1, 0x5b, 0xef, 0x8a, 0x38, 0xe4, 0x36, 0xb0, 0x28, 0xda, 0x0c, 0x1c, 0x86, + 0x43, 0x6b, 0x5a, 0x19, 0xc9, 0xb1, 0x63, 0x51, 0xc4, 0x73, 0x98, 0x28, 0xb2, 0x89, 0x32, 0xae, + 0xc0, 0x94, 0x97, 0xc1, 0x72, 0xb2, 0x15, 0xd8, 0xce, 0x18, 0xc1, 0x22, 0x7a, 0x57, 0x1a, 0x90, + 0xc0, 0x6c, 0x7d, 0x62, 0xcc, 0xe2, 0x90, 0x40, 0x93, 0x74, 0x10, 0x70, 0x15, 0xd5, 0x2b, 0x03, + 0x78, 0xa2, 0xb6, 0x69, 0x0d, 0x80, 0x5f, 0x52, 0x01, 0xbc, 0x3c, 0x7e, 0x28, 0x65, 0x10, 0x43, + 0x30, 0xae, 0xb3, 0xa4, 0x67, 0xdf, 0x5b, 0xf7, 0x9d, 0x9e, 0xeb, 0xf7, 0xd9, 0x11, 0x8f, 0xf6, + 0x55, 0xe8, 0x88, 0xad, 0x7c, 0x0e, 0x53, 0xdb, 0x92, 0x59, 0x63, 0x77, 0xf8, 0xa5, 0xf9, 0xd0, + 0xa8, 0xcc, 0x07, 0xf3, 0x2a, 0xcc, 0xca, 0xdd, 0x61, 0x12, 0xb1, 0xef, 0xf5, 0xd9, 0x11, 0x0e, + 0x68, 0xce, 0x12, 0x14, 0xf2, 0xb1, 0x85, 0xd8, 0x1b, 0x08, 0xca, 0xfc, 0xa3, 0x0e, 0x17, 0x2a, + 0x26, 0xc7, 0xe1, 0x83, 0xea, 0x91, 0xe3, 0xa5, 0x31, 0x2e, 0x5e, 0xa6, 0x94, 0x78, 0x39, 0x84, + 0x25, 0x02, 0x49, 0xea, 0xba, 0xdb, 0xc4, 0x00, 0x78, 0xbd, 0xae, 0x54, 0xaf, 0x1a, 0x29, 0xb0, + 0x97, 0xb8, 0x04, 0x7e, 0x55, 0xef, 0x0a, 0x83, 0xe5, 0xfa, 0xc6, 0x35, 0xf0, 0xbf, 0xac, 0xc2, + 0xff, 0xff, 0x75, 0xf0, 0xcb, 0x96, 0x48, 0xf8, 0x1f, 0xc1, 0x02, 0x5f, 0x54, 0xfb, 0xcc, 0x77, + 0x7a, 0xf1, 0x10, 0x1d, 0xb9, 0x0a, 0x1d, 0x92, 0xef, 0xc5, 0xc3, 0x62, 0xeb, 0x26, 0xb1, 0x78, + 0x8b, 0x81, 0xe7, 0xf2, 0xc5, 0x13, 0x5b, 0x88, 0x45, 0x4f, 0x62, 0xf1, 0x04, 0x19, 0x33, 0x71, + 0xea, 0xc1, 0xbd, 0xdb, 0xb0, 0x72, 0xda, 0xfc, 0xa0, 0x05, 0xd3, 0x22, 0x1a, 0x31, 0x29, 0xf2, + 0xdd, 0x72, 0xbe, 0xac, 0x12, 0x45, 0x75, 0xed, 0xe0, 0xb8, 0x08, 0x2f, 0xa2, 0xe4, 0x23, 0xa7, + 0x86, 0x7a, 0xe4, 0x54, 0xb2, 0x69, 0xaa, 0x6a, 0x53, 0x69, 0x5c, 0xcd, 0xea, 0xb8, 0x78, 0x19, + 0x87, 0x95, 0xcd, 0xae, 0x67, 0x27, 0xfb, 0x41, 0x34, 0x12, 0x9b, 0xdf, 0xa6, 0x55, 0xe1, 0xf3, + 0xd2, 0x91, 0x78, 0x79, 0xed, 0x4f, 0x29, 0xbc, 0xc4, 0xe5, 0x95, 0x36, 0x71, 0xb2, 0x3d, 0x00, + 0x9d, 0x50, 0xa8, 0x4c, 0xb2, 0x2d, 0x8e, 0xdd, 0xc0, 0xc7, 0x2a, 0x94, 0x4a, 0x7d, 0x99, 0xc5, + 0x47, 0x3e, 0x8a, 0x87, 0xd7, 0xa2, 0x60, 0x24, 0xce, 0x29, 0x32, 0x12, 0x47, 0x1e, 0xf8, 0x49, + 0x56, 0xc1, 0xd2, 0xd9, 0x84, 0xcc, 0xe2, 0xb2, 0x82, 0xc4, 0x3a, 0x7f, 0xd6, 0xca, 0x48, 0x1e, + 0x4b, 0x31, 0x3b, 0x12, 0xc5, 0x3b, 0xff, 0xa9, 0x20, 0xb7, 0xa0, 0x22, 0x57, 0xaa, 0xc6, 0x16, + 0xf1, 0xab, 0x5c, 0x8d, 0x15, 0x25, 0xce, 0x92, 0x52, 0xe2, 0xac, 0xc3, 0x74, 0x10, 0xf2, 0xe9, + 0x1f, 0x77, 0x0d, 0x9c, 0x2e, 0x9f, 0x1d, 0xbf, 0x40, 0x5d, 0xd9, 0xa1, 0x96, 0x34, 0x31, 0x32, + 0x39, 0xe3, 0x16, 0x2c, 0x04, 0xfb, 0xfb, 0x9e, 0xeb, 0xb3, 0xdd, 0x34, 0x3e, 0xc0, 0x4d, 0xf2, + 0x05, 0x0c, 0x76, 0xb3, 0xae, 0x88, 0x50, 0x5b, 0x5a, 0x65, 0x51, 0x5e, 0xf9, 0xd9, 0x09, 0x6d, + 0x72, 0x70, 0x81, 0xbb, 0x88, 0x0b, 0x9c, 0xc2, 0xc3, 0xb3, 0x3b, 0x69, 0xa1, 0x7f, 0x02, 0x1d, + 0x27, 0xb3, 0x56, 0x5e, 0x81, 0x59, 0xd9, 0xd8, 0x9a, 0x89, 0x79, 0x51, 0x9e, 0x98, 0x33, 0xf2, + 0xbc, 0xfb, 0xa1, 0x06, 0x0b, 0x25, 0x33, 0x79, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, + 0x77, 0x3a, 0x0e, 0x8b, 0x07, 0x62, 0x22, 0xe0, 0x6f, 0x51, 0x33, 0x36, 0xf2, 0xb3, 0x2e, 0x13, + 0x66, 0xdd, 0x9d, 0x3e, 0x57, 0xd4, 0x0f, 0x52, 0xdf, 0xc9, 0xcf, 0xab, 0x25, 0x1e, 0x0f, 0x44, + 0x77, 0xa7, 0xbf, 0x61, 0x3b, 0x43, 0x46, 0xa7, 0xca, 0x4d, 0xb4, 0x49, 0x65, 0x9a, 0x0e, 0xcc, + 0xdc, 0x76, 0xc3, 0x78, 0x33, 0x18, 0x8d, 0x38, 0x9c, 0x0e, 0x4b, 0x78, 0x4d, 0xae, 0xe1, 0xe0, + 0x05, 0xc5, 0x3d, 0xe3, 0xb0, 0x7d, 0x3b, 0xf5, 0x12, 0xde, 0x34, 0x9b, 0xfe, 0x12, 0x0b, 0xcf, + 0x53, 0xe3, 0xc0, 0xdf, 0x22, 0x69, 0xb2, 0x53, 0xe2, 0x98, 0x7f, 0xd0, 0x61, 0x11, 0x57, 0xb7, + 0x4d, 0x0c, 0x1e, 0x07, 0x85, 0x5e, 0x84, 0x26, 0x4e, 0x66, 0x51, 0x1d, 0x9e, 0x7c, 0xfa, 0x41, + 0x4d, 0x8d, 0xab, 0xd0, 0x0a, 0x42, 0x2c, 0x29, 0x69, 0xe9, 0x7b, 0x66, 0x9c, 0x90, 0x7a, 0x74, + 0x6d, 0x09, 0x29, 0xe3, 0x1a, 0xc0, 0xa8, 0xa8, 0x20, 0xa9, 0x10, 0x98, 0x54, 0x87, 0x24, 0xc9, + 0x9d, 0x9b, 0xe7, 0xb8, 0xfc, 0xfc, 0xba, 0x61, 0xa9, 0x4c, 0x63, 0x1b, 0xe6, 0xd1, 0xec, 0x9d, + 0xec, 0x18, 0x0c, 0x31, 0x98, 0xbc, 0xc7, 0x92, 0xb4, 0xf9, 0x13, 0x4d, 0xb8, 0x91, 0x7f, 0xed, + 0x33, 0xf2, 0x7d, 0xe1, 0x12, 0xed, 0x4c, 0x2e, 0x59, 0x81, 0x99, 0x51, 0x2a, 0x9d, 0xca, 0x35, + 0xac, 0x9c, 0x2e, 0x20, 0x6a, 0x4c, 0x0c, 0x91, 0xf9, 0x53, 0x0d, 0xba, 0x6f, 0x06, 0xae, 0x8f, + 0x1f, 0xd6, 0xc3, 0xd0, 0x13, 0x97, 0x2c, 0x67, 0xc6, 0xfc, 0xab, 0xd0, 0xb6, 0x49, 0x8d, 0x9f, + 0x08, 0xd8, 0x27, 0x38, 0x69, 0x2b, 0x64, 0xa4, 0x43, 0x93, 0x86, 0x7c, 0x68, 0x62, 0x7e, 0xa4, + 0xc1, 0x3c, 0x39, 0xe5, 0xed, 0xd4, 0x4d, 0xce, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x72, + 0x86, 0xa8, 0xcc, 0xe5, 0xaa, 0xf1, 0xd4, 0xa8, 0x89, 0x27, 0xf3, 0x63, 0x0d, 0x2e, 0x95, 0xdd, + 0xba, 0x3e, 0x18, 0xb0, 0xf0, 0x61, 0x4e, 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, + 0xb2, 0xc5, 0xde, 0x67, 0x83, 0x47, 0xd7, 0xe4, 0xef, 0xea, 0xf0, 0xbf, 0xd7, 0xf3, 0x89, 0x77, + 0x3b, 0xb2, 0xfd, 0x78, 0x9f, 0x45, 0xd1, 0x43, 0xb4, 0xf7, 0x16, 0xcc, 0xf9, 0xec, 0x6e, 0x61, + 0x93, 0x98, 0x8e, 0x93, 0xaa, 0x51, 0x85, 0x27, 0x5b, 0xbb, 0xcc, 0x7f, 0x69, 0xb0, 0x48, 0x7a, + 0xde, 0x72, 0x07, 0x87, 0x0f, 0x71, 0xf0, 0xdb, 0x30, 0x7f, 0x88, 0x16, 0x70, 0xea, 0x0c, 0xcb, + 0x76, 0x49, 0x7a, 0xc2, 0xe1, 0xff, 0x5b, 0x83, 0x25, 0x52, 0x74, 0xd3, 0x3f, 0x76, 0x1f, 0x66, + 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x9c, 0xd1, 0x01, 0x65, 0xf1, 0x09, 0x3d, 0xf0, 0x2b, 0x0d, + 0x16, 0x48, 0xd3, 0x1b, 0x7e, 0xc2, 0xa2, 0x33, 0x8f, 0xff, 0x06, 0x74, 0x98, 0x9f, 0x44, 0xb6, + 0x7f, 0x96, 0x15, 0x52, 0x16, 0x9d, 0x70, 0x91, 0xfc, 0x48, 0x03, 0x03, 0x55, 0x6d, 0xb9, 0xf1, + 0xc8, 0x8d, 0xe3, 0x87, 0x08, 0xdd, 0x64, 0x06, 0xff, 0x48, 0x87, 0x8b, 0x92, 0x96, 0x5e, 0x9a, + 0x3c, 0xea, 0x26, 0x1b, 0x5b, 0xd0, 0xe6, 0x35, 0x82, 0x7c, 0x1b, 0x39, 0x69, 0x47, 0x85, 0x20, + 0xaf, 0x62, 0x91, 0xe8, 0xb3, 0x41, 0xe0, 0x3b, 0x31, 0x16, 0x47, 0x73, 0x96, 0xc2, 0xe3, 0xcb, + 0xd0, 0x8a, 0xa4, 0x66, 0xd3, 0xf6, 0x07, 0xcc, 0x7b, 0x6c, 0x5c, 0x64, 0xfe, 0x5c, 0x83, 0x79, + 0x6a, 0xf2, 0xe8, 0x0f, 0x99, 0xe7, 0x7a, 0x0a, 0xe4, 0x4f, 0x0d, 0x4a, 0x3c, 0xbc, 0x96, 0x25, + 0x2d, 0x72, 0x5d, 0xfd, 0xe8, 0x86, 0xd6, 0x0d, 0xe8, 0x0c, 0x0e, 0x6c, 0x7f, 0x78, 0xa6, 0xe0, + 0x92, 0x45, 0xcd, 0x04, 0x9e, 0x94, 0x0f, 0xe0, 0x37, 0xe9, 0x13, 0x0e, 0xff, 0xa5, 0xd2, 0x50, + 0x4e, 0x7c, 0x6d, 0xf0, 0x60, 0x4e, 0x3f, 0x84, 0x25, 0xba, 0xf5, 0x95, 0x6a, 0x42, 0xa3, 0x0b, + 0xd3, 0xb6, 0x43, 0xc7, 0x10, 0x1a, 0x0a, 0x65, 0xa4, 0x7a, 0x9f, 0x2f, 0x9e, 0x77, 0x15, 0xf7, + 0xf9, 0x97, 0x01, 0x6c, 0xc7, 0x79, 0x27, 0x88, 0x1c, 0xd7, 0xcf, 0x0a, 0x7c, 0x89, 0x63, 0xbe, + 0x09, 0xb3, 0xd7, 0xa2, 0x60, 0x74, 0x5b, 0xba, 0xbf, 0x3d, 0xf1, 0x86, 0x59, 0xbe, 0xfb, 0xd5, + 0xd5, 0xbb, 0x5f, 0xf3, 0x9b, 0xf0, 0x44, 0xc5, 0x70, 0x74, 0xd6, 0x26, 0x5d, 0x4b, 0x67, 0x9d, + 0x88, 0x90, 0xa9, 0x3b, 0x97, 0x93, 0x6d, 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0xaa, 0xa8, + 0x5f, 0x0f, 0xc3, 0x28, 0x38, 0x16, 0x98, 0x9c, 0x47, 0x37, 0x6a, 0xf1, 0xab, 0x97, 0x8b, 0xdf, + 0x5a, 0x23, 0x94, 0x82, 0xfd, 0x13, 0x30, 0xe2, 0x67, 0x1a, 0x2c, 0x08, 0x23, 0x1c, 0x47, 0x74, + 0xfb, 0x32, 0xb4, 0xe8, 0x49, 0x8b, 0xe8, 0xf0, 0xa9, 0xda, 0x0e, 0xb3, 0xa7, 0x38, 0x96, 0x68, + 0x5c, 0x8d, 0x48, 0xbd, 0x6e, 0x46, 0x7d, 0x25, 0x0f, 0xf6, 0x89, 0x1f, 0x9d, 0x08, 0x01, 0xf3, + 0xeb, 0x59, 0x30, 0x6f, 0x31, 0x8f, 0x9d, 0xa7, 0x8f, 0xcc, 0x3b, 0x30, 0x8f, 0xef, 0x6b, 0x0a, + 0x1f, 0x9c, 0x8b, 0xda, 0x77, 0x60, 0x11, 0xd5, 0x9e, 0xbb, 0xbd, 0xf9, 0xec, 0xe0, 0xfe, 0x91, + 0x97, 0x92, 0x73, 0xd1, 0xfe, 0x45, 0xb8, 0x90, 0xf9, 0xfe, 0x4e, 0xe8, 0xe4, 0x87, 0x48, 0x63, + 0xee, 0xe9, 0xcc, 0x17, 0x60, 0x79, 0x33, 0xf0, 0x8f, 0x59, 0x14, 0xd3, 0x45, 0x22, 0x8a, 0x64, + 0x12, 0xca, 0xe4, 0x17, 0x94, 0xf9, 0x3e, 0xac, 0xc8, 0x12, 0x7d, 0x96, 0xec, 0x46, 0xee, 0xb1, + 0x24, 0x25, 0x0e, 0xa8, 0x35, 0xe5, 0x80, 0xba, 0x38, 0xd0, 0xd6, 0x95, 0x03, 0xed, 0x4b, 0xd0, + 0x76, 0x63, 0xa1, 0x00, 0x83, 0x6a, 0xc6, 0x2a, 0x18, 0xa6, 0x0d, 0x4b, 0xe4, 0x7e, 0x71, 0x61, + 0x84, 0x5d, 0xac, 0xc0, 0x0c, 0xc5, 0x54, 0xde, 0x49, 0x4e, 0x8f, 0xbd, 0x7e, 0x19, 0x7b, 0xd9, + 0x68, 0xf6, 0x61, 0x49, 0x3c, 0xaa, 0xd9, 0xb5, 0x87, 0xae, 0x4f, 0x8b, 0xec, 0x65, 0x80, 0xd0, + 0x1e, 0x66, 0x0f, 0xf0, 0xe8, 0xda, 0x4c, 0xe2, 0xf0, 0xef, 0xf1, 0x41, 0x70, 0x57, 0x7c, 0xd7, + 0xe9, 0x7b, 0xc1, 0x31, 0xbf, 0x06, 0x86, 0xc5, 0xe2, 0x30, 0xf0, 0x63, 0x26, 0x69, 0x5d, 0x85, + 0xce, 0x66, 0x1a, 0x45, 0xcc, 0xe7, 0x5d, 0x65, 0x2f, 0xcc, 0x64, 0x16, 0xd7, 0xdb, 0x2f, 0xf4, + 0xd2, 0x11, 0xbb, 0xc4, 0x31, 0x7f, 0xdc, 0x80, 0x76, 0xdf, 0x1d, 0xfa, 0xb6, 0x67, 0xb1, 0x23, + 0xe3, 0x35, 0x68, 0xd1, 0x96, 0x45, 0x44, 0x4a, 0xdd, 0x91, 0x2f, 0xb5, 0xa6, 0xbd, 0x99, 0xc5, + 0x8e, 0x6e, 0xfc, 0x8f, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0xdd, 0xa4, 0x23, 0x28, 0x91, + 0xbf, 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x03, 0x2c, 0x69, 0xc4, + 0xf2, 0x30, 0xde, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, + 0x7a, 0xbc, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xbc, 0x13, 0x8a, + 0xb3, 0xc3, 0xf1, 0xd2, 0x37, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, + 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, + 0x3b, 0xe6, 0x87, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, + 0xde, 0x7d, 0x09, 0xa4, 0x7e, 0x3d, 0x48, 0x9f, 0x9f, 0x14, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x6a, + 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0xae, 0x96, 0x80, 0x5a, 0x3b, 0x15, 0x28, + 0x21, 0x2f, 0xa0, 0xba, 0x5a, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x6a, 0x09, + 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0x3e, 0xd6, 0x61, 0x1e, 0x5d, 0x46, 0xb7, 0xb0, + 0xfe, 0x7e, 0x80, 0xf7, 0x01, 0xe8, 0x2e, 0xf5, 0x8d, 0xa6, 0xca, 0x34, 0xbe, 0x00, 0x4b, 0xc4, + 0x60, 0xd2, 0x75, 0x89, 0x8e, 0xd7, 0x25, 0xd5, 0x0f, 0x78, 0x41, 0x94, 0xc6, 0x49, 0x30, 0xda, + 0xb2, 0x13, 0x3b, 0x2b, 0xbe, 0x0a, 0x8e, 0x7c, 0x7d, 0x37, 0x55, 0x79, 0x31, 0x1e, 0x05, 0xc1, + 0x28, 0xbf, 0x97, 0x13, 0x14, 0x97, 0x48, 0xdc, 0x11, 0x0b, 0xd2, 0x44, 0x2c, 0x13, 0x19, 0x49, + 0xef, 0xa8, 0x1c, 0xd7, 0xc6, 0x4b, 0x2f, 0xf1, 0xc8, 0x28, 0x67, 0xe0, 0xca, 0x56, 0x5c, 0xe2, + 0x89, 0x17, 0xdd, 0x05, 0xe7, 0xf4, 0x0b, 0x37, 0xf3, 0x6f, 0x1a, 0x5c, 0xd8, 0xb5, 0xa3, 0xc4, + 0x1d, 0xb8, 0xa1, 0xed, 0x27, 0x3d, 0x96, 0xd8, 0x38, 0x06, 0xe5, 0xa1, 0xa6, 0xf6, 0x60, 0x0f, + 0x35, 0x77, 0x61, 0x61, 0xa8, 0xee, 0x2e, 0x1e, 0x70, 0x63, 0x50, 0x16, 0x57, 0x5e, 0x9d, 0x36, + 0x1e, 0xf8, 0xd5, 0xa9, 0xf9, 0x7d, 0x1d, 0x16, 0x4a, 0x4b, 0xe7, 0x89, 0x79, 0x67, 0x1d, 0xc0, + 0xcd, 0xc3, 0xe8, 0x84, 0xc3, 0x77, 0x35, 0xd6, 0x2c, 0x49, 0xa8, 0xee, 0x26, 0xaf, 0x71, 0xf6, + 0x9b, 0xbc, 0x1b, 0xd0, 0x09, 0x0b, 0x90, 0x4e, 0xd8, 0xfb, 0xd4, 0x40, 0x69, 0xc9, 0xa2, 0xe6, + 0xbb, 0xb0, 0x54, 0x59, 0xa1, 0xf0, 0x4a, 0x2e, 0x38, 0x64, 0x7e, 0x7e, 0x25, 0xc7, 0x09, 0x29, + 0x58, 0xf5, 0x72, 0xb0, 0x7a, 0xee, 0xb1, 0xfc, 0x04, 0x5e, 0x90, 0xe6, 0x0f, 0x74, 0x58, 0xae, + 0xcf, 0x2e, 0x8f, 0xab, 0xbb, 0xf7, 0xa0, 0x3b, 0x6e, 0x25, 0x3f, 0x37, 0xaf, 0x17, 0xd1, 0x9d, + 0xe7, 0xe1, 0xc7, 0xd5, 0xdd, 0x17, 0xb2, 0xe8, 0x96, 0x52, 0x9d, 0xf9, 0xcb, 0xdc, 0x3f, 0x79, + 0xa5, 0xf1, 0x98, 0xfa, 0xc7, 0x78, 0x0e, 0x16, 0x69, 0x98, 0xd2, 0xd3, 0x0f, 0x2a, 0x5c, 0x2b, + 0xfc, 0x62, 0xa5, 0x90, 0xd2, 0xfe, 0xb9, 0xc5, 0xec, 0x6f, 0xb5, 0x0c, 0x93, 0xbc, 0x7e, 0xfb, + 0x54, 0x61, 0x52, 0x44, 0x9a, 0x54, 0xd4, 0x48, 0x91, 0x96, 0xd7, 0x95, 0xff, 0x8d, 0xb4, 0xd3, + 0x23, 0x2d, 0xf7, 0xa5, 0x54, 0xe0, 0x99, 0xdf, 0x81, 0xb9, 0x2d, 0xe6, 0xf5, 0xe2, 0x61, 0xf6, + 0x36, 0xf5, 0x5c, 0x37, 0x8a, 0xe5, 0x17, 0x7c, 0x53, 0xd5, 0x17, 0x7c, 0x1b, 0x30, 0x2f, 0x1b, + 0x70, 0x96, 0xb7, 0x97, 0x1b, 0x97, 0xbe, 0xb1, 0x72, 0xe5, 0x79, 0xfa, 0xcf, 0xe7, 0xab, 0x15, + 0x27, 0xee, 0xb5, 0xf0, 0x3f, 0xa0, 0x2f, 0xfd, 0x27, 0x00, 0x00, 0xff, 0xff, 0x43, 0x77, 0x44, + 0x0c, 0x16, 0x3a, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index bb57752d1..a1a9fa274 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -54,6 +54,7 @@ message UserInfo{ string ex = 8; uint32 createTime = 9; int32 appMangerLevel = 10; + int32 globalRecvMsgOpt = 11; } message FriendInfo{ From 68365aa3b73b76cc5970cf2ffbeb9f49ad0bbc41 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 10:34:32 +0800 Subject: [PATCH 174/256] alter rtc timeout --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index e5ea56734..2f78bd49d 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -701,4 +701,4 @@ demo: imAPIURL: http://127.0.0.1:10002 rtc: - signalTimeout: 60 + signalTimeout: 35 From 956d745034974d1de25b7465df8c462765212031 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 11:13:10 +0800 Subject: [PATCH 175/256] alter rtc timeout --- pkg/proto/sdk_ws/ws.pb.go | 574 +++++++++++++++++++------------------- 1 file changed, 292 insertions(+), 282 deletions(-) diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 73adc0319..f508ee69b 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -40,7 +40,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_da68f45d757be640, []int{0} + return fileDescriptor_ws_3940a0d922f4ad30, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -165,7 +165,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_da68f45d757be640, []int{1} + return fileDescriptor_ws_3940a0d922f4ad30, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -277,7 +277,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_da68f45d757be640, []int{2} + return fileDescriptor_ws_3940a0d922f4ad30, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -343,6 +343,7 @@ type UserInfo struct { Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"` CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` + GlobalRecvMsgOpt int32 `protobuf:"varint,11,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -352,7 +353,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_da68f45d757be640, []int{3} + return fileDescriptor_ws_3940a0d922f4ad30, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -442,6 +443,13 @@ func (m *UserInfo) GetAppMangerLevel() int32 { return 0 } +func (m *UserInfo) GetGlobalRecvMsgOpt() int32 { + if m != nil { + return m.GlobalRecvMsgOpt + } + return 0 +} + type FriendInfo struct { OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` @@ -459,7 +467,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_da68f45d757be640, []int{4} + return fileDescriptor_ws_3940a0d922f4ad30, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -544,7 +552,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_da68f45d757be640, []int{5} + return fileDescriptor_ws_3940a0d922f4ad30, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -625,7 +633,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_da68f45d757be640, []int{6} + return fileDescriptor_ws_3940a0d922f4ad30, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -733,7 +741,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_da68f45d757be640, []int{7} + return fileDescriptor_ws_3940a0d922f4ad30, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -878,7 +886,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_da68f45d757be640, []int{8} + return fileDescriptor_ws_3940a0d922f4ad30, []int{8} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -989,7 +997,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_da68f45d757be640, []int{9} + return fileDescriptor_ws_3940a0d922f4ad30, []int{9} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1103,7 +1111,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_da68f45d757be640, []int{10} + return fileDescriptor_ws_3940a0d922f4ad30, []int{10} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1184,7 +1192,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_da68f45d757be640, []int{11} + return fileDescriptor_ws_3940a0d922f4ad30, []int{11} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1230,7 +1238,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_da68f45d757be640, []int{12} + return fileDescriptor_ws_3940a0d922f4ad30, []int{12} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1279,7 +1287,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_da68f45d757be640, []int{13} + return fileDescriptor_ws_3940a0d922f4ad30, []int{13} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1338,7 +1346,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_da68f45d757be640, []int{14} + return fileDescriptor_ws_3940a0d922f4ad30, []int{14} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1376,7 +1384,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_da68f45d757be640, []int{15} + return fileDescriptor_ws_3940a0d922f4ad30, []int{15} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1417,7 +1425,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_da68f45d757be640, []int{16} + return fileDescriptor_ws_3940a0d922f4ad30, []int{16} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1478,7 +1486,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_da68f45d757be640, []int{17} + return fileDescriptor_ws_3940a0d922f4ad30, []int{17} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1531,7 +1539,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_da68f45d757be640, []int{18} + return fileDescriptor_ws_3940a0d922f4ad30, []int{18} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1580,7 +1588,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_da68f45d757be640, []int{19} + return fileDescriptor_ws_3940a0d922f4ad30, []int{19} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1648,7 +1656,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_da68f45d757be640, []int{20} + return fileDescriptor_ws_3940a0d922f4ad30, []int{20} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1719,7 +1727,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_da68f45d757be640, []int{21} + return fileDescriptor_ws_3940a0d922f4ad30, []int{21} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1894,7 +1902,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_da68f45d757be640, []int{22} + return fileDescriptor_ws_3940a0d922f4ad30, []int{22} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1962,7 +1970,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_da68f45d757be640, []int{23} + return fileDescriptor_ws_3940a0d922f4ad30, []int{23} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2019,7 +2027,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_da68f45d757be640, []int{24} + return fileDescriptor_ws_3940a0d922f4ad30, []int{24} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2088,7 +2096,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_da68f45d757be640, []int{25} + return fileDescriptor_ws_3940a0d922f4ad30, []int{25} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2143,7 +2151,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_da68f45d757be640, []int{26} + return fileDescriptor_ws_3940a0d922f4ad30, []int{26} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2199,7 +2207,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_da68f45d757be640, []int{27} + return fileDescriptor_ws_3940a0d922f4ad30, []int{27} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2254,7 +2262,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_da68f45d757be640, []int{28} + return fileDescriptor_ws_3940a0d922f4ad30, []int{28} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2309,7 +2317,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_da68f45d757be640, []int{29} + return fileDescriptor_ws_3940a0d922f4ad30, []int{29} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2365,7 +2373,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_da68f45d757be640, []int{30} + return fileDescriptor_ws_3940a0d922f4ad30, []int{30} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2428,7 +2436,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_da68f45d757be640, []int{31} + return fileDescriptor_ws_3940a0d922f4ad30, []int{31} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2491,7 +2499,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_da68f45d757be640, []int{32} + return fileDescriptor_ws_3940a0d922f4ad30, []int{32} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2553,7 +2561,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_da68f45d757be640, []int{33} + return fileDescriptor_ws_3940a0d922f4ad30, []int{33} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2607,7 +2615,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_da68f45d757be640, []int{34} + return fileDescriptor_ws_3940a0d922f4ad30, []int{34} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2663,7 +2671,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_da68f45d757be640, []int{35} + return fileDescriptor_ws_3940a0d922f4ad30, []int{35} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2732,7 +2740,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_da68f45d757be640, []int{36} + return fileDescriptor_ws_3940a0d922f4ad30, []int{36} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2793,7 +2801,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_da68f45d757be640, []int{37} + return fileDescriptor_ws_3940a0d922f4ad30, []int{37} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2847,7 +2855,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_da68f45d757be640, []int{38} + return fileDescriptor_ws_3940a0d922f4ad30, []int{38} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2902,7 +2910,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_da68f45d757be640, []int{39} + return fileDescriptor_ws_3940a0d922f4ad30, []int{39} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2962,7 +2970,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_da68f45d757be640, []int{40} + return fileDescriptor_ws_3940a0d922f4ad30, []int{40} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3009,7 +3017,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_da68f45d757be640, []int{41} + return fileDescriptor_ws_3940a0d922f4ad30, []int{41} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3062,7 +3070,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_da68f45d757be640, []int{42} + return fileDescriptor_ws_3940a0d922f4ad30, []int{42} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3108,7 +3116,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_da68f45d757be640, []int{43} + return fileDescriptor_ws_3940a0d922f4ad30, []int{43} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3148,7 +3156,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_da68f45d757be640, []int{44} + return fileDescriptor_ws_3940a0d922f4ad30, []int{44} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3195,7 +3203,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_da68f45d757be640, []int{45} + return fileDescriptor_ws_3940a0d922f4ad30, []int{45} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3243,7 +3251,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_da68f45d757be640, []int{46} + return fileDescriptor_ws_3940a0d922f4ad30, []int{46} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3296,7 +3304,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_da68f45d757be640, []int{47} + return fileDescriptor_ws_3940a0d922f4ad30, []int{47} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3334,7 +3342,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_da68f45d757be640, []int{48} + return fileDescriptor_ws_3940a0d922f4ad30, []int{48} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3372,7 +3380,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_da68f45d757be640, []int{49} + return fileDescriptor_ws_3940a0d922f4ad30, []int{49} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3410,7 +3418,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_da68f45d757be640, []int{50} + return fileDescriptor_ws_3940a0d922f4ad30, []int{50} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3449,7 +3457,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_da68f45d757be640, []int{51} + return fileDescriptor_ws_3940a0d922f4ad30, []int{51} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3488,7 +3496,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_da68f45d757be640, []int{52} + return fileDescriptor_ws_3940a0d922f4ad30, []int{52} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3528,7 +3536,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_da68f45d757be640, []int{53} + return fileDescriptor_ws_3940a0d922f4ad30, []int{53} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3583,7 +3591,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_da68f45d757be640, []int{54} + return fileDescriptor_ws_3940a0d922f4ad30, []int{54} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3637,7 +3645,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_da68f45d757be640, []int{55} + return fileDescriptor_ws_3940a0d922f4ad30, []int{55} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3683,7 +3691,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_da68f45d757be640, []int{56} + return fileDescriptor_ws_3940a0d922f4ad30, []int{56} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3736,7 +3744,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_da68f45d757be640, []int{57} + return fileDescriptor_ws_3940a0d922f4ad30, []int{57} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4003,7 +4011,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_da68f45d757be640, []int{58} + return fileDescriptor_ws_3940a0d922f4ad30, []int{58} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4272,7 +4280,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_da68f45d757be640, []int{59} + return fileDescriptor_ws_3940a0d922f4ad30, []int{59} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4375,7 +4383,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_da68f45d757be640, []int{60} + return fileDescriptor_ws_3940a0d922f4ad30, []int{60} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4430,7 +4438,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_da68f45d757be640, []int{61} + return fileDescriptor_ws_3940a0d922f4ad30, []int{61} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4491,7 +4499,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_da68f45d757be640, []int{62} + return fileDescriptor_ws_3940a0d922f4ad30, []int{62} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4546,7 +4554,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_da68f45d757be640, []int{63} + return fileDescriptor_ws_3940a0d922f4ad30, []int{63} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4607,7 +4615,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_da68f45d757be640, []int{64} + return fileDescriptor_ws_3940a0d922f4ad30, []int{64} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4662,7 +4670,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_da68f45d757be640, []int{65} + return fileDescriptor_ws_3940a0d922f4ad30, []int{65} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4720,7 +4728,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_da68f45d757be640, []int{66} + return fileDescriptor_ws_3940a0d922f4ad30, []int{66} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4755,7 +4763,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_da68f45d757be640, []int{67} + return fileDescriptor_ws_3940a0d922f4ad30, []int{67} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4823,7 +4831,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_da68f45d757be640, []int{68} + return fileDescriptor_ws_3940a0d922f4ad30, []int{68} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4877,7 +4885,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_da68f45d757be640, []int{69} + return fileDescriptor_ws_3940a0d922f4ad30, []int{69} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4928,7 +4936,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_da68f45d757be640, []int{70} + return fileDescriptor_ws_3940a0d922f4ad30, []int{70} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4963,7 +4971,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_da68f45d757be640, []int{71} + return fileDescriptor_ws_3940a0d922f4ad30, []int{71} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5028,7 +5036,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_da68f45d757be640, []int{72} + return fileDescriptor_ws_3940a0d922f4ad30, []int{72} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5062,7 +5070,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_da68f45d757be640, []int{73} + return fileDescriptor_ws_3940a0d922f4ad30, []int{73} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5122,7 +5130,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_da68f45d757be640, []int{74} + return fileDescriptor_ws_3940a0d922f4ad30, []int{74} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5238,213 +5246,215 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_da68f45d757be640) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_3940a0d922f4ad30) } -var fileDescriptor_ws_da68f45d757be640 = []byte{ - // 3274 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ws_3940a0d922f4ad30 = []byte{ + // 3298 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x24, 0x57, - 0x11, 0xa6, 0x7b, 0x3c, 0x63, 0x4f, 0x8d, 0x7f, 0x7b, 0x37, 0xce, 0x60, 0x36, 0x8b, 0xe9, 0x58, - 0x21, 0x04, 0xd8, 0x44, 0x09, 0x91, 0x20, 0x3f, 0x8b, 0xfc, 0x93, 0xfd, 0x49, 0xd6, 0x5e, 0xa7, - 0x67, 0x97, 0x20, 0x82, 0x14, 0xda, 0xd3, 0xcf, 0xe3, 0x5e, 0xf7, 0x74, 0xb7, 0xfb, 0xc7, 0xbb, - 0xcb, 0x05, 0x29, 0x48, 0x88, 0x1b, 0x27, 0x38, 0x70, 0x41, 0xe2, 0x82, 0x40, 0x51, 0x84, 0x10, - 0x48, 0x1c, 0x10, 0xe2, 0xc0, 0x8d, 0x0b, 0x48, 0x5c, 0x10, 0x37, 0xce, 0x5c, 0x39, 0x20, 0x21, - 0x81, 0x5e, 0xd5, 0xeb, 0xee, 0xf7, 0xba, 0x7b, 0xec, 0xd9, 0x91, 0x95, 0xdd, 0x68, 0xb9, 0x4d, - 0x55, 0xbf, 0xaa, 0x57, 0xaf, 0xbe, 0x7a, 0xaf, 0xea, 0xfd, 0x0c, 0x2c, 0xc4, 0xce, 0xe1, 0x7b, - 0x77, 0xe3, 0xe7, 0xef, 0xc6, 0x97, 0xc2, 0x28, 0x48, 0x02, 0x63, 0x29, 0x66, 0xd1, 0x31, 0x8b, - 0xde, 0xb3, 0x43, 0xf7, 0xbd, 0xd0, 0x8e, 0xec, 0x61, 0x6c, 0xfe, 0x4b, 0x87, 0xf6, 0xd5, 0x28, - 0x48, 0xc3, 0xeb, 0xfe, 0x7e, 0x60, 0x74, 0x61, 0x7a, 0x80, 0xc4, 0x56, 0x57, 0x5b, 0xd5, 0x9e, - 0x6d, 0x5b, 0x19, 0x69, 0x5c, 0x80, 0x36, 0xfe, 0xdc, 0xb1, 0x87, 0xac, 0xab, 0xe3, 0xb7, 0x82, - 0x61, 0x98, 0x30, 0xeb, 0x07, 0x89, 0xbb, 0xef, 0xf6, 0xed, 0xc4, 0x0d, 0xfc, 0x6e, 0x03, 0x1b, - 0x28, 0x3c, 0xde, 0xc6, 0xf5, 0x93, 0x28, 0x70, 0xd2, 0x3e, 0xb6, 0x99, 0xa2, 0x36, 0x32, 0x8f, - 0xf7, 0xbf, 0x6f, 0xf7, 0xd9, 0x6d, 0xeb, 0x46, 0xb7, 0x49, 0xfd, 0x0b, 0xd2, 0x58, 0x85, 0x4e, - 0x70, 0xd7, 0x67, 0xd1, 0xed, 0x98, 0x45, 0xd7, 0xb7, 0xba, 0x2d, 0xfc, 0x2a, 0xb3, 0x8c, 0x8b, - 0x00, 0xfd, 0x88, 0xd9, 0x09, 0xbb, 0xe5, 0x0e, 0x59, 0x77, 0x7a, 0x55, 0x7b, 0x76, 0xce, 0x92, - 0x38, 0x5c, 0xc3, 0x90, 0x0d, 0xf7, 0x58, 0xb4, 0x19, 0xa4, 0x7e, 0xd2, 0x9d, 0xc1, 0x06, 0x32, - 0xcb, 0x98, 0x07, 0x9d, 0xdd, 0xeb, 0xb6, 0x51, 0xb5, 0xce, 0xee, 0x19, 0xcb, 0xd0, 0x8a, 0x13, - 0x3b, 0x49, 0xe3, 0x2e, 0xac, 0x6a, 0xcf, 0x36, 0x2d, 0x41, 0x19, 0x6b, 0x30, 0x87, 0x7a, 0x83, - 0xcc, 0x9a, 0x0e, 0x8a, 0xa8, 0xcc, 0xdc, 0x63, 0xb7, 0xee, 0x87, 0xac, 0x3b, 0x8b, 0x0a, 0x0a, - 0x86, 0xf9, 0x37, 0x1d, 0xce, 0xa1, 0xdf, 0xb7, 0xd1, 0x80, 0x2b, 0xa9, 0xe7, 0x9d, 0x82, 0xc0, - 0x32, 0xb4, 0x52, 0xea, 0x8e, 0xdc, 0x2f, 0x28, 0xde, 0x4f, 0x14, 0x78, 0xec, 0x06, 0x3b, 0x66, - 0x1e, 0x3a, 0xbe, 0x69, 0x15, 0x0c, 0x63, 0x05, 0x66, 0xee, 0x04, 0xae, 0x8f, 0x3e, 0x99, 0xc2, - 0x8f, 0x39, 0xcd, 0xbf, 0xf9, 0x6e, 0xff, 0xd0, 0xe7, 0x90, 0x92, 0xbb, 0x73, 0x5a, 0x46, 0xa2, - 0xa5, 0x22, 0xf1, 0x0c, 0xcc, 0xdb, 0x61, 0xb8, 0x6d, 0xfb, 0x03, 0x16, 0x51, 0xa7, 0xd3, 0xa8, - 0xb7, 0xc4, 0xe5, 0x78, 0xf0, 0x9e, 0x7a, 0x41, 0x1a, 0xf5, 0x19, 0xba, 0xbb, 0x69, 0x49, 0x1c, - 0xae, 0x27, 0x08, 0x59, 0x24, 0xb9, 0x91, 0x3c, 0x5f, 0xe2, 0x0a, 0x54, 0x20, 0x47, 0x85, 0xe3, - 0x98, 0x26, 0xec, 0x0d, 0xdf, 0xc1, 0x41, 0x75, 0x04, 0x8e, 0x05, 0xcb, 0xfc, 0x9e, 0x06, 0xf3, - 0xbb, 0xe9, 0x9e, 0xe7, 0xf6, 0x51, 0x05, 0x77, 0x6b, 0xe1, 0x3c, 0x4d, 0x71, 0x9e, 0xec, 0x02, - 0x7d, 0xb4, 0x0b, 0x1a, 0xaa, 0x0b, 0x96, 0xa1, 0x35, 0x60, 0xbe, 0xc3, 0x22, 0xe1, 0x52, 0x41, - 0x09, 0x53, 0x9b, 0x99, 0xa9, 0xe6, 0x8f, 0x74, 0x98, 0xf9, 0x88, 0x4d, 0x58, 0x85, 0x4e, 0x78, - 0x10, 0xf8, 0x6c, 0x27, 0xe5, 0x61, 0x25, 0x6c, 0x91, 0x59, 0xc6, 0x79, 0x68, 0xee, 0xb9, 0x51, - 0x72, 0x80, 0xb8, 0xce, 0x59, 0x44, 0x70, 0x2e, 0x1b, 0xda, 0x2e, 0x81, 0xd9, 0xb6, 0x88, 0x10, - 0x03, 0x9a, 0xc9, 0x7d, 0xaf, 0xce, 0xb1, 0x76, 0x65, 0x8e, 0x55, 0x63, 0x03, 0xea, 0x62, 0xc3, - 0xfc, 0xb7, 0x06, 0x70, 0x25, 0x72, 0x99, 0xef, 0xa0, 0x6b, 0x4a, 0x93, 0x5b, 0xab, 0x4e, 0xee, - 0x65, 0x68, 0x45, 0x6c, 0x68, 0x47, 0x87, 0x59, 0xf0, 0x13, 0x55, 0x32, 0xa8, 0x51, 0x31, 0xe8, - 0x55, 0x80, 0x7d, 0xec, 0x87, 0xeb, 0x41, 0x57, 0x75, 0x5e, 0xfc, 0xd4, 0xa5, 0xca, 0x32, 0x78, - 0x29, 0x43, 0xc9, 0x92, 0x9a, 0xf3, 0x99, 0x65, 0x3b, 0x8e, 0x08, 0xe0, 0x26, 0xcd, 0xac, 0x9c, - 0x51, 0x13, 0xbf, 0xad, 0x13, 0xe2, 0x77, 0x3a, 0x0f, 0x8a, 0x7f, 0x6a, 0xd0, 0xde, 0xf0, 0xec, - 0xfe, 0xe1, 0x98, 0x43, 0x57, 0x87, 0xa8, 0x57, 0x86, 0x78, 0x15, 0xe6, 0xf6, 0xb8, 0xba, 0x6c, - 0x08, 0xe8, 0x85, 0xce, 0x8b, 0x9f, 0xa9, 0x19, 0xa5, 0x3a, 0x29, 0x2c, 0x55, 0x4e, 0x1d, 0xee, - 0xd4, 0xe9, 0xc3, 0x6d, 0x9e, 0x30, 0xdc, 0x56, 0x3e, 0xdc, 0xbf, 0xe8, 0x30, 0x8b, 0x0b, 0x9d, - 0xc5, 0x8e, 0x52, 0x16, 0x27, 0xc6, 0xeb, 0x30, 0x93, 0x66, 0xa6, 0x6a, 0xe3, 0x9a, 0x9a, 0x8b, - 0x18, 0xaf, 0x88, 0x65, 0x15, 0xe5, 0x75, 0x94, 0xbf, 0x50, 0x23, 0x9f, 0xe7, 0x34, 0xab, 0x68, - 0xce, 0x53, 0xd0, 0x81, 0xed, 0x3b, 0x1e, 0xb3, 0x58, 0x9c, 0x7a, 0x89, 0x58, 0x2d, 0x15, 0x1e, - 0x45, 0xda, 0xd1, 0x76, 0x3c, 0x10, 0x09, 0x4a, 0x50, 0xdc, 0x3b, 0xd4, 0x8e, 0x7f, 0xa2, 0xa1, - 0x17, 0x0c, 0x3e, 0x51, 0x23, 0x76, 0x84, 0x08, 0xd1, 0xb4, 0xca, 0xc8, 0xa2, 0x4f, 0xe1, 0x35, - 0x0a, 0x04, 0x85, 0xc7, 0x21, 0x26, 0x1a, 0x15, 0x50, 0x66, 0x92, 0x38, 0xe5, 0xc4, 0x64, 0xfe, - 0xbd, 0x01, 0x73, 0x34, 0x7d, 0x32, 0xa7, 0x5e, 0xe4, 0x71, 0x1e, 0x0c, 0x95, 0x28, 0x92, 0x38, - 0xdc, 0x0a, 0x4e, 0xed, 0xa8, 0x0b, 0x8d, 0xc2, 0xe3, 0xa1, 0xc8, 0xe9, 0x2b, 0xca, 0x82, 0x23, - 0xb3, 0xb2, 0x5e, 0xae, 0xca, 0x0b, 0x8f, 0xc4, 0xe1, 0x4b, 0x59, 0x12, 0x28, 0xd1, 0x91, 0xd3, - 0x5c, 0x36, 0x09, 0xf2, 0xfe, 0x29, 0x3e, 0x24, 0x0e, 0xf7, 0x6f, 0x12, 0x64, 0x7d, 0x93, 0x93, - 0x0a, 0x06, 0x69, 0x16, 0xfd, 0x52, 0x2a, 0xc9, 0xe9, 0x0a, 0xaa, 0xed, 0x13, 0x51, 0x05, 0x05, - 0x55, 0x75, 0x72, 0x75, 0x2a, 0x93, 0x6b, 0x0d, 0xe6, 0x48, 0x4f, 0x16, 0xf4, 0xb3, 0x94, 0xea, - 0x15, 0xa6, 0x1a, 0x1b, 0x73, 0xe5, 0xd8, 0x50, 0xd1, 0x9d, 0x1f, 0x81, 0xee, 0x42, 0x8e, 0xee, - 0xaf, 0x74, 0x80, 0x2d, 0x16, 0xda, 0x51, 0x32, 0x64, 0x7e, 0xc2, 0x87, 0xe7, 0xe4, 0x54, 0x0e, - 0xae, 0xc2, 0x93, 0xf3, 0x84, 0xae, 0xe6, 0x09, 0x03, 0xa6, 0xd0, 0xe1, 0x84, 0x26, 0xfe, 0xe6, - 0xce, 0x0c, 0xed, 0x88, 0xb4, 0x51, 0x90, 0xe7, 0x34, 0xcf, 0x03, 0x41, 0xe4, 0x88, 0xcc, 0xd1, - 0xb4, 0x88, 0xe0, 0x93, 0xbf, 0xe8, 0x0f, 0x0b, 0x9a, 0x16, 0xad, 0xeb, 0x2a, 0xf7, 0xd4, 0x1a, - 0xec, 0x39, 0x58, 0x8c, 0xd3, 0xbd, 0x62, 0x70, 0x3b, 0xe9, 0x50, 0x84, 0x7b, 0x85, 0xcf, 0x9d, - 0x4a, 0xc5, 0x19, 0x6f, 0x44, 0xa9, 0xa6, 0x60, 0x94, 0xab, 0x02, 0xf3, 0x03, 0x1d, 0x16, 0x6f, - 0x46, 0x03, 0xdb, 0x77, 0xbf, 0x8d, 0xe5, 0x26, 0x2e, 0xe0, 0x93, 0xa4, 0xdc, 0x55, 0xe8, 0x30, - 0x7f, 0xe0, 0xb9, 0xf1, 0xc1, 0x4e, 0xe1, 0x37, 0x99, 0x25, 0x3b, 0x7b, 0x6a, 0x54, 0x52, 0x6e, - 0x2a, 0x49, 0x79, 0x19, 0x5a, 0xc3, 0x60, 0xcf, 0xf5, 0xb2, 0xb8, 0x17, 0x14, 0xc6, 0x3c, 0xf3, - 0x18, 0x66, 0xe7, 0x3c, 0xe6, 0x33, 0x46, 0x91, 0xa8, 0x67, 0x6a, 0x13, 0x75, 0x5b, 0x4e, 0xd4, - 0xaa, 0xe3, 0xa1, 0xe2, 0x78, 0x72, 0x57, 0x27, 0x77, 0xd7, 0x1f, 0x34, 0x58, 0x2c, 0xdc, 0x4d, - 0x35, 0xe8, 0x48, 0x77, 0x95, 0x23, 0x50, 0xaf, 0x89, 0xc0, 0x3c, 0x6e, 0x1a, 0x72, 0xdc, 0xf0, - 0x48, 0x0b, 0x62, 0x57, 0xaa, 0xf7, 0x73, 0x9a, 0xf7, 0xe6, 0x31, 0x5b, 0x72, 0x16, 0x51, 0x52, - 0xd5, 0xdd, 0x52, 0xaa, 0xee, 0x72, 0x1e, 0xfd, 0xad, 0x06, 0xe7, 0x39, 0xca, 0x95, 0x61, 0xdc, - 0x84, 0xc5, 0xa0, 0x14, 0x09, 0x22, 0xd1, 0x3c, 0x5d, 0x93, 0x28, 0xca, 0x41, 0x63, 0x55, 0x84, - 0xb9, 0x42, 0xa7, 0xd4, 0x89, 0xc8, 0x3c, 0x75, 0x0a, 0xcb, 0xf6, 0x58, 0x15, 0x61, 0xf3, 0x77, - 0x1a, 0x2c, 0x52, 0x6a, 0x93, 0xe6, 0xf9, 0x99, 0x9b, 0xfd, 0x0e, 0x9c, 0x2f, 0xf7, 0x7c, 0xc3, - 0x8d, 0x93, 0xae, 0xbe, 0xda, 0x18, 0xd7, 0xf4, 0x5a, 0x05, 0x7c, 0xae, 0x3d, 0xb9, 0x9b, 0x7a, - 0xde, 0x36, 0x8b, 0x63, 0x7b, 0xc0, 0x36, 0xee, 0xf7, 0xd8, 0x11, 0xff, 0x60, 0xb1, 0xa3, 0x91, - 0x31, 0xc4, 0xeb, 0x1c, 0x2c, 0x14, 0xdc, 0xc0, 0xcf, 0x43, 0x48, 0x66, 0xf1, 0x69, 0x15, 0x93, - 0x9e, 0x6e, 0x63, 0xb5, 0xc1, 0x53, 0xa8, 0x20, 0x8d, 0x6f, 0xc1, 0x2c, 0xe6, 0x70, 0xd1, 0x4d, - 0x77, 0x0a, 0x07, 0xf0, 0x5a, 0x6d, 0xd5, 0x50, 0x6b, 0x15, 0x55, 0x03, 0x82, 0x7e, 0xc3, 0x4f, - 0xa2, 0xfb, 0x96, 0xa2, 0x71, 0xe5, 0x5d, 0x58, 0xaa, 0x34, 0x31, 0x16, 0xa1, 0x71, 0xc8, 0xee, - 0x8b, 0x71, 0xf0, 0x9f, 0xc6, 0x0b, 0xd0, 0x3c, 0xb6, 0xbd, 0x94, 0x09, 0xf4, 0x57, 0x6a, 0x2c, - 0x10, 0x36, 0x5b, 0xd4, 0xf0, 0x15, 0xfd, 0xcb, 0x9a, 0xf9, 0x74, 0x3e, 0x30, 0x79, 0x8c, 0x9a, - 0x32, 0x46, 0xf3, 0x2d, 0xe8, 0x6c, 0xc7, 0x83, 0x2d, 0x3b, 0xb1, 0xb1, 0xe1, 0x6b, 0xd0, 0x19, - 0x16, 0x24, 0x36, 0xae, 0xef, 0x4f, 0x08, 0x59, 0x72, 0x73, 0xf3, 0xcf, 0x3a, 0x74, 0xeb, 0x5d, - 0x11, 0x87, 0xdc, 0x06, 0x16, 0x45, 0x9b, 0x81, 0xc3, 0x70, 0x68, 0x4d, 0x2b, 0x23, 0x39, 0x76, - 0x2c, 0x8a, 0x78, 0x0e, 0x13, 0x45, 0x36, 0x51, 0xc6, 0x25, 0x98, 0xf2, 0x32, 0x58, 0x4e, 0xb6, - 0x02, 0xdb, 0x19, 0x43, 0x58, 0x44, 0xef, 0x4a, 0x03, 0x12, 0x98, 0xad, 0x8f, 0x8d, 0x59, 0x1c, - 0x12, 0x68, 0x92, 0x0e, 0x02, 0xae, 0xa2, 0x7a, 0xa5, 0x0f, 0x4f, 0xd4, 0x36, 0xad, 0x01, 0xf0, - 0x4b, 0x2a, 0x80, 0x17, 0x47, 0x0f, 0xa5, 0x0c, 0x62, 0x08, 0xc6, 0x55, 0x96, 0x6c, 0xdb, 0xf7, - 0xd6, 0x7d, 0x67, 0xdb, 0xf5, 0x7b, 0xec, 0x88, 0x47, 0xfb, 0x2a, 0x74, 0xc4, 0xf6, 0x3c, 0x87, - 0xa9, 0x6d, 0xc9, 0xac, 0x91, 0xbb, 0xf6, 0xd2, 0x7c, 0x68, 0x54, 0xe6, 0x83, 0x79, 0x19, 0x66, - 0xe5, 0xee, 0x30, 0x89, 0xd8, 0xf7, 0x7a, 0xec, 0x08, 0x07, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0xd8, - 0x42, 0xec, 0x0d, 0x04, 0x65, 0xfe, 0x49, 0x87, 0x73, 0x15, 0x93, 0xe3, 0xf0, 0x41, 0xf5, 0xc8, - 0xf1, 0xd2, 0x18, 0x15, 0x2f, 0x53, 0x4a, 0xbc, 0x1c, 0xc2, 0x12, 0x81, 0x24, 0x75, 0xdd, 0x6d, - 0x62, 0x00, 0xbc, 0x5e, 0x57, 0xaa, 0x57, 0x8d, 0x14, 0xd8, 0x4b, 0x5c, 0x02, 0xbf, 0xaa, 0x77, - 0x85, 0xc1, 0x72, 0x7d, 0xe3, 0x1a, 0xf8, 0x5f, 0x56, 0xe1, 0xff, 0x74, 0x1d, 0xfc, 0xb2, 0x25, - 0x12, 0xfe, 0x47, 0xb0, 0xc0, 0x17, 0xd5, 0x1e, 0xf3, 0x9d, 0xed, 0x78, 0x80, 0x8e, 0x5c, 0x85, - 0x0e, 0xc9, 0x6f, 0xc7, 0x83, 0x62, 0xeb, 0x26, 0xb1, 0x78, 0x8b, 0xbe, 0xe7, 0xf2, 0xc5, 0x13, - 0x5b, 0x88, 0x45, 0x4f, 0x62, 0xf1, 0x04, 0x19, 0x33, 0x71, 0x92, 0xc1, 0xbd, 0xdb, 0xb0, 0x72, - 0xda, 0x7c, 0xbf, 0x05, 0xd3, 0x22, 0x1a, 0x31, 0x29, 0xf2, 0xdd, 0x72, 0xbe, 0xac, 0x12, 0x45, - 0x75, 0x6d, 0xff, 0xb8, 0x08, 0x2f, 0xa2, 0xe4, 0x63, 0xa4, 0x86, 0x7a, 0x8c, 0x54, 0xb2, 0x69, - 0xaa, 0x6a, 0x53, 0x69, 0x5c, 0xcd, 0xea, 0xb8, 0x78, 0x19, 0x87, 0x95, 0xcd, 0xae, 0x67, 0x27, - 0xfb, 0x41, 0x34, 0x14, 0x9b, 0xdf, 0xa6, 0x55, 0xe1, 0xf3, 0xd2, 0x91, 0x78, 0x79, 0xed, 0x4f, - 0x29, 0xbc, 0xc4, 0xe5, 0x95, 0x36, 0x71, 0xb2, 0x3d, 0x00, 0x9d, 0x3a, 0xa8, 0x4c, 0xb2, 0x2d, - 0x8e, 0xdd, 0xc0, 0xc7, 0x2a, 0x94, 0x4a, 0x7d, 0x99, 0xc5, 0x47, 0x3e, 0x8c, 0x07, 0x57, 0xa2, - 0x60, 0x28, 0xce, 0x1e, 0x32, 0x12, 0x47, 0x1e, 0xf8, 0x49, 0x56, 0xc1, 0x76, 0x48, 0x56, 0x62, - 0x71, 0x59, 0x41, 0x62, 0x9d, 0x3f, 0x6b, 0x65, 0x24, 0x8f, 0xa5, 0x98, 0x1d, 0x89, 0xe2, 0x9d, - 0xff, 0x54, 0x90, 0x5b, 0x50, 0x91, 0x2b, 0x55, 0x63, 0x8b, 0xf8, 0x55, 0xae, 0xc6, 0x8a, 0x12, - 0x67, 0x49, 0x29, 0x71, 0xd6, 0x61, 0x3a, 0x08, 0xf9, 0xf4, 0x8f, 0xbb, 0x06, 0x4e, 0x97, 0xcf, - 0x8e, 0x5e, 0xa0, 0x2e, 0xdd, 0xa4, 0x96, 0x34, 0x31, 0x32, 0x39, 0xe3, 0x06, 0x2c, 0x04, 0xfb, - 0xfb, 0x9e, 0xeb, 0xb3, 0xdd, 0x34, 0x3e, 0xc0, 0x4d, 0xf2, 0x39, 0x0c, 0x76, 0xb3, 0xae, 0x88, - 0x50, 0x5b, 0x5a, 0x65, 0x51, 0x5e, 0xf9, 0xd9, 0x09, 0x6d, 0x72, 0x70, 0x81, 0x3b, 0x8f, 0x0b, - 0x9c, 0xc2, 0xc3, 0xf3, 0x38, 0x69, 0xa1, 0x7f, 0x02, 0x1d, 0x27, 0xb3, 0x56, 0x5e, 0x81, 0x59, - 0xd9, 0xd8, 0x9a, 0x89, 0x79, 0x5e, 0x9e, 0x98, 0x33, 0xf2, 0xbc, 0xfb, 0xa1, 0x06, 0x0b, 0x25, - 0x33, 0x79, 0xeb, 0xc4, 0x4d, 0x3c, 0x26, 0x34, 0x10, 0xc1, 0x77, 0x3a, 0x0e, 0x8b, 0xfb, 0x62, - 0x22, 0xe0, 0x6f, 0x51, 0x33, 0x36, 0xf2, 0xf3, 0x2b, 0x13, 0x66, 0xdd, 0x9b, 0x3d, 0xae, 0xa8, - 0x17, 0xa4, 0xbe, 0x93, 0x9f, 0x41, 0x4b, 0x3c, 0x1e, 0x88, 0xee, 0xcd, 0xde, 0x86, 0xed, 0x0c, - 0x18, 0x9d, 0x14, 0x37, 0xd1, 0x26, 0x95, 0x69, 0x3a, 0x30, 0x73, 0xcb, 0x0d, 0xe3, 0xcd, 0x60, - 0x38, 0xe4, 0x70, 0x3a, 0x2c, 0xe1, 0x35, 0xb9, 0x86, 0x83, 0x17, 0x14, 0xf7, 0x8c, 0xc3, 0xf6, - 0xed, 0xd4, 0x4b, 0x78, 0xd3, 0x6c, 0xfa, 0x4b, 0x2c, 0x3c, 0x23, 0x8d, 0x03, 0x7f, 0x8b, 0xa4, - 0xc9, 0x4e, 0x89, 0x63, 0xfe, 0x51, 0x87, 0x45, 0x5c, 0xdd, 0x36, 0x31, 0x78, 0x1c, 0x14, 0x7a, - 0x11, 0x9a, 0x38, 0x99, 0x45, 0x75, 0x78, 0xf2, 0xe9, 0x07, 0x35, 0x35, 0x2e, 0x43, 0x2b, 0x08, - 0xb1, 0xa4, 0xa4, 0xa5, 0xef, 0x99, 0x51, 0x42, 0xea, 0x71, 0xb4, 0x25, 0xa4, 0x8c, 0x2b, 0x00, - 0xc3, 0xa2, 0x82, 0xa4, 0x42, 0x60, 0x5c, 0x1d, 0x92, 0x24, 0x77, 0x6e, 0x9e, 0xe3, 0xf2, 0x33, - 0xe9, 0x86, 0xa5, 0x32, 0x8d, 0x1d, 0x98, 0x47, 0xb3, 0x6f, 0x66, 0xc7, 0x60, 0x88, 0xc1, 0xf8, - 0x3d, 0x96, 0xa4, 0xcd, 0x9f, 0x6a, 0xc2, 0x8d, 0xfc, 0x6b, 0x8f, 0x91, 0xef, 0x0b, 0x97, 0x68, - 0x13, 0xb9, 0x64, 0x05, 0x66, 0x86, 0xa9, 0x74, 0x2a, 0xd7, 0xb0, 0x72, 0xba, 0x80, 0xa8, 0x31, - 0x36, 0x44, 0xe6, 0xcf, 0x34, 0xe8, 0xbe, 0x19, 0xb8, 0x3e, 0x7e, 0x58, 0x0f, 0x43, 0x4f, 0x5c, - 0x9c, 0x4c, 0x8c, 0xf9, 0x57, 0xa1, 0x6d, 0x93, 0x1a, 0x3f, 0x11, 0xb0, 0x8f, 0x71, 0xd2, 0x56, - 0xc8, 0x48, 0x87, 0x26, 0x0d, 0xf9, 0xd0, 0xc4, 0xfc, 0x50, 0x83, 0x79, 0x72, 0xca, 0xdb, 0xa9, - 0x9b, 0x4c, 0x6c, 0xdf, 0x06, 0xcc, 0x1c, 0xa5, 0x6e, 0x32, 0x41, 0x54, 0xe6, 0x72, 0xd5, 0x78, - 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0x4b, 0x0d, 0x2e, 0x94, 0xdd, 0xba, 0xde, 0xef, 0xb3, 0xf0, 0x61, - 0x4e, 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, 0x6b, 0xb2, 0xc5, 0xee, 0xb0, 0xfe, 0xa3, - 0x6b, 0xf2, 0x77, 0x75, 0xf8, 0xe4, 0xd5, 0x7c, 0xe2, 0xdd, 0x8a, 0x6c, 0x3f, 0xde, 0x67, 0x51, - 0xf4, 0x10, 0xed, 0xbd, 0x01, 0x73, 0x3e, 0xbb, 0x5b, 0xd8, 0x24, 0xa6, 0xe3, 0xb8, 0x6a, 0x54, - 0xe1, 0xf1, 0xd6, 0x2e, 0xf3, 0x3f, 0x1a, 0x2c, 0x92, 0x9e, 0xb7, 0xdc, 0xfe, 0xe1, 0x43, 0x1c, - 0xfc, 0x0e, 0xcc, 0x1f, 0xa2, 0x05, 0x9c, 0x9a, 0x60, 0xd9, 0x2e, 0x49, 0x8f, 0x39, 0xfc, 0xff, - 0x6a, 0xb0, 0x44, 0x8a, 0xae, 0xfb, 0xc7, 0xee, 0xc3, 0x0c, 0xd6, 0x5d, 0x58, 0x70, 0xc9, 0x84, - 0x09, 0x1d, 0x50, 0x16, 0x1f, 0xd3, 0x03, 0xbf, 0xd1, 0x60, 0x81, 0x34, 0xbd, 0xe1, 0x27, 0x2c, - 0x9a, 0x78, 0xfc, 0xd7, 0xa0, 0xc3, 0xfc, 0x24, 0xb2, 0xfd, 0x49, 0x56, 0x48, 0x59, 0x74, 0xcc, - 0x45, 0xf2, 0x43, 0x0d, 0x0c, 0x54, 0xb5, 0xe5, 0xc6, 0x43, 0x37, 0x8e, 0x1f, 0x22, 0x74, 0xe3, - 0x19, 0xfc, 0x63, 0x1d, 0xce, 0x4b, 0x5a, 0xb6, 0xd3, 0xe4, 0x51, 0x37, 0xd9, 0xd8, 0x82, 0x36, - 0xaf, 0x11, 0xe4, 0xdb, 0xc8, 0x71, 0x3b, 0x2a, 0x04, 0x79, 0x15, 0x8b, 0x44, 0x8f, 0xf5, 0x03, - 0xdf, 0x89, 0xb1, 0x38, 0x9a, 0xb3, 0x14, 0x1e, 0x5f, 0x86, 0x56, 0x24, 0x35, 0x9b, 0xb6, 0xdf, - 0x67, 0xde, 0x63, 0xe3, 0x22, 0xf3, 0x17, 0x1a, 0xcc, 0x53, 0x93, 0x47, 0x7f, 0xc8, 0x3c, 0xd7, - 0x53, 0x20, 0x7f, 0x6c, 0x50, 0xe2, 0xe1, 0xb5, 0x2c, 0x69, 0x91, 0xeb, 0xea, 0x47, 0x37, 0xb4, - 0xae, 0x41, 0xa7, 0x7f, 0x60, 0xfb, 0x83, 0x89, 0x82, 0x4b, 0x16, 0x35, 0x13, 0x78, 0x52, 0x3e, - 0x80, 0xdf, 0xa4, 0x4f, 0x38, 0xfc, 0x97, 0x4a, 0x43, 0x39, 0xf1, 0xb5, 0xc1, 0x83, 0x39, 0xfd, - 0x10, 0x96, 0xe8, 0xd6, 0x57, 0xaa, 0x09, 0x8d, 0x2e, 0x4c, 0xdb, 0x0e, 0x1d, 0x43, 0x68, 0x28, - 0x94, 0x91, 0xea, 0x7d, 0xbe, 0x78, 0xb2, 0x55, 0xdc, 0xe7, 0x5f, 0x04, 0xb0, 0x1d, 0xe7, 0x9d, - 0x20, 0x72, 0x5c, 0x3f, 0x2b, 0xf0, 0x25, 0x8e, 0xf9, 0x26, 0xcc, 0x5e, 0x89, 0x82, 0xe1, 0x2d, - 0xe9, 0xfe, 0xf6, 0xc4, 0x1b, 0x66, 0xf9, 0xee, 0x57, 0x57, 0xef, 0x7e, 0xcd, 0x6f, 0xc2, 0x13, - 0x15, 0xc3, 0xd1, 0x59, 0x9b, 0x74, 0x2d, 0x9d, 0x75, 0x22, 0x42, 0xa6, 0xee, 0x5c, 0x4e, 0xb6, - 0xc5, 0x52, 0x84, 0xcc, 0xf7, 0x35, 0x78, 0xaa, 0xa2, 0x7e, 0x3d, 0x0c, 0xa3, 0xe0, 0x58, 0x60, - 0x72, 0x16, 0xdd, 0xa8, 0xc5, 0xaf, 0x5e, 0x2e, 0x7e, 0x6b, 0x8d, 0x50, 0x0a, 0xf6, 0x8f, 0xc0, - 0x88, 0x9f, 0x6b, 0xb0, 0x20, 0x8c, 0x70, 0x1c, 0xd1, 0xed, 0xcb, 0xd0, 0xa2, 0x27, 0x2d, 0xa2, - 0xc3, 0xa7, 0x6a, 0x3b, 0xcc, 0x9e, 0xe2, 0x58, 0xa2, 0x71, 0x35, 0x22, 0xf5, 0xba, 0x19, 0xf5, - 0x95, 0x3c, 0xd8, 0xc7, 0x7e, 0x74, 0x22, 0x04, 0xcc, 0xaf, 0x67, 0xc1, 0xbc, 0xc5, 0x3c, 0x76, - 0x96, 0x3e, 0x32, 0x6f, 0xc3, 0x3c, 0xbe, 0xaf, 0x29, 0x7c, 0x70, 0x26, 0x6a, 0xdf, 0x81, 0x45, - 0x54, 0x7b, 0xe6, 0xf6, 0xe6, 0xb3, 0x83, 0xfb, 0x47, 0x5e, 0x4a, 0xce, 0x44, 0xfb, 0x17, 0xe1, - 0x5c, 0xe6, 0xfb, 0xdb, 0xa1, 0x93, 0x1f, 0x22, 0x8d, 0xb8, 0xa7, 0x33, 0x5f, 0x80, 0xe5, 0xcd, - 0xc0, 0x3f, 0x66, 0x51, 0x4c, 0x17, 0x89, 0x28, 0x92, 0x49, 0x28, 0x93, 0x5f, 0x50, 0xe6, 0x1d, - 0x58, 0x91, 0x25, 0x7a, 0x2c, 0xd9, 0x8d, 0xdc, 0x63, 0x49, 0x4a, 0x1c, 0x50, 0x6b, 0xca, 0x01, - 0x75, 0x71, 0xa0, 0xad, 0x2b, 0x07, 0xda, 0x17, 0xa0, 0xed, 0xc6, 0x42, 0x01, 0x06, 0xd5, 0x8c, - 0x55, 0x30, 0x4c, 0x1b, 0x96, 0xc8, 0xfd, 0xe2, 0xc2, 0x08, 0xbb, 0x58, 0x81, 0x19, 0x8a, 0xa9, - 0xbc, 0x93, 0x9c, 0x1e, 0x79, 0xfd, 0x32, 0xf2, 0xb2, 0xd1, 0xec, 0xc1, 0x92, 0x78, 0x54, 0xb3, - 0x6b, 0x0f, 0x5c, 0x9f, 0x16, 0xd9, 0x8b, 0x00, 0xa1, 0x3d, 0xc8, 0x1e, 0xd5, 0xd1, 0xb5, 0x99, - 0xc4, 0xe1, 0xdf, 0xe3, 0x83, 0xe0, 0xae, 0xf8, 0xae, 0xd3, 0xf7, 0x82, 0x63, 0x7e, 0x0d, 0x0c, - 0x8b, 0xc5, 0x61, 0xe0, 0xc7, 0x4c, 0xd2, 0xba, 0x0a, 0x9d, 0xcd, 0x34, 0x8a, 0x98, 0xcf, 0xbb, - 0xca, 0x5e, 0x98, 0xc9, 0x2c, 0xae, 0xb7, 0x57, 0xe8, 0xa5, 0x23, 0x76, 0x89, 0x63, 0xfe, 0xa4, - 0x01, 0xed, 0x9e, 0x3b, 0xf0, 0x6d, 0xcf, 0x62, 0x47, 0xc6, 0x6b, 0xd0, 0xa2, 0x2d, 0x8b, 0x88, - 0x94, 0xba, 0x23, 0x5f, 0x6a, 0x4d, 0x7b, 0x33, 0x8b, 0x1d, 0x5d, 0xfb, 0x84, 0x25, 0x64, 0x8c, - 0xb7, 0x61, 0x8e, 0x7e, 0x5d, 0xa7, 0x23, 0x28, 0x91, 0xbf, 0x3e, 0x77, 0x8a, 0x12, 0xd1, 0x9a, - 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x7d, 0x2c, 0x69, 0xc4, 0xf2, 0x30, 0xda, 0x20, 0xaa, 0x7c, 0x84, - 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, 0x99, 0x7a, 0xb4, 0x34, 0x9d, 0xe5, 0x08, 0x69, - 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xb8, 0x1d, 0x8a, 0xb3, 0xc3, 0xd1, 0xd2, 0xd7, 0xb0, 0x99, - 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, - 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, 0x60, 0x3b, 0xe6, 0x07, 0x0d, 0x80, 0xac, 0x61, - 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x5e, 0x3d, 0x48, - 0x9f, 0x1f, 0x17, 0x24, 0xd2, 0x56, 0x82, 0xe9, 0x72, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, - 0x09, 0xa0, 0x2e, 0x97, 0x80, 0x5a, 0x3b, 0x15, 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5c, 0x82, 0x6a, - 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x72, 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, - 0xb8, 0xfe, 0xaa, 0xc3, 0x3c, 0xba, 0x8c, 0x6e, 0x61, 0xfd, 0xfd, 0x00, 0xef, 0x03, 0xd0, 0x5d, - 0xea, 0x1b, 0x4d, 0x95, 0x69, 0x7c, 0x01, 0x96, 0x88, 0xc1, 0xa4, 0xeb, 0x12, 0x1d, 0xaf, 0x4b, - 0xaa, 0x1f, 0xf0, 0x82, 0x28, 0x8d, 0x93, 0x60, 0xb8, 0x65, 0x27, 0x76, 0x56, 0x7c, 0x15, 0x1c, - 0xf9, 0xfa, 0x6e, 0xaa, 0xf2, 0x0a, 0x3c, 0x0a, 0x82, 0x61, 0x7e, 0x2f, 0x27, 0x28, 0x2e, 0x91, - 0xb8, 0x43, 0x16, 0xa4, 0x89, 0x58, 0x26, 0x32, 0x92, 0xde, 0x51, 0x39, 0xae, 0x8d, 0x97, 0x5e, - 0xe2, 0x91, 0x51, 0xce, 0xc0, 0x95, 0xad, 0xb8, 0xc4, 0x13, 0xaf, 0xb4, 0x0b, 0xce, 0x18, 0x17, - 0x6e, 0xf8, 0xae, 0xdf, 0x4d, 0x5c, 0xf9, 0xf1, 0x51, 0xd3, 0x52, 0x78, 0xe6, 0x3f, 0x34, 0x38, - 0xb7, 0x6b, 0x47, 0x89, 0xdb, 0x77, 0x43, 0xdb, 0x4f, 0xb6, 0x59, 0x62, 0xe3, 0x38, 0x95, 0xc7, - 0x9c, 0xda, 0x83, 0x3d, 0xe6, 0xdc, 0x85, 0x85, 0x81, 0xba, 0x03, 0x79, 0xc0, 0xcd, 0x43, 0x59, - 0x5c, 0x79, 0x99, 0xda, 0x78, 0xe0, 0x97, 0xa9, 0xe6, 0xf7, 0x75, 0x58, 0x28, 0x2d, 0xaf, 0x27, - 0xe6, 0xa6, 0x75, 0x00, 0x37, 0x0f, 0xb5, 0x13, 0x0e, 0xe8, 0xd5, 0x78, 0xb4, 0x24, 0xa1, 0xba, - 0xdb, 0xbe, 0xc6, 0xe4, 0xb7, 0x7d, 0xd7, 0xa0, 0x13, 0x16, 0x20, 0x9d, 0xb0, 0x3f, 0xaa, 0x81, - 0xd2, 0x92, 0x45, 0xcd, 0x77, 0x61, 0xa9, 0xb2, 0x8a, 0xe1, 0xb5, 0x5d, 0x70, 0xc8, 0xfc, 0xfc, - 0xda, 0x8e, 0x13, 0x52, 0x40, 0xeb, 0xe5, 0x80, 0xf6, 0xdc, 0x63, 0xf9, 0xe9, 0xbb, 0x20, 0xcd, - 0x1f, 0xe8, 0xb0, 0x5c, 0x9f, 0x81, 0x1e, 0x57, 0x77, 0xef, 0x41, 0x77, 0xd4, 0x6a, 0x7f, 0x66, - 0x5e, 0x2f, 0xa2, 0x3b, 0xcf, 0xd5, 0x8f, 0xab, 0xbb, 0xcf, 0x65, 0xd1, 0x2d, 0xa5, 0x43, 0xf3, - 0xd7, 0xb9, 0x7f, 0xf2, 0x6a, 0xe4, 0x31, 0xf5, 0x8f, 0xf1, 0x1c, 0x2c, 0xd2, 0x30, 0xa5, 0xe7, - 0x21, 0x54, 0xdc, 0x56, 0xf8, 0xc5, 0x4a, 0x21, 0x95, 0x06, 0x67, 0x16, 0xb3, 0xbf, 0xd7, 0x32, - 0x4c, 0xf2, 0x1a, 0xef, 0x63, 0x85, 0x49, 0x11, 0x69, 0x52, 0xe1, 0x23, 0x45, 0x5a, 0x5e, 0x7b, - 0xfe, 0x3f, 0xd2, 0x4e, 0x8f, 0xb4, 0xdc, 0x97, 0x52, 0x11, 0x68, 0x7e, 0x07, 0xe6, 0xb6, 0x98, - 0xb7, 0x1d, 0x0f, 0xb2, 0xf7, 0xab, 0x67, 0xba, 0x99, 0x2c, 0xbf, 0xf2, 0x9b, 0xaa, 0xbe, 0xf2, - 0xdb, 0x80, 0x79, 0xd9, 0x80, 0x49, 0xde, 0x67, 0x6e, 0x5c, 0xf8, 0xc6, 0xca, 0xa5, 0xe7, 0xe9, - 0xbf, 0x9e, 0xaf, 0x56, 0x9c, 0xb8, 0xd7, 0xc2, 0xff, 0x7e, 0xbe, 0xf4, 0xbf, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x77, 0x5b, 0x05, 0x8d, 0x0e, 0x3a, 0x00, 0x00, + 0xf1, 0xff, 0x77, 0x8f, 0x67, 0xec, 0xa9, 0xf1, 0x67, 0xef, 0xc6, 0x99, 0xbf, 0xff, 0x9b, 0xfd, + 0x9b, 0x8e, 0x15, 0x42, 0x80, 0x4d, 0x94, 0x10, 0x09, 0xf2, 0xb1, 0xc8, 0x1f, 0xd9, 0x8f, 0x64, + 0xc7, 0x76, 0x7a, 0x76, 0x09, 0x22, 0x48, 0xa1, 0x3d, 0xfd, 0x3c, 0xee, 0xb8, 0xa7, 0xbb, 0xdd, + 0x1f, 0xde, 0x5d, 0x2e, 0x48, 0x41, 0x42, 0xdc, 0x38, 0x71, 0xe1, 0x82, 0xc4, 0x05, 0x81, 0xa2, + 0x08, 0x21, 0x90, 0x38, 0x20, 0x84, 0x10, 0x37, 0x2e, 0x20, 0x71, 0x41, 0xdc, 0x38, 0x73, 0xe5, + 0x80, 0x84, 0x04, 0x7a, 0x55, 0xaf, 0xbb, 0xdf, 0xeb, 0xee, 0xb1, 0x67, 0x2d, 0x2b, 0xbb, 0xd1, + 0x72, 0x9b, 0xaa, 0x7e, 0x55, 0xaf, 0x5e, 0xfd, 0xea, 0xbd, 0xaa, 0xf7, 0x31, 0xb0, 0x10, 0x3b, + 0x87, 0xef, 0xdd, 0x8d, 0x9f, 0xbf, 0x1b, 0x5f, 0x09, 0xa3, 0x20, 0x09, 0x8c, 0xa5, 0x98, 0x45, + 0xc7, 0x2c, 0x7a, 0xcf, 0x0e, 0xdd, 0xf7, 0x42, 0x3b, 0xb2, 0x47, 0xb1, 0xf9, 0x0f, 0x1d, 0xda, + 0xd7, 0xa3, 0x20, 0x0d, 0x6f, 0xfa, 0xfb, 0x81, 0xd1, 0x85, 0xe9, 0x21, 0x12, 0x5b, 0x5d, 0x6d, + 0x55, 0x7b, 0xb6, 0x6d, 0x65, 0xa4, 0x71, 0x09, 0xda, 0xf8, 0x73, 0xdb, 0x1e, 0xb1, 0xae, 0x8e, + 0xdf, 0x0a, 0x86, 0x61, 0xc2, 0xac, 0x1f, 0x24, 0xee, 0xbe, 0x3b, 0xb0, 0x13, 0x37, 0xf0, 0xbb, + 0x0d, 0x6c, 0xa0, 0xf0, 0x78, 0x1b, 0xd7, 0x4f, 0xa2, 0xc0, 0x49, 0x07, 0xd8, 0x66, 0x8a, 0xda, + 0xc8, 0x3c, 0xde, 0xff, 0xbe, 0x3d, 0x60, 0x77, 0xac, 0x5b, 0xdd, 0x26, 0xf5, 0x2f, 0x48, 0x63, + 0x15, 0x3a, 0xc1, 0x5d, 0x9f, 0x45, 0x77, 0x62, 0x16, 0xdd, 0xdc, 0xea, 0xb6, 0xf0, 0xab, 0xcc, + 0x32, 0x2e, 0x03, 0x0c, 0x22, 0x66, 0x27, 0xec, 0xb6, 0x3b, 0x62, 0xdd, 0xe9, 0x55, 0xed, 0xd9, + 0x39, 0x4b, 0xe2, 0x70, 0x0d, 0x23, 0x36, 0xda, 0x63, 0xd1, 0x66, 0x90, 0xfa, 0x49, 0x77, 0x06, + 0x1b, 0xc8, 0x2c, 0x63, 0x1e, 0x74, 0x76, 0xaf, 0xdb, 0x46, 0xd5, 0x3a, 0xbb, 0x67, 0x2c, 0x43, + 0x2b, 0x4e, 0xec, 0x24, 0x8d, 0xbb, 0xb0, 0xaa, 0x3d, 0xdb, 0xb4, 0x04, 0x65, 0xac, 0xc1, 0x1c, + 0xea, 0x0d, 0x32, 0x6b, 0x3a, 0x28, 0xa2, 0x32, 0x73, 0x8f, 0xdd, 0xbe, 0x1f, 0xb2, 0xee, 0x2c, + 0x2a, 0x28, 0x18, 0xe6, 0x5f, 0x74, 0xb8, 0x80, 0x7e, 0xef, 0xa1, 0x01, 0xd7, 0x52, 0xcf, 0x3b, + 0x05, 0x81, 0x65, 0x68, 0xa5, 0xd4, 0x1d, 0xb9, 0x5f, 0x50, 0xbc, 0x9f, 0x28, 0xf0, 0xd8, 0x2d, + 0x76, 0xcc, 0x3c, 0x74, 0x7c, 0xd3, 0x2a, 0x18, 0xc6, 0x0a, 0xcc, 0xbc, 0x1f, 0xb8, 0x3e, 0xfa, + 0x64, 0x0a, 0x3f, 0xe6, 0x34, 0xff, 0xe6, 0xbb, 0x83, 0x43, 0x9f, 0x43, 0x4a, 0xee, 0xce, 0x69, + 0x19, 0x89, 0x96, 0x8a, 0xc4, 0x33, 0x30, 0x6f, 0x87, 0x61, 0xcf, 0xf6, 0x87, 0x2c, 0xa2, 0x4e, + 0xa7, 0x51, 0x6f, 0x89, 0xcb, 0xf1, 0xe0, 0x3d, 0xf5, 0x83, 0x34, 0x1a, 0x30, 0x74, 0x77, 0xd3, + 0x92, 0x38, 0x5c, 0x4f, 0x10, 0xb2, 0x48, 0x72, 0x23, 0x79, 0xbe, 0xc4, 0x15, 0xa8, 0x40, 0x8e, + 0x0a, 0xc7, 0x31, 0x4d, 0xd8, 0x1b, 0xbe, 0x83, 0x83, 0xea, 0x08, 0x1c, 0x0b, 0x96, 0xf9, 0x1d, + 0x0d, 0xe6, 0x77, 0xd3, 0x3d, 0xcf, 0x1d, 0xa0, 0x0a, 0xee, 0xd6, 0xc2, 0x79, 0x9a, 0xe2, 0x3c, + 0xd9, 0x05, 0xfa, 0x78, 0x17, 0x34, 0x54, 0x17, 0x2c, 0x43, 0x6b, 0xc8, 0x7c, 0x87, 0x45, 0xc2, + 0xa5, 0x82, 0x12, 0xa6, 0x36, 0x33, 0x53, 0xcd, 0xdf, 0xe9, 0x30, 0xf3, 0x31, 0x9b, 0xb0, 0x0a, + 0x9d, 0xf0, 0x20, 0xf0, 0xd9, 0x76, 0xca, 0xc3, 0x4a, 0xd8, 0x22, 0xb3, 0x8c, 0x8b, 0xd0, 0xdc, + 0x73, 0xa3, 0xe4, 0x00, 0x71, 0x9d, 0xb3, 0x88, 0xe0, 0x5c, 0x36, 0xb2, 0x5d, 0x02, 0xb3, 0x6d, + 0x11, 0x21, 0x06, 0x34, 0x93, 0xfb, 0x5e, 0x9d, 0x63, 0xed, 0xca, 0x1c, 0xab, 0xc6, 0x06, 0xd4, + 0xc6, 0xc6, 0x73, 0xb0, 0x38, 0xf4, 0x82, 0x3d, 0xdb, 0xb3, 0xd8, 0xe0, 0xb8, 0x17, 0x0f, 0x77, + 0xc2, 0x04, 0x81, 0x6c, 0x5a, 0x15, 0xbe, 0xf9, 0x4f, 0x0d, 0xe0, 0x5a, 0xe4, 0x32, 0xdf, 0x41, + 0x37, 0x96, 0x16, 0x02, 0xad, 0xba, 0x10, 0x2c, 0x43, 0x2b, 0x62, 0x23, 0x3b, 0x3a, 0xcc, 0x26, + 0x0a, 0x51, 0x25, 0xe3, 0x1b, 0x15, 0xe3, 0x5f, 0x05, 0xd8, 0xc7, 0x7e, 0xb8, 0x1e, 0x74, 0x6b, + 0xe7, 0xc5, 0xff, 0xbb, 0x52, 0x59, 0x32, 0xaf, 0x64, 0x88, 0x5a, 0x52, 0x73, 0x3e, 0x0b, 0x6d, + 0xc7, 0x11, 0xc1, 0xde, 0xa4, 0x59, 0x98, 0x33, 0x6a, 0x62, 0xbd, 0x75, 0x42, 0xac, 0x4f, 0xe7, + 0x01, 0xf4, 0x77, 0x0d, 0xda, 0x1b, 0x9e, 0x3d, 0x38, 0x9c, 0x70, 0xe8, 0xea, 0x10, 0xf5, 0xca, + 0x10, 0xaf, 0xc3, 0xdc, 0x1e, 0x57, 0x97, 0x0d, 0x01, 0xbd, 0xd0, 0x79, 0xf1, 0x53, 0x35, 0xa3, + 0x54, 0x27, 0x90, 0xa5, 0xca, 0xa9, 0xc3, 0x9d, 0x3a, 0x7d, 0xb8, 0xcd, 0x13, 0x86, 0xdb, 0xca, + 0x87, 0xfb, 0x27, 0x1d, 0x66, 0x71, 0x51, 0xb4, 0xd8, 0x51, 0xca, 0xe2, 0xc4, 0x78, 0x1d, 0x66, + 0xd2, 0xcc, 0x54, 0x6d, 0x52, 0x53, 0x73, 0x11, 0xe3, 0x15, 0xb1, 0x04, 0xa3, 0xbc, 0x8e, 0xf2, + 0x97, 0x6a, 0xe4, 0xf3, 0xfc, 0x67, 0x15, 0xcd, 0x79, 0xba, 0x3a, 0xb0, 0x7d, 0xc7, 0x63, 0x16, + 0x8b, 0x53, 0x2f, 0x11, 0x2b, 0xab, 0xc2, 0xa3, 0x48, 0x3b, 0xea, 0xc5, 0x43, 0x91, 0xcc, 0x04, + 0xc5, 0xbd, 0x43, 0xed, 0xf8, 0x27, 0x1a, 0x7a, 0xc1, 0xe0, 0x93, 0x3a, 0x62, 0x47, 0x88, 0x10, + 0x4d, 0xc1, 0x8c, 0x2c, 0xfa, 0x14, 0x5e, 0xa3, 0x40, 0x50, 0x78, 0x1c, 0x62, 0xa2, 0x51, 0x01, + 0x65, 0x31, 0x89, 0x53, 0x4e, 0x62, 0xe6, 0x5f, 0x1b, 0x30, 0x47, 0xd3, 0x27, 0x73, 0xea, 0x65, + 0x1e, 0xe7, 0xc1, 0x48, 0x89, 0x22, 0x89, 0xc3, 0xad, 0xe0, 0xd4, 0xb6, 0xba, 0x28, 0x29, 0x3c, + 0x1e, 0x8a, 0x9c, 0xbe, 0xa6, 0x2c, 0x4e, 0x32, 0x2b, 0xeb, 0xe5, 0xba, 0xbc, 0x48, 0x49, 0x1c, + 0xbe, 0xec, 0x25, 0x81, 0x12, 0x1d, 0x39, 0xcd, 0x65, 0x93, 0x20, 0xef, 0x9f, 0xe2, 0x43, 0xe2, + 0x70, 0xff, 0x26, 0x41, 0xd6, 0x37, 0x39, 0xa9, 0x60, 0x90, 0x66, 0xd1, 0x2f, 0xa5, 0x9d, 0x9c, + 0xae, 0xa0, 0xda, 0x3e, 0x11, 0x55, 0x50, 0x50, 0x55, 0x27, 0x57, 0xa7, 0x32, 0xb9, 0xd6, 0x60, + 0x8e, 0xf4, 0x64, 0x41, 0x3f, 0x4b, 0x65, 0x81, 0xc2, 0x54, 0x63, 0x63, 0xae, 0x1c, 0x1b, 0x2a, + 0xba, 0xf3, 0x63, 0xd0, 0x5d, 0xc8, 0xd1, 0xfd, 0xb9, 0x0e, 0xb0, 0xc5, 0x42, 0x3b, 0x4a, 0x46, + 0xcc, 0x4f, 0xf8, 0xf0, 0x9c, 0x9c, 0xca, 0xc1, 0x55, 0x78, 0x72, 0x4e, 0xd1, 0xd5, 0x9c, 0x62, + 0xc0, 0x14, 0x3a, 0x9c, 0xd0, 0xc4, 0xdf, 0xdc, 0x99, 0xa1, 0x1d, 0x91, 0x36, 0x0a, 0xf2, 0x9c, + 0xe6, 0x39, 0x23, 0x88, 0x1c, 0x91, 0x65, 0x9a, 0x16, 0x11, 0x7c, 0xf2, 0x17, 0xfd, 0x61, 0xf1, + 0xd3, 0xa2, 0x1c, 0xa0, 0x72, 0x4f, 0xad, 0xd7, 0x9e, 0x83, 0xc5, 0x38, 0xdd, 0x2b, 0x06, 0xb7, + 0x9d, 0x8e, 0x44, 0xb8, 0x57, 0xf8, 0xdc, 0xa9, 0x54, 0xc8, 0xf1, 0x46, 0x94, 0x96, 0x0a, 0x46, + 0xb9, 0x82, 0x30, 0x3f, 0xd4, 0x61, 0x71, 0x27, 0x1a, 0xda, 0xbe, 0xfb, 0x4d, 0x2c, 0x4d, 0x71, + 0x01, 0x3f, 0x4b, 0x7a, 0x5e, 0x85, 0x0e, 0xf3, 0x87, 0x9e, 0x1b, 0x1f, 0x6c, 0x17, 0x7e, 0x93, + 0x59, 0xb2, 0xb3, 0xa7, 0xc6, 0x25, 0xf0, 0xa6, 0x92, 0xc0, 0x97, 0xa1, 0x35, 0x0a, 0xf6, 0x5c, + 0x2f, 0x8b, 0x7b, 0x41, 0x61, 0xcc, 0x33, 0x8f, 0x61, 0x26, 0xcf, 0x63, 0x3e, 0x63, 0x14, 0x49, + 0x7d, 0xa6, 0x36, 0xa9, 0xb7, 0xe5, 0xa4, 0xae, 0x3a, 0x1e, 0x2a, 0x8e, 0x27, 0x77, 0x75, 0x72, + 0x77, 0xfd, 0x56, 0x83, 0xc5, 0xc2, 0xdd, 0x54, 0xaf, 0x8e, 0x75, 0x57, 0x39, 0x02, 0xf5, 0x9a, + 0x08, 0xcc, 0xe3, 0xa6, 0x21, 0xc7, 0x0d, 0x8f, 0xb4, 0x20, 0x76, 0xa5, 0xbd, 0x41, 0x4e, 0xf3, + 0xde, 0x3c, 0x66, 0x4b, 0xce, 0x22, 0x4a, 0xaa, 0xd0, 0x5b, 0x4a, 0x85, 0x5e, 0xce, 0xa3, 0xbf, + 0xd2, 0xe0, 0x22, 0x47, 0xb9, 0x32, 0x8c, 0x1d, 0x58, 0x0c, 0x4a, 0x91, 0x20, 0x12, 0xcd, 0xd3, + 0x35, 0x89, 0xa2, 0x1c, 0x34, 0x56, 0x45, 0x98, 0x2b, 0x74, 0x4a, 0x9d, 0x88, 0xcc, 0x53, 0xa7, + 0xb0, 0x6c, 0x8f, 0x55, 0x11, 0x36, 0x7f, 0xad, 0xc1, 0x22, 0xa5, 0x36, 0x69, 0x9e, 0x9f, 0xbb, + 0xd9, 0xef, 0xc0, 0xc5, 0x72, 0xcf, 0xb7, 0xdc, 0x38, 0xe9, 0xea, 0xab, 0x8d, 0x49, 0x4d, 0xaf, + 0x55, 0xc0, 0xe7, 0xda, 0x93, 0xbb, 0xa9, 0xe7, 0xf5, 0x58, 0x1c, 0xdb, 0x43, 0xb6, 0x71, 0xbf, + 0xcf, 0x8e, 0xf8, 0x07, 0x8b, 0x1d, 0x8d, 0x8d, 0x21, 0x5e, 0xe7, 0x60, 0xa1, 0xe0, 0x06, 0x7e, + 0x1e, 0x42, 0x32, 0x8b, 0x4f, 0xab, 0x98, 0xf4, 0x74, 0x1b, 0xab, 0x0d, 0x9e, 0x42, 0x05, 0x69, + 0x7c, 0x03, 0x66, 0x31, 0x87, 0x8b, 0x6e, 0xba, 0x53, 0x38, 0x80, 0xd7, 0x6a, 0xab, 0x86, 0x5a, + 0xab, 0xa8, 0x1a, 0x10, 0xf4, 0x1b, 0x7e, 0x12, 0xdd, 0xb7, 0x14, 0x8d, 0x2b, 0xef, 0xc2, 0x52, + 0xa5, 0x89, 0xb1, 0x08, 0x8d, 0x43, 0x76, 0x5f, 0x8c, 0x83, 0xff, 0x34, 0x5e, 0x80, 0xe6, 0xb1, + 0xed, 0xa5, 0x4c, 0xa0, 0xbf, 0x52, 0x63, 0x81, 0xb0, 0xd9, 0xa2, 0x86, 0xaf, 0xe8, 0x5f, 0xd4, + 0xcc, 0xa7, 0xf3, 0x81, 0xc9, 0x63, 0xd4, 0x94, 0x31, 0x9a, 0x6f, 0x41, 0xa7, 0x17, 0x0f, 0xb7, + 0xec, 0xc4, 0xc6, 0x86, 0xaf, 0x41, 0x67, 0x54, 0x90, 0xd8, 0xb8, 0xbe, 0x3f, 0x21, 0x64, 0xc9, + 0xcd, 0xcd, 0x3f, 0xea, 0xd0, 0xad, 0x77, 0x45, 0x1c, 0x72, 0x1b, 0x58, 0x14, 0x6d, 0x06, 0x0e, + 0xc3, 0xa1, 0x35, 0xad, 0x8c, 0xe4, 0xd8, 0xb1, 0x28, 0xe2, 0x39, 0x4c, 0x14, 0xd9, 0x44, 0x19, + 0x57, 0x60, 0xca, 0xcb, 0x60, 0x39, 0xd9, 0x0a, 0x6c, 0x67, 0x8c, 0x60, 0x11, 0xbd, 0x2b, 0x0d, + 0x48, 0x60, 0xb6, 0x3e, 0x31, 0x66, 0x71, 0x48, 0xa0, 0x49, 0x3a, 0x08, 0xb8, 0x8a, 0xea, 0x95, + 0x01, 0x3c, 0x51, 0xdb, 0xb4, 0x06, 0xc0, 0x2f, 0xa8, 0x00, 0x5e, 0x1e, 0x3f, 0x94, 0x32, 0x88, + 0x21, 0x18, 0xd7, 0x59, 0xd2, 0xb3, 0xef, 0xad, 0xfb, 0x4e, 0xcf, 0xf5, 0xfb, 0xec, 0x88, 0x47, + 0xfb, 0x2a, 0x74, 0xc4, 0x56, 0x3e, 0x87, 0xa9, 0x6d, 0xc9, 0xac, 0xb1, 0x3b, 0xfc, 0xd2, 0x7c, + 0x68, 0x54, 0xe6, 0x83, 0x79, 0x15, 0x66, 0xe5, 0xee, 0x30, 0x89, 0xd8, 0xf7, 0xfa, 0xec, 0x08, + 0x07, 0x34, 0x67, 0x09, 0x0a, 0xf9, 0xd8, 0x42, 0xec, 0x0d, 0x04, 0x65, 0xfe, 0x41, 0x87, 0x0b, + 0x15, 0x93, 0xe3, 0xf0, 0x41, 0xf5, 0xc8, 0xf1, 0xd2, 0x18, 0x17, 0x2f, 0x53, 0x4a, 0xbc, 0x1c, + 0xc2, 0x12, 0x81, 0x24, 0x75, 0xdd, 0x6d, 0x62, 0x00, 0xbc, 0x5e, 0x57, 0xaa, 0x57, 0x8d, 0x14, + 0xd8, 0x4b, 0x5c, 0x02, 0xbf, 0xaa, 0x77, 0x85, 0xc1, 0x72, 0x7d, 0xe3, 0x1a, 0xf8, 0x5f, 0x56, + 0xe1, 0xff, 0xff, 0x3a, 0xf8, 0x65, 0x4b, 0x24, 0xfc, 0x8f, 0x60, 0x81, 0x2f, 0xaa, 0x7d, 0xe6, + 0x3b, 0xbd, 0x78, 0x88, 0x8e, 0x5c, 0x85, 0x0e, 0xc9, 0xf7, 0xe2, 0x61, 0xb1, 0x75, 0x93, 0x58, + 0xbc, 0xc5, 0xc0, 0x73, 0xf9, 0xe2, 0x89, 0x2d, 0xc4, 0xa2, 0x27, 0xb1, 0x78, 0x82, 0x8c, 0x99, + 0x38, 0xf5, 0xe0, 0xde, 0x6d, 0x58, 0x39, 0x6d, 0x7e, 0xd0, 0x82, 0x69, 0x11, 0x8d, 0x98, 0x14, + 0xf9, 0x6e, 0x39, 0x5f, 0x56, 0x89, 0xa2, 0xba, 0x76, 0x70, 0x5c, 0x84, 0x17, 0x51, 0xf2, 0x91, + 0x53, 0x43, 0x3d, 0x72, 0x2a, 0xd9, 0x34, 0x55, 0xb5, 0xa9, 0x34, 0xae, 0x66, 0x75, 0x5c, 0xbc, + 0x8c, 0xc3, 0xca, 0x66, 0xd7, 0xb3, 0x93, 0xfd, 0x20, 0x1a, 0x89, 0xcd, 0x6f, 0xd3, 0xaa, 0xf0, + 0x79, 0xe9, 0x48, 0xbc, 0xbc, 0xf6, 0xa7, 0x14, 0x5e, 0xe2, 0xf2, 0x4a, 0x9b, 0x38, 0xd9, 0x1e, + 0x80, 0x4e, 0x28, 0x54, 0x26, 0xd9, 0x16, 0xc7, 0x6e, 0xe0, 0x63, 0x15, 0x4a, 0xa5, 0xbe, 0xcc, + 0xe2, 0x23, 0x1f, 0xc5, 0xc3, 0x6b, 0x51, 0x30, 0x12, 0xe7, 0x14, 0x19, 0x89, 0x23, 0x0f, 0xfc, + 0x24, 0xab, 0x60, 0xe9, 0x6c, 0x42, 0x66, 0x71, 0x59, 0x41, 0x62, 0x9d, 0x3f, 0x6b, 0x65, 0x24, + 0x8f, 0xa5, 0x98, 0x1d, 0x89, 0xe2, 0x9d, 0xff, 0x54, 0x90, 0x5b, 0x50, 0x91, 0x2b, 0x55, 0x63, + 0x8b, 0xf8, 0x55, 0xae, 0xc6, 0x8a, 0x12, 0x67, 0x49, 0x29, 0x71, 0xd6, 0x61, 0x3a, 0x08, 0xf9, + 0xf4, 0x8f, 0xbb, 0x06, 0x4e, 0x97, 0x4f, 0x8f, 0x5f, 0xa0, 0xae, 0xec, 0x50, 0x4b, 0x9a, 0x18, + 0x99, 0x9c, 0x71, 0x0b, 0x16, 0x82, 0xfd, 0x7d, 0xcf, 0xf5, 0xd9, 0x6e, 0x1a, 0x1f, 0xe0, 0x26, + 0xf9, 0x02, 0x06, 0xbb, 0x59, 0x57, 0x44, 0xa8, 0x2d, 0xad, 0xb2, 0x28, 0xaf, 0xfc, 0xec, 0x84, + 0x36, 0x39, 0xb8, 0xc0, 0x5d, 0xc4, 0x05, 0x4e, 0xe1, 0xe1, 0xd9, 0x9d, 0xb4, 0xd0, 0x3f, 0x81, + 0x8e, 0x93, 0x59, 0x2b, 0xaf, 0xc0, 0xac, 0x6c, 0x6c, 0xcd, 0xc4, 0xbc, 0x28, 0x4f, 0xcc, 0x19, + 0x79, 0xde, 0x7d, 0x5f, 0x83, 0x85, 0x92, 0x99, 0xbc, 0x75, 0xe2, 0x26, 0x1e, 0x13, 0x1a, 0x88, + 0xe0, 0x3b, 0x1d, 0x87, 0xc5, 0x03, 0x31, 0x11, 0xf0, 0xb7, 0xa8, 0x19, 0x1b, 0xf9, 0x59, 0x97, + 0x09, 0xb3, 0xee, 0x4e, 0x9f, 0x2b, 0xea, 0x07, 0xa9, 0xef, 0xe4, 0xe7, 0xd5, 0x12, 0x8f, 0x07, + 0xa2, 0xbb, 0xd3, 0xdf, 0xb0, 0x9d, 0x21, 0xa3, 0x53, 0xe5, 0x26, 0xda, 0xa4, 0x32, 0x4d, 0x07, + 0x66, 0x6e, 0xbb, 0x61, 0xbc, 0x19, 0x8c, 0x46, 0x1c, 0x4e, 0x87, 0x25, 0xbc, 0x26, 0xd7, 0x70, + 0xf0, 0x82, 0xe2, 0x9e, 0x71, 0xd8, 0xbe, 0x9d, 0x7a, 0x09, 0x6f, 0x9a, 0x4d, 0x7f, 0x89, 0x85, + 0xe7, 0xa9, 0x71, 0xe0, 0x6f, 0x91, 0x34, 0xd9, 0x29, 0x71, 0xcc, 0xdf, 0xeb, 0xb0, 0x88, 0xab, + 0xdb, 0x26, 0x06, 0x8f, 0x83, 0x42, 0x2f, 0x42, 0x13, 0x27, 0xb3, 0xa8, 0x0e, 0x4f, 0x3e, 0xfd, + 0xa0, 0xa6, 0xc6, 0x55, 0x68, 0x05, 0x21, 0x96, 0x94, 0xb4, 0xf4, 0x3d, 0x33, 0x4e, 0x48, 0x3d, + 0xba, 0xb6, 0x84, 0x94, 0x71, 0x0d, 0x60, 0x54, 0x54, 0x90, 0x54, 0x08, 0x4c, 0xaa, 0x43, 0x92, + 0xe4, 0xce, 0xcd, 0x73, 0x5c, 0x7e, 0x7e, 0xdd, 0xb0, 0x54, 0xa6, 0xb1, 0x0d, 0xf3, 0x68, 0xf6, + 0x4e, 0x76, 0x0c, 0x86, 0x18, 0x4c, 0xde, 0x63, 0x49, 0xda, 0xfc, 0x91, 0x26, 0xdc, 0xc8, 0xbf, + 0xf6, 0x19, 0xf9, 0xbe, 0x70, 0x89, 0x76, 0x26, 0x97, 0xac, 0xc0, 0xcc, 0x28, 0x95, 0x4e, 0xe5, + 0x1a, 0x56, 0x4e, 0x17, 0x10, 0x35, 0x26, 0x86, 0xc8, 0xfc, 0xb1, 0x06, 0xdd, 0x37, 0x03, 0xd7, + 0xc7, 0x0f, 0xeb, 0x61, 0xe8, 0x89, 0x4b, 0x96, 0x33, 0x63, 0xfe, 0x65, 0x68, 0xdb, 0xa4, 0xc6, + 0x4f, 0x04, 0xec, 0x13, 0x9c, 0xb4, 0x15, 0x32, 0xd2, 0xa1, 0x49, 0x43, 0x3e, 0x34, 0x31, 0x3f, + 0xd2, 0x60, 0x9e, 0x9c, 0xf2, 0x76, 0xea, 0x26, 0x67, 0xb6, 0x6f, 0x03, 0x66, 0x8e, 0x52, 0x37, + 0x39, 0x43, 0x54, 0xe6, 0x72, 0xd5, 0x78, 0x6a, 0xd4, 0xc4, 0x93, 0xf9, 0x33, 0x0d, 0x2e, 0x95, + 0xdd, 0xba, 0x3e, 0x18, 0xb0, 0xf0, 0x61, 0x4e, 0x29, 0xe5, 0xd0, 0x68, 0xaa, 0x74, 0x68, 0x54, + 0x6b, 0xb2, 0xc5, 0xde, 0x67, 0x83, 0x47, 0xd7, 0xe4, 0x6f, 0xeb, 0xf0, 0xbf, 0xd7, 0xf3, 0x89, + 0x77, 0x3b, 0xb2, 0xfd, 0x78, 0x9f, 0x45, 0xd1, 0x43, 0xb4, 0xf7, 0x16, 0xcc, 0xf9, 0xec, 0x6e, + 0x61, 0x93, 0x98, 0x8e, 0x93, 0xaa, 0x51, 0x85, 0x27, 0x5b, 0xbb, 0xcc, 0x7f, 0x69, 0xb0, 0x48, + 0x7a, 0xde, 0x72, 0x07, 0x87, 0x0f, 0x71, 0xf0, 0xdb, 0x30, 0x7f, 0x88, 0x16, 0x70, 0xea, 0x0c, + 0xcb, 0x76, 0x49, 0x7a, 0xc2, 0xe1, 0xff, 0x5b, 0x83, 0x25, 0x52, 0x74, 0xd3, 0x3f, 0x76, 0x1f, + 0x66, 0xb0, 0xee, 0xc2, 0x82, 0x4b, 0x26, 0x9c, 0xd1, 0x01, 0x65, 0xf1, 0x09, 0x3d, 0xf0, 0x4b, + 0x0d, 0x16, 0x48, 0xd3, 0x1b, 0x7e, 0xc2, 0xa2, 0x33, 0x8f, 0xff, 0x06, 0x74, 0x98, 0x9f, 0x44, + 0xb6, 0x7f, 0x96, 0x15, 0x52, 0x16, 0x9d, 0x70, 0x91, 0xfc, 0x48, 0x03, 0x03, 0x55, 0x6d, 0xb9, + 0xf1, 0xc8, 0x8d, 0xe3, 0x87, 0x08, 0xdd, 0x64, 0x06, 0xff, 0x40, 0x87, 0x8b, 0x92, 0x96, 0x5e, + 0x9a, 0x3c, 0xea, 0x26, 0x1b, 0x5b, 0xd0, 0xe6, 0x35, 0x82, 0x7c, 0x1b, 0x39, 0x69, 0x47, 0x85, + 0x20, 0xaf, 0x62, 0x91, 0xe8, 0xb3, 0x41, 0xe0, 0x3b, 0x31, 0x16, 0x47, 0x73, 0x96, 0xc2, 0xe3, + 0xcb, 0xd0, 0x8a, 0xa4, 0x66, 0xd3, 0xf6, 0x07, 0xcc, 0x7b, 0x6c, 0x5c, 0x64, 0xfe, 0x54, 0x83, + 0x79, 0x6a, 0xf2, 0xe8, 0x0f, 0x99, 0xe7, 0x7a, 0x0a, 0xe4, 0x4f, 0x0c, 0x4a, 0x3c, 0xbc, 0x96, + 0x25, 0x2d, 0x72, 0x5d, 0xfd, 0xe8, 0x86, 0xd6, 0x0d, 0xe8, 0x0c, 0x0e, 0x6c, 0x7f, 0x78, 0xa6, + 0xe0, 0x92, 0x45, 0xcd, 0x04, 0x9e, 0x94, 0x0f, 0xe0, 0x37, 0xe9, 0x13, 0x0e, 0xff, 0xa5, 0xd2, + 0x50, 0x4e, 0x7c, 0x6d, 0xf0, 0x60, 0x4e, 0x3f, 0x84, 0x25, 0xba, 0xf5, 0x95, 0x6a, 0x42, 0xa3, + 0x0b, 0xd3, 0xb6, 0x43, 0xc7, 0x10, 0x1a, 0x0a, 0x65, 0xa4, 0x7a, 0x9f, 0x2f, 0x9e, 0x77, 0x15, + 0xf7, 0xf9, 0x97, 0x01, 0x6c, 0xc7, 0x79, 0x27, 0x88, 0x1c, 0xd7, 0xcf, 0x0a, 0x7c, 0x89, 0x63, + 0xbe, 0x09, 0xb3, 0xd7, 0xa2, 0x60, 0x74, 0x5b, 0xba, 0xbf, 0x3d, 0xf1, 0x86, 0x59, 0xbe, 0xfb, + 0xd5, 0xd5, 0xbb, 0x5f, 0xf3, 0xeb, 0xf0, 0x44, 0xc5, 0x70, 0x74, 0xd6, 0x26, 0x5d, 0x4b, 0x67, + 0x9d, 0x88, 0x90, 0xa9, 0x3b, 0x97, 0x93, 0x6d, 0xb1, 0x14, 0x21, 0xf3, 0x03, 0x0d, 0x9e, 0xaa, + 0xa8, 0x5f, 0x0f, 0xc3, 0x28, 0x38, 0x16, 0x98, 0x9c, 0x47, 0x37, 0x6a, 0xf1, 0xab, 0x97, 0x8b, + 0xdf, 0x5a, 0x23, 0x94, 0x82, 0xfd, 0x63, 0x30, 0xe2, 0x27, 0x1a, 0x2c, 0x08, 0x23, 0x1c, 0x47, + 0x74, 0xfb, 0x32, 0xb4, 0xe8, 0x49, 0x8b, 0xe8, 0xf0, 0xa9, 0xda, 0x0e, 0xb3, 0xa7, 0x38, 0x96, + 0x68, 0x5c, 0x8d, 0x48, 0xbd, 0x6e, 0x46, 0x7d, 0x29, 0x0f, 0xf6, 0x89, 0x1f, 0x9d, 0x08, 0x01, + 0xf3, 0xab, 0x59, 0x30, 0x6f, 0x31, 0x8f, 0x9d, 0xa7, 0x8f, 0xcc, 0x3b, 0x30, 0x8f, 0xef, 0x6b, + 0x0a, 0x1f, 0x9c, 0x8b, 0xda, 0x77, 0x60, 0x11, 0xd5, 0x9e, 0xbb, 0xbd, 0xf9, 0xec, 0xe0, 0xfe, + 0x91, 0x97, 0x92, 0x73, 0xd1, 0xfe, 0x79, 0xb8, 0x90, 0xf9, 0xfe, 0x4e, 0xe8, 0xe4, 0x87, 0x48, + 0x63, 0xee, 0xe9, 0xcc, 0x17, 0x60, 0x79, 0x33, 0xf0, 0x8f, 0x59, 0x14, 0xd3, 0x45, 0x22, 0x8a, + 0x64, 0x12, 0xca, 0xe4, 0x17, 0x94, 0xf9, 0x3e, 0xac, 0xc8, 0x12, 0x7d, 0x96, 0xec, 0x46, 0xee, + 0xb1, 0x24, 0x25, 0x0e, 0xa8, 0x35, 0xe5, 0x80, 0xba, 0x38, 0xd0, 0xd6, 0x95, 0x03, 0xed, 0x4b, + 0xd0, 0x76, 0x63, 0xa1, 0x00, 0x83, 0x6a, 0xc6, 0x2a, 0x18, 0xa6, 0x0d, 0x4b, 0xe4, 0x7e, 0x71, + 0x61, 0x84, 0x5d, 0xac, 0xc0, 0x0c, 0xc5, 0x54, 0xde, 0x49, 0x4e, 0x8f, 0xbd, 0x7e, 0x19, 0x7b, + 0xd9, 0x68, 0xf6, 0x61, 0x49, 0x3c, 0xaa, 0xd9, 0xb5, 0x87, 0xae, 0x4f, 0x8b, 0xec, 0x65, 0x80, + 0xd0, 0x1e, 0x66, 0x0f, 0xf0, 0xe8, 0xda, 0x4c, 0xe2, 0xf0, 0xef, 0xf1, 0x41, 0x70, 0x57, 0x7c, + 0xd7, 0xe9, 0x7b, 0xc1, 0x31, 0xbf, 0x02, 0x86, 0xc5, 0xe2, 0x30, 0xf0, 0x63, 0x26, 0x69, 0x5d, + 0x85, 0xce, 0x66, 0x1a, 0x45, 0xcc, 0xe7, 0x5d, 0x65, 0x2f, 0xcc, 0x64, 0x16, 0xd7, 0xdb, 0x2f, + 0xf4, 0xd2, 0x11, 0xbb, 0xc4, 0x31, 0x7f, 0xd8, 0x80, 0x76, 0xdf, 0x1d, 0xfa, 0xb6, 0x67, 0xb1, + 0x23, 0xe3, 0x35, 0x68, 0xd1, 0x96, 0x45, 0x44, 0x4a, 0xdd, 0x91, 0x2f, 0xb5, 0xa6, 0xbd, 0x99, + 0xc5, 0x8e, 0x6e, 0xfc, 0x8f, 0x25, 0x64, 0x8c, 0xb7, 0x61, 0x8e, 0x7e, 0xdd, 0xa4, 0x23, 0x28, + 0x91, 0xbf, 0x3e, 0x73, 0x8a, 0x12, 0xd1, 0x9a, 0x74, 0xa9, 0x1a, 0xb8, 0x41, 0x03, 0x2c, 0x69, + 0xc4, 0xf2, 0x30, 0xde, 0x20, 0xaa, 0x7c, 0x84, 0x41, 0x24, 0xc3, 0xa5, 0x6d, 0x3c, 0xa4, 0x11, + 0x99, 0x7a, 0xbc, 0x34, 0x9d, 0xe5, 0x08, 0x69, 0x92, 0xe1, 0xd2, 0x07, 0xa9, 0x3f, 0xbc, 0x13, + 0x8a, 0xb3, 0xc3, 0xf1, 0xd2, 0x37, 0xb0, 0x99, 0x90, 0x26, 0x19, 0x2e, 0x1d, 0xe1, 0xe2, 0x8d, + 0x4e, 0x3f, 0x49, 0x9a, 0xd6, 0x78, 0x21, 0x4d, 0x32, 0x1b, 0x6d, 0x98, 0x0e, 0xed, 0xfb, 0x5e, + 0x60, 0x3b, 0xe6, 0x87, 0x0d, 0x80, 0xac, 0x61, 0x8c, 0x85, 0x8e, 0x02, 0xd1, 0xda, 0xa9, 0x10, + 0x85, 0xde, 0x7d, 0x09, 0xa4, 0x7e, 0x3d, 0x48, 0x9f, 0x9d, 0x14, 0x24, 0xd2, 0x56, 0x82, 0xe9, + 0x6a, 0x09, 0xa6, 0xb5, 0x53, 0x61, 0x12, 0x46, 0x09, 0xa0, 0xae, 0x96, 0x80, 0x5a, 0x3b, 0x15, + 0x28, 0x21, 0x2f, 0xa0, 0xba, 0x5a, 0x82, 0x6a, 0xed, 0x54, 0xa8, 0x84, 0xbc, 0x00, 0xeb, 0x6a, + 0x09, 0xac, 0xb5, 0x53, 0xc1, 0x12, 0xf2, 0x55, 0xb8, 0xfe, 0xac, 0xc3, 0x3c, 0xba, 0x8c, 0x6e, + 0x61, 0xfd, 0xfd, 0x00, 0xef, 0x03, 0xd0, 0x5d, 0xea, 0x1b, 0x4d, 0x95, 0x69, 0x7c, 0x0e, 0x96, + 0x88, 0xc1, 0xa4, 0xeb, 0x12, 0x1d, 0xaf, 0x4b, 0xaa, 0x1f, 0xf0, 0x82, 0x28, 0x8d, 0x93, 0x60, + 0xb4, 0x65, 0x27, 0x76, 0x56, 0x7c, 0x15, 0x1c, 0xf9, 0xfa, 0x6e, 0xaa, 0xf2, 0x62, 0x3c, 0x0a, + 0x82, 0x51, 0x7e, 0x2f, 0x27, 0x28, 0x2e, 0x91, 0xb8, 0x23, 0x16, 0xa4, 0x89, 0x58, 0x26, 0x32, + 0x92, 0xde, 0x51, 0x39, 0xae, 0x8d, 0x97, 0x5e, 0xe2, 0x91, 0x51, 0xce, 0xc0, 0x95, 0xad, 0xb8, + 0xc4, 0x13, 0x2f, 0xba, 0x0b, 0xce, 0x04, 0x17, 0x6e, 0xf8, 0x1f, 0x00, 0x37, 0x71, 0xe5, 0xc7, + 0x47, 0x4d, 0x4b, 0xe1, 0x99, 0x7f, 0xd3, 0xe0, 0xc2, 0xae, 0x1d, 0x25, 0xee, 0xc0, 0x0d, 0x6d, + 0x3f, 0xe9, 0xb1, 0xc4, 0xc6, 0x71, 0x2a, 0x8f, 0x39, 0xb5, 0x07, 0x7b, 0xcc, 0xb9, 0x0b, 0x0b, + 0x43, 0x75, 0x07, 0xf2, 0x80, 0x9b, 0x87, 0xb2, 0xb8, 0xf2, 0x32, 0xb5, 0xf1, 0xc0, 0x2f, 0x53, + 0xcd, 0xef, 0xea, 0xb0, 0x50, 0x5a, 0x5e, 0x4f, 0xcc, 0x4d, 0xeb, 0x00, 0x6e, 0x1e, 0x6a, 0x27, + 0x1c, 0xd0, 0xab, 0xf1, 0x68, 0x49, 0x42, 0x75, 0xb7, 0x7d, 0x8d, 0xb3, 0xdf, 0xf6, 0xdd, 0x80, + 0x4e, 0x58, 0x80, 0x74, 0xc2, 0xfe, 0xa8, 0x06, 0x4a, 0x4b, 0x16, 0x35, 0xdf, 0x85, 0xa5, 0xca, + 0x2a, 0x86, 0xd7, 0x76, 0xc1, 0x21, 0xf3, 0xf3, 0x6b, 0x3b, 0x4e, 0x48, 0x01, 0xad, 0x97, 0x03, + 0xda, 0x73, 0x8f, 0xe5, 0x67, 0xf2, 0x82, 0x34, 0xbf, 0xa7, 0xc3, 0x72, 0x7d, 0x06, 0x7a, 0x5c, + 0xdd, 0xbd, 0x07, 0xdd, 0x71, 0xab, 0xfd, 0xb9, 0x79, 0xbd, 0x88, 0xee, 0x3c, 0x57, 0x3f, 0xae, + 0xee, 0xbe, 0x90, 0x45, 0xb7, 0x94, 0x0e, 0xcd, 0x5f, 0xe4, 0xfe, 0xc9, 0xab, 0x91, 0xc7, 0xd4, + 0x3f, 0xc6, 0x73, 0xb0, 0x48, 0xc3, 0x94, 0x9e, 0x87, 0x50, 0x71, 0x5b, 0xe1, 0x17, 0x2b, 0x85, + 0x54, 0x1a, 0x9c, 0x5b, 0xcc, 0xfe, 0x46, 0xcb, 0x30, 0xc9, 0x6b, 0xbc, 0x4f, 0x14, 0x26, 0x45, + 0xa4, 0x49, 0x85, 0x8f, 0x14, 0x69, 0x79, 0xed, 0xf9, 0xdf, 0x48, 0x3b, 0x3d, 0xd2, 0x72, 0x5f, + 0x4a, 0x45, 0xa0, 0xf9, 0x2d, 0x98, 0xdb, 0x62, 0x5e, 0x2f, 0x1e, 0x66, 0xef, 0x57, 0xcf, 0x75, + 0x33, 0x59, 0x7e, 0xe5, 0x37, 0x55, 0x7d, 0xe5, 0xb7, 0x01, 0xf3, 0xb2, 0x01, 0x67, 0x79, 0x9f, + 0xb9, 0x71, 0xe9, 0x6b, 0x2b, 0x57, 0x9e, 0xa7, 0xff, 0x85, 0xbe, 0x5a, 0x71, 0xe2, 0x5e, 0x0b, + 0xff, 0x27, 0xfa, 0xd2, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xce, 0x12, 0x67, 0xe3, 0x3a, 0x3a, + 0x00, 0x00, } From 1e62ddce738f04a050e0fbf58715cba0453bb685 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 11:31:24 +0800 Subject: [PATCH 176/256] super update --- internal/msg_gateway/gate/logic.go | 3 +-- internal/push/logic/push_to_client.go | 2 +- internal/rpc/msg/send_msg.go | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 35059ec5b..e12062338 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -3,7 +3,6 @@ package gate import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" @@ -93,7 +92,7 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { } } -func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *pbChat.GetMaxAndMinSeqResp) { +func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeqResp) { log.Debug(m.OperationID, "getSeqResp come here ", pb.String()) b, _ := proto.Marshal(pb) mReply := Resp{ diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 909a97d8c..450f57fb0 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -51,7 +51,7 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { log.Debug(pushMsg.OperationID, "len grpc", len(grpcCons), "data", pushMsg.String()) for _, v := range grpcCons { msgClient := pbRelay.NewOnlineMessageRelayServiceClient(v) - reply, err := msgClient.OnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) + reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(context.Background(), &pbRelay.OnlineBatchPushOneMsgReq{OperationID: pushMsg.OperationID, MsgData: pushMsg.MsgData, PushToUserIDList: []string{pushMsg.PushToUserID}}) if err != nil { log.NewError("SuperGroupOnlineBatchPushOneMsg push data to client rpc err", pushMsg.OperationID, "err", err) continue diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index aa6506f7c..0419458e6 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -431,7 +431,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status string) error { switch status { case constant.OnlineStatus: - pid, offset, err := rpc.onlineProducer.SendMessage(m, key) + pid, offset, err := rpc.onlineProducer.SendMessage(m, key, m.OperationID) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } else { @@ -439,7 +439,7 @@ func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string, status str } return err case constant.OfflineStatus: - pid, offset, err := rpc.onlineProducer.SendMessage(m, key) + pid, offset, err := rpc.onlineProducer.SendMessage(m, key, m.OperationID) if err != nil { log.Error(m.OperationID, "kafka send failed", "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key, status) } From 6f0860d954396a70b883d9d9148d0cecacd538bf Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 12:57:40 +0800 Subject: [PATCH 177/256] add global msg recv opt --- pkg/common/db/newRedisModel.go | 27 +++++++++++++++++++-------- pkg/common/db/redisModel.go | 1 + pkg/common/db/redisModel_test.go | 13 +++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index fec8ad0d1..ba805c066 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -10,15 +10,11 @@ import ( "context" "errors" "fmt" + go_redis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/jsonpb" - - "github.com/garyburd/redigo/redis" - - //goRedis "github.com/go-redis/redis/v8" + "github.com/golang/protobuf/proto" "strconv" "time" - - "github.com/golang/protobuf/proto" ) //func (d * DataBases)pubMessage(channel, msg string) { @@ -27,7 +23,22 @@ import ( //func (d * DataBases)pubMessage(channel, msg string) { // d.rdb.Publish(context.Background(),channel,msg) //} - +func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { + key := conversationReceiveMessageOpt + userID + return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() +} +func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { + key := conversationReceiveMessageOpt + userID + result, err := d.rdb.HGet(context.Background(), key, GlobalMsgRecvOpt).Result() + if err != nil { + if err == go_redis.Nil { + return 0, nil + } else { + return 0, err + } + } + return utils.StringToInt(result), err +} func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 @@ -83,7 +94,7 @@ func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID str key := messageCache + userID + "_" + "*" vals, err := d.rdb.Keys(ctx, key).Result() log2.Debug(operationID, "vals: ", vals) - if err == redis.ErrNil { + if err == go_redis.Nil { return nil } if err != nil { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 68747e0e3..b92cb0ea8 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -36,6 +36,7 @@ const ( messageCache = "MESSAGE_CACHE:" SignalCache = "SIGNAL_CACHE:" SignalListCache = "SIGNAL_LIST_CACHE:" + GlobalMsgRecvOpt = "GLOBAL_MSG_RECV_OPT" ) func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index de05583df..d9d71b94a 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -87,3 +87,16 @@ func Test_NewGetMessageListBySeq(t *testing.T) { fmt.Println(seqMsg, failedSeqList) } +func Test_SetUserGlobalMsgRecvOpt(t *testing.T) { + var opt int32 + uid := "test_uid" + opt = 1 + err := DB.SetUserGlobalMsgRecvOpt(uid, opt) + assert.Nil(t, err) +} +func Test_GetUserGlobalMsgRecvOpt(t *testing.T) { + uid := "test_uid" + opt, err := DB.GetUserGlobalMsgRecvOpt(uid) + assert.Nil(t, err) + fmt.Println("get opt", opt) +} From 8fe6231ebcf2310cf79b57847084015e00c492c9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 13:11:08 +0800 Subject: [PATCH 178/256] add global msg recv opt --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ba805c066..c14e71686 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -25,7 +25,7 @@ import ( //} func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { key := conversationReceiveMessageOpt + userID - return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() + return d.rdb.HSet(context.Background(), key, map[string]interface{}{GlobalMsgRecvOpt: opt}).Err() } func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { key := conversationReceiveMessageOpt + userID From d3279694b7a41c48ff1f6dcf7aa6bd0087cb3c2e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 13:12:16 +0800 Subject: [PATCH 179/256] add global msg recv opt --- pkg/common/db/newRedisModel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index c14e71686..ba805c066 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -25,7 +25,7 @@ import ( //} func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { key := conversationReceiveMessageOpt + userID - return d.rdb.HSet(context.Background(), key, map[string]interface{}{GlobalMsgRecvOpt: opt}).Err() + return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() } func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { key := conversationReceiveMessageOpt + userID From 9eed6ce197079449bd423a11bc77666a918a0c56 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:24:21 +0800 Subject: [PATCH 180/256] alter rtc timeout --- internal/rpc/organization/organization.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 7b3624257..48d3008b8 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -119,11 +119,13 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea createGroupReq := &groupRpc.CreateGroupReq{ InitMemberList: nil, GroupInfo: &open_im_sdk.GroupInfo{ + Introduction: req.DepartmentInfo.Name, GroupName: req.DepartmentInfo.Name, FaceURL: req.DepartmentInfo.FaceURL, CreateTime: uint32(time.Now().Unix()), CreatorUserID: req.OpUserID, GroupType: constant.DepartmentGroup, + OwnerUserID: req.OpUserID, }, OperationID: req.OperationID, OpUserID: req.OpUserID, From e45ef5c49aef280fe02a5fdf44d0f6d35f028a69 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:30:58 +0800 Subject: [PATCH 181/256] alter rtc timeout --- internal/rpc/organization/organization.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 48d3008b8..391b12e7e 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -117,7 +117,12 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := groupRpc.NewGroupClient(etcdConn) createGroupReq := &groupRpc.CreateGroupReq{ - InitMemberList: nil, + InitMemberList: []*groupRpc.GroupAddMemberInfo{ + { + UserID: req.OpUserID, + RoleLevel: constant.GroupOwner, + }, + }, GroupInfo: &open_im_sdk.GroupInfo{ Introduction: req.DepartmentInfo.Name, GroupName: req.DepartmentInfo.Name, From 5965dcd029bd7ada1220cb9a23dcc42dec80d6dd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:39:49 +0800 Subject: [PATCH 182/256] alter rtc timeout --- internal/rpc/organization/organization.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 391b12e7e..608414225 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -117,12 +117,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := groupRpc.NewGroupClient(etcdConn) createGroupReq := &groupRpc.CreateGroupReq{ - InitMemberList: []*groupRpc.GroupAddMemberInfo{ - { - UserID: req.OpUserID, - RoleLevel: constant.GroupOwner, - }, - }, + InitMemberList: []*groupRpc.GroupAddMemberInfo{}, GroupInfo: &open_im_sdk.GroupInfo{ Introduction: req.DepartmentInfo.Name, GroupName: req.DepartmentInfo.Name, From 16641f0494dc272ec645b06341457f849ceb642f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:44:45 +0800 Subject: [PATCH 183/256] alter rtc timeout --- internal/rpc/organization/organization.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 608414225..1d22383dc 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -129,6 +129,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea }, OperationID: req.OperationID, OpUserID: req.OpUserID, + OwnerUserID: req.OpUserID, } createGroupResp, err := client.CreateGroup(context.Background(), createGroupReq) if err != nil { From 8a0c1120724fb43dc5f0ea6713afed3114db2c7f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 13:55:37 +0800 Subject: [PATCH 184/256] alter rtc timeout --- internal/demo/register/onboarding_process.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a937fc3eb..42e579d70 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -25,12 +25,11 @@ func onboardingProcess(operationID, userID, userName string) { if err := createOrganizationUser(operationID, userID, userName); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "createOrganizationUser failed", err.Error()) } - departmentID := config.Config.Demo.TestDepartMentID + departmentID, err := imdb.GetRandomDepartmentID() if err := joinTestDepartment(operationID, userID, departmentID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "joinTestDepartment failed", err.Error()) } - departmentID, err := imdb.GetRandomDepartmentID() log.NewInfo(operationID, utils.GetSelfFuncName(), "random departmentID", departmentID) if err != nil { log.NewError(utils.GetSelfFuncName(), "GetRandomDepartmentID failed", err.Error()) From f4cdbe985e9c71c94a63ef7e1cc16a19938a9c79 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 14:57:21 +0800 Subject: [PATCH 185/256] alter rtc timeout --- pkg/common/db/newRedisModel.go | 22 +++++++ pkg/common/db/redisModel.go | 103 ++++++++++++++++----------------- 2 files changed, 72 insertions(+), 53 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index ba805c066..cf95a1ed4 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -2,6 +2,7 @@ package db import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" pbRtc "Open_IM/pkg/proto/rtc" @@ -203,3 +204,24 @@ func (d *DataBases) DelUserSignalList(userID string) error { err := d.rdb.Del(context.Background(), keyList).Err() return err } + +func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { + for _, seq := range seqList { + key := messageCache + uid + "_" + strconv.Itoa(int(seq)) + result := d.rdb.Get(context.Background(), key).String() + var msg pbCommon.MsgData + if err := utils.String2Pb(result, &msg); err != nil { + log2.Error(operationID, utils.GetSelfFuncName(), "String2Pb failed", msg, err.Error()) + continue + } + msg.Status = constant.MsgDeleted + s, err := utils.Pb2String(&msg) + if err != nil { + log2.Error(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) + continue + } + if err := d.rdb.Set(context.Background(), key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err(); err != nil { + log2.Error(operationID, utils.GetSelfFuncName(), "Set failed", err.Error()) + } + } +} diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index b92cb0ea8..d13a1c5d2 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -5,7 +5,6 @@ import ( "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" pbChat "Open_IM/pkg/proto/chat" - pbRtc "Open_IM/pkg/proto/rtc" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "encoding/json" @@ -14,8 +13,6 @@ import ( "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - //osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" "strconv" ) @@ -322,53 +319,53 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, return nil } -func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { - for _, seq := range seqList { - key := messageCache + uid + "_" + strconv.Itoa(int(seq)) - result, err := redis.String(d.Exec("GET", key)) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key) - continue - } - log2.Debug(operationID, utils.GetSelfFuncName(), "del result", result) - var msg pbCommon.MsgData - err = utils.String2Pb(result, &msg) - log2.NewDebug(operationID, utils.GetSelfFuncName(), "msg", msg) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) - continue - } - msg.Status = constant.MsgDeleted - s, err := utils.Pb2String(&msg) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) - continue - } - _, err = d.Exec("SET", key, s) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, msg, s) - } - } -} - -func (d *DataBases) CacheSignalInfo(msg *pbCommon.MsgData) error { - key := SignalCache + msg.ClientMsgID - _, err := d.Exec("SET", key, msg.Content, "ex", config.Config.Rtc.SignalTimeout) - return err -} - -func (d *DataBases) GetSignalInfoFromCache(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { - key := SignalCache + clientMsgID - result, err := redis.Bytes(d.Exec("GET", key)) - log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result, string(result)) - if err != nil { - return nil, err - } - req := &pbRtc.SignalReq{} - if err = proto.Unmarshal(result, req); err != nil { - return nil, err - } - req2 := req.Payload.(*pbRtc.SignalReq_Invite) - invitationInfo = req2.Invite - return invitationInfo, err -} +//func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { +// for _, seq := range seqList { +// key := messageCache + uid + "_" + strconv.Itoa(int(seq)) +// result, err := redis.String(d.Exec("GET", key)) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key) +// continue +// } +// log2.Debug(operationID, utils.GetSelfFuncName(), "del result", result) +// var msg pbCommon.MsgData +// err = utils.String2Pb(result, &msg) +// log2.NewDebug(operationID, utils.GetSelfFuncName(), "msg", msg) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "string2Pb failed", msg, err.Error()) +// continue +// } +// msg.Status = constant.MsgDeleted +// s, err := utils.Pb2String(&msg) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg, err.Error()) +// continue +// } +// _, err = d.Exec("SET", key, s) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, msg, s) +// } +// } +//} + +//func (d *DataBases) CacheSignalInfo(msg *pbCommon.MsgData) error { +// key := SignalCache + msg.ClientMsgID +// _, err := d.Exec("SET", key, msg.Content, "ex", config.Config.Rtc.SignalTimeout) +// return err +//} +// +//func (d *DataBases) GetSignalInfoFromCache(clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) { +// key := SignalCache + clientMsgID +// result, err := redis.Bytes(d.Exec("GET", key)) +// log2.NewDebug("", utils.GetSelfFuncName(), clientMsgID, result, string(result)) +// if err != nil { +// return nil, err +// } +// req := &pbRtc.SignalReq{} +// if err = proto.Unmarshal(result, req); err != nil { +// return nil, err +// } +// req2 := req.Payload.(*pbRtc.SignalReq_Invite) +// invitationInfo = req2.Invite +// return invitationInfo, err +//} From 1aee41e7e700599501404f2adc5baa1963d90f72 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 16:16:35 +0800 Subject: [PATCH 186/256] go-redis --- pkg/common/db/newRedisModel.go | 91 +++++++++++++++++ pkg/common/db/redisModel.go | 172 ++++++++++++++++----------------- 2 files changed, 177 insertions(+), 86 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index cf95a1ed4..117e413c8 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -9,6 +9,7 @@ import ( pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "encoding/json" "errors" "fmt" go_redis "github.com/go-redis/redis/v8" @@ -225,3 +226,93 @@ func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID st } } } + +func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { + return d.rdb.Set(context.Background(), getuiToken, token, time.Duration(expireTime)*time.Second).Err() +} + +func (d *DataBases) GetGetuiToken() (string, error) { + result := d.rdb.Get(context.Background(), getuiToken) + return result.String(), result.Err() +} + +func (d *DataBases) AddFriendToCache(userID string, friendIDList ...string) error { + var IDList []interface{} + for _, id := range friendIDList { + IDList = append(IDList, id) + } + return d.rdb.SAdd(context.Background(), friendRelationCache+userID, IDList...).Err() +} + +func (d *DataBases) ReduceFriendToCache(userID string, friendIDList ...string) error { + var IDList []interface{} + for _, id := range friendIDList { + IDList = append(IDList, id) + } + return d.rdb.SRem(context.Background(), friendRelationCache+userID, IDList...).Err() +} + +func (d *DataBases) GetFriendIDListFromCache(userID string) ([]string, error) { + result := d.rdb.SMembers(context.Background(), friendRelationCache+userID) + return result.Result() +} + +func (d *DataBases) AddBlackUserToCache(userID string, blackList ...string) error { + var IDList []interface{} + for _, id := range blackList { + IDList = append(IDList, id) + } + return d.rdb.SAdd(context.Background(), blackListCache+userID, IDList...).Err() +} + +func (d *DataBases) ReduceBlackUserFromCache(userID string, blackList ...string) error { + var IDList []interface{} + for _, id := range blackList { + IDList = append(IDList, id) + } + return d.rdb.SRem(context.Background(), blackListCache+userID, IDList...).Err() +} + +func (d *DataBases) GetBlackListFromCache(userID string) ([]string, error) { + result := d.rdb.SMembers(context.Background(), blackListCache+userID) + return result.Result() +} + +func (d *DataBases) AddGroupMemberToCache(groupID string, userIDList ...string) error { + var IDList []interface{} + for _, id := range userIDList { + IDList = append(IDList, id) + } + return d.rdb.SAdd(context.Background(), groupCache+groupID, IDList...).Err() +} + +func (d *DataBases) ReduceGroupMemberFromCache(groupID string, userIDList ...string) error { + var IDList []interface{} + for _, id := range userIDList { + IDList = append(IDList, id) + } + return d.rdb.SRem(context.Background(), groupCache+groupID, IDList...).Err() +} + +func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, error) { + result := d.rdb.SMembers(context.Background(), groupCache+groupID) + return result.Result() +} + +func (d *DataBases) SetUserInfoToCache(userID string, m map[string]interface{}) error { + return d.rdb.HSet(context.Background(), userInfoCache+userID, m).Err() +} + +func (d *DataBases) GetUserInfoFromCache(userID string) (*pbCommon.UserInfo, error) { + result, err := d.rdb.HGetAll(context.Background(), userInfoCache+userID).Result() + bytes, err := json.Marshal(result) + if err != nil { + return nil, err + } + userInfo := &pbCommon.UserInfo{} + if err := proto.Unmarshal(bytes, userInfo); err != nil { + return nil, err + } + err = json.Unmarshal(bytes, userInfo) + return userInfo, err +} diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index d13a1c5d2..f2344a800 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -7,7 +7,6 @@ import ( pbChat "Open_IM/pkg/proto/chat" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" - "encoding/json" "errors" "fmt" @@ -25,7 +24,7 @@ const ( userMinSeq = "REDIS_USER_MIN_SEQ:" uidPidToken = "UID_PID_TOKEN_STATUS:" conversationReceiveMessageOpt = "CON_RECV_MSG_OPT:" - getuiToken = "GETUI" + getuiToken = "GETUI_TOKEN" userInfoCache = "USER_INFO_CACHE:" friendRelationCache = "FRIEND_RELATION_CACHE:" blackListCache = "BLACK_LIST_CACHE:" @@ -172,104 +171,105 @@ func (d *DataBases) GetMultiConversationMsgOpt(userID string, conversationIDs [] } -func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { - _, err := d.Exec("SET", getuiToken, token, "ex", expireTime) - return err -} - -func (d *DataBases) GetGetuiToken() (string, error) { - result, err := redis.String(d.Exec("GET", getuiToken)) - return result, err -} +//func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { +// _, err := d.Exec("SET", getuiToken, token, "ex", expireTime) +// return err +//} +// +//func (d *DataBases) GetGetuiToken() (string, error) { +// result, err := redis.String(d.Exec("GET", getuiToken)) +// return result, err +//} func (d *DataBases) SearchContentType() { } -func (d *DataBases) SetUserInfoToCache(userID string, m map[string]interface{}) error { - _, err := d.Exec("hmset", userInfoCache+userID, redis.Args{}.Add().AddFlat(m)...) - return err -} - -func (d *DataBases) GetUserInfoFromCache(userID string) (*pbCommon.UserInfo, error) { - result, err := redis.String(d.Exec("hgetall", userInfoCache+userID)) - log2.NewInfo("", result) - if err != nil { - return nil, err - } - userInfo := &pbCommon.UserInfo{} - err = json.Unmarshal([]byte(result), userInfo) - return userInfo, err -} +//func (d *DataBases) SetUserInfoToCache(userID string, m map[string]interface{}) error { +// _, err := d.Exec("hmset", userInfoCache+userID, redis.Args{}.Add().AddFlat(m)...) +// return err +//} +// +//func (d *DataBases) GetUserInfoFromCache(userID string) (*pbCommon.UserInfo, error) { +// result, err := redis.String(d.Exec("hgetall", userInfoCache+userID)) +// log2.NewInfo("", result) +// if err != nil { +// return nil, err +// } +// userInfo := &pbCommon.UserInfo{} +// err = json.Unmarshal([]byte(result), userInfo) +// return userInfo, err +//} -func (d *DataBases) AddFriendToCache(userID string, friendIDList ...string) error { - var IDList []interface{} - for _, id := range friendIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SADD", friendRelationCache+userID, IDList...) - return err -} +//func (d *DataBases) AddFriendToCache(userID string, friendIDList ...string) error { +// var IDList []interface{} +// for _, id := range friendIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SADD", friendRelationCache+userID, IDList...) +// return err +//} -func (d *DataBases) ReduceFriendToCache(userID string, friendIDList ...string) error { - var IDList []interface{} - for _, id := range friendIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SREM", friendRelationCache+userID, IDList...) - return err -} +//func (d *DataBases) ReduceFriendToCache(userID string, friendIDList ...string) error { +// var IDList []interface{} +// for _, id := range friendIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SREM", friendRelationCache+userID, IDList...) +// return err +//} -func (d *DataBases) GetFriendIDListFromCache(userID string) ([]string, error) { - result, err := redis.Strings(d.Exec("SMEMBERS", friendRelationCache+userID)) - return result, err -} +//func (d *DataBases) GetFriendIDListFromCache(userID string) ([]string, error) { +// result, err := redis.Strings(d.Exec("SMEMBERS", friendRelationCache+userID)) +// return result, err +//} +// +//func (d *DataBases) AddBlackUserToCache(userID string, blackList ...string) error { +// var IDList []interface{} +// for _, id := range blackList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SADD", blackListCache+userID, IDList...) +// return err +//} -func (d *DataBases) AddBlackUserToCache(userID string, blackList ...string) error { - var IDList []interface{} - for _, id := range blackList { - IDList = append(IDList, id) - } - _, err := d.Exec("SADD", blackListCache+userID, IDList...) - return err -} +//func (d *DataBases) ReduceBlackUserFromCache(userID string, blackList ...string) error { +// var IDList []interface{} +// for _, id := range blackList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SREM", blackListCache+userID, IDList...) +// return err +//} -func (d *DataBases) ReduceBlackUserFromCache(userID string, blackList ...string) error { - var IDList []interface{} - for _, id := range blackList { - IDList = append(IDList, id) - } - _, err := d.Exec("SREM", blackListCache+userID, IDList...) - return err -} +//func (d *DataBases) GetBlackListFromCache(userID string) ([]string, error) { +// result, err := redis.Strings(d.Exec("SMEMBERS", blackListCache+userID)) +// return result, err +//} -func (d *DataBases) GetBlackListFromCache(userID string) ([]string, error) { - result, err := redis.Strings(d.Exec("SMEMBERS", blackListCache+userID)) - return result, err -} +//func (d *DataBases) AddGroupMemberToCache(groupID string, userIDList ...string) error { +// var IDList []interface{} +// for _, id := range userIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SADD", groupCache+groupID, IDList...) +// return err +//} -func (d *DataBases) AddGroupMemberToCache(groupID string, userIDList ...string) error { - var IDList []interface{} - for _, id := range userIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SADD", groupCache+groupID, IDList...) - return err -} +//func (d *DataBases) ReduceGroupMemberFromCache(groupID string, userIDList ...string) error { +// var IDList []interface{} +// for _, id := range userIDList { +// IDList = append(IDList, id) +// } +// _, err := d.Exec("SREM", groupCache+groupID, IDList...) +// return err +//} -func (d *DataBases) ReduceGroupMemberFromCache(groupID string, userIDList ...string) error { - var IDList []interface{} - for _, id := range userIDList { - IDList = append(IDList, id) - } - _, err := d.Exec("SREM", groupCache+groupID, IDList...) - return err -} +//func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, error) { +// result, err := redis.Strings(d.Exec("SMEMBERS", groupCache+groupID)) +// return result, err +//} -func (d *DataBases) GetGroupMemberIDListFromCache(groupID string) ([]string, error) { - result, err := redis.Strings(d.Exec("SMEMBERS", groupCache+groupID)) - return result, err -} func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 From 7dbc8a4253d74f09eb9b6d21768ee5bdf52f4912 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 16:18:41 +0800 Subject: [PATCH 187/256] go-redis --- internal/rpc/organization/organization.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 1d22383dc..8f07867e9 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -124,7 +124,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea FaceURL: req.DepartmentInfo.FaceURL, CreateTime: uint32(time.Now().Unix()), CreatorUserID: req.OpUserID, - GroupType: constant.DepartmentGroup, + GroupType: constant.NormalGroup, OwnerUserID: req.OpUserID, }, OperationID: req.OperationID, From d7961bf22679db166377748b32eea69fd1dcb3b1 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:33:30 +0800 Subject: [PATCH 188/256] redis replace to go_redis --- pkg/common/db/newRedisModel.go | 90 ++++++++- pkg/common/db/redisModel.go | 315 ++++++++++++++----------------- pkg/common/db/redisModel_test.go | 32 +++- 3 files changed, 254 insertions(+), 183 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 117e413c8..9c279b69f 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -25,6 +25,92 @@ import ( //func (d * DataBases)pubMessage(channel, msg string) { // d.rdb.Publish(context.Background(),channel,msg) //} +func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { + key := accountTempCode + account + n, err := d.rdb.Exists(context.Background(), key).Result() + if n > 0 { + return true, err + } else { + return false, err + } +} +func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { + key := accountTempCode + account + return d.rdb.Set(context.Background(), key, code, time.Duration(ttl)*time.Second).Err() +} +func (d *DataBases) GetAccountCode(account string) (string, error) { + key := accountTempCode + account + return d.rdb.Get(context.Background(), key).Result() +} + +//Perform seq auto-increment operation of user messages +func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { + key := userIncrSeq + uid + seq, err := d.rdb.Incr(context.Background(), key).Result() + return uint64(seq), err +} + +//Get the largest Seq +func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { + key := userIncrSeq + uid + seq, err := d.rdb.Get(context.Background(), key).Result() + return uint64(utils.StringToInt(seq)), err +} + +//set the largest Seq +func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { + key := userIncrSeq + uid + return d.rdb.Set(context.Background(), key, maxSeq, 0).Err() +} + +//Set the user's minimum seq +func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { + key := userMinSeq + uid + return d.rdb.Set(context.Background(), key, minSeq, 0).Err() +} + +//Get the smallest Seq +func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { + key := userMinSeq + uid + seq, err := d.rdb.Get(context.Background(), key).Result() + return uint64(utils.StringToInt(seq)), 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) + log2.NewDebug("", "add token key is ", key) + return d.rdb.HSet(context.Background(), key, token, flag).Err() +} + +func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) { + key := uidPidToken + userID + ":" + platformID + log2.NewDebug("", "get token key is ", key) + m, err := d.rdb.HGetAll(context.Background(), key).Result() + mm := make(map[string]int) + for k, v := range m { + mm[k] = utils.StringToInt(v) + } + return mm, err +} +func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { + key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) + return d.rdb.HMSet(context.Background(), key, m).Err() +} +func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { + key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) + return d.rdb.HDel(context.Background(), key, fields...).Err() +} +func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { + key := conversationReceiveMessageOpt + userID + return d.rdb.HSet(context.Background(), key, conversationID, opt).Err() +} + +func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { + key := conversationReceiveMessageOpt + userID + result, err := d.rdb.HGet(context.Background(), key, conversationID).Result() + return utils.StringToInt(result), err +} func (d *DataBases) SetUserGlobalMsgRecvOpt(userID string, opt int32) error { key := conversationReceiveMessageOpt + userID return d.rdb.HSet(context.Background(), key, GlobalMsgRecvOpt, opt).Err() @@ -41,7 +127,7 @@ func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { } return utils.StringToInt(result), err } -func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { +func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) @@ -67,7 +153,7 @@ func (d *DataBases) NewGetMessageListBySeq(userID string, seqList []uint32, oper } return seqMsg, failedSeqList, errResult } -func (d *DataBases) NewSetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { +func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index f2344a800..59fd7ac72 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -1,19 +1,7 @@ package db import ( - "Open_IM/pkg/common/config" - "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" - pbChat "Open_IM/pkg/proto/chat" - pbCommon "Open_IM/pkg/proto/sdk_ws" - "Open_IM/pkg/utils" - "errors" - "fmt" - - "github.com/garyburd/redigo/redis" - "github.com/golang/protobuf/jsonpb" - //osconfig "google.golang.org/genproto/googleapis/cloud/osconfig/v1alpha" - "strconv" ) const ( @@ -54,122 +42,101 @@ func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (inte return con.Do(cmd, params...) } -func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { - key := accountTempCode + account - return redis.Bool(d.Exec("EXISTS", key)) -} -func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { - key := accountTempCode + account - _, err = d.Exec("SET", key, code, "ex", ttl) - return err -} -func (d *DataBases) GetAccountCode(account string) (string, error) { - key := accountTempCode + account - return redis.String(d.Exec("GET", key)) -} - -//Perform seq auto-increment operation of user messages -func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { - key := userIncrSeq + uid - return redis.Uint64(d.Exec("INCR", key)) -} - -//Get the largest Seq -func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { - key := userIncrSeq + uid - return redis.Uint64(d.Exec("GET", key)) -} - -//set the largest Seq -func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { - key := userIncrSeq + uid - _, err := d.Exec("SET", key, maxSeq) - return err -} - -//Set the user's minimum seq -func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { - key := userMinSeq + uid - _, err = d.Exec("SET", key, minSeq) - return err -} - -//Get the smallest Seq -func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { - key := userMinSeq + uid - return redis.Uint64(d.Exec("GET", key)) -} - -//Store Apple's device token to redis -func (d *DataBases) SetAppleDeviceToken(accountAddress, value string) (err error) { - key := appleDeviceToken + accountAddress - _, err = d.Exec("SET", key, value) - return err -} - -//Delete Apple device token -func (d *DataBases) DelAppleDeviceToken(accountAddress string) (err error) { - key := appleDeviceToken + accountAddress - _, err = d.Exec("DEL", key) - return 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) - log2.NewDebug("", "add token key is ", key) - _, err1 := d.Exec("HSet", key, token, flag) - return err1 -} - -func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) { - key := uidPidToken + userID + ":" + platformID - log2.NewDebug("", "get token key is ", key) - return redis.IntMap(d.Exec("HGETALL", key)) -} -func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) - return err -} -func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) - return err -} -func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { - key := conversationReceiveMessageOpt + userID - _, err := d.Exec("HSet", key, conversationID, opt) - return err -} - -func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { - key := conversationReceiveMessageOpt + userID - return redis.Int(d.Exec("HGet", key, conversationID)) -} -func (d *DataBases) GetAllConversationMsgOpt(userID string) (map[string]int, error) { - key := conversationReceiveMessageOpt + userID - return redis.IntMap(d.Exec("HGETALL", key)) -} -func (d *DataBases) SetMultiConversationMsgOpt(userID string, m map[string]int) error { - key := conversationReceiveMessageOpt + userID - _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) - return err -} -func (d *DataBases) GetMultiConversationMsgOpt(userID string, conversationIDs []string) (m map[string]int, err error) { - m = make(map[string]int) - key := conversationReceiveMessageOpt + userID - i, err := redis.Ints(d.Exec("hmget", key, redis.Args{}.Add().AddFlat(conversationIDs)...)) - if err != nil { - return m, err - } - for k, v := range conversationIDs { - m[v] = i[k] - } - return m, nil - -} +//func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { +// key := accountTempCode + account +// return redis.Bool(d.Exec("EXISTS", key)) +//} +//func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { +// key := accountTempCode + account +// _, err = d.Exec("SET", key, code, "ex", ttl) +// return err +//} +//func (d *DataBases) GetAccountCode(account string) (string, error) { +// key := accountTempCode + account +// return redis.String(d.Exec("GET", key)) +//} +// +////Perform seq auto-increment operation of user messages +//func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { +// key := userIncrSeq + uid +// return redis.Uint64(d.Exec("INCR", key)) +//} +// +////Get the largest Seq +//func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { +// key := userIncrSeq + uid +// return redis.Uint64(d.Exec("GET", key)) +//} +// +////set the largest Seq +//func (d *DataBases) SetUserMaxSeq(uid string, maxSeq uint64) error { +// key := userIncrSeq + uid +// _, err := d.Exec("SET", key, maxSeq) +// return err +//} +// +////Set the user's minimum seq +//func (d *DataBases) SetUserMinSeq(uid string, minSeq uint32) (err error) { +// key := userMinSeq + uid +// _, err = d.Exec("SET", key, minSeq) +// return err +//} +// +////Get the smallest Seq +//func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { +// key := userMinSeq + uid +// return redis.Uint64(d.Exec("GET", key)) +//} +// +// +////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) +// log2.NewDebug("", "add token key is ", key) +// _, err1 := d.Exec("HSet", key, token, flag) +// return err1 +//} +// +//func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) { +// key := uidPidToken + userID + ":" + platformID +// log2.NewDebug("", "get token key is ", key) +// return redis.IntMap(d.Exec("HGETALL", key)) +//} +//func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int, m map[string]int) error { +// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) +// _, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...) +// return err +//} +//func (d *DataBases) DeleteTokenByUidPid(userID string, platformID int, fields []string) error { +// key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) +// _, err := d.Exec("HDEL", key, redis.Args{}.Add().AddFlat(fields)...) +// return err +//} +// +//func (d *DataBases) SetSingleConversationRecvMsgOpt(userID, conversationID string, opt int32) error { +// key := conversationReceiveMessageOpt + userID +// _, err := d.Exec("HSet", key, conversationID, opt) +// return err +//} +// +//func (d *DataBases) GetSingleConversationRecvMsgOpt(userID, conversationID string) (int, error) { +// key := conversationReceiveMessageOpt + userID +// return redis.Int(d.Exec("HGet", key, conversationID)) +//} +//func (d *DataBases) GetMultiConversationMsgOpt(userID string, conversationIDs []string) (m map[string]int, err error) { +// m = make(map[string]int) +// key := conversationReceiveMessageOpt + userID +// i, err := redis.Ints(d.Exec("hmget", key, redis.Args{}.Add().AddFlat(conversationIDs)...)) +// if err != nil { +// return m, err +// } +// for k, v := range conversationIDs { +// m[v] = i[k] +// } +// return m, nil +// +//} //func (d *DataBases) SetGetuiToken(token string, expireTime int64) error { // _, err := d.Exec("SET", getuiToken, token, "ex", expireTime) @@ -270,54 +237,54 @@ func (d *DataBases) SearchContentType() { // return result, err //} -func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { - for _, v := range seqList { - //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 - key := messageCache + userID + "_" + strconv.Itoa(int(v)) - - result, err := redis.String(d.Exec("GET", key)) - if err != nil { - errResult = err - failedSeqList = append(failedSeqList, v) - log2.NewWarn(operationID, "redis get message error:", err.Error(), v) - } else { - msg := pbCommon.MsgData{} - err = jsonpb.UnmarshalString(result, &msg) - if err != nil { - errResult = err - failedSeqList = append(failedSeqList, v) - log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) - } else { - log2.NewDebug(operationID, "redis get msg is ", msg.String()) - seqMsg = append(seqMsg, &msg) - } - - } - } - return seqMsg, failedSeqList, errResult -} +//func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { +// for _, v := range seqList { +// //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 +// key := messageCache + userID + "_" + strconv.Itoa(int(v)) +// +// result, err := redis.String(d.Exec("GET", key)) +// if err != nil { +// errResult = err +// failedSeqList = append(failedSeqList, v) +// log2.NewWarn(operationID, "redis get message error:", err.Error(), v) +// } else { +// msg := pbCommon.MsgData{} +// err = jsonpb.UnmarshalString(result, &msg) +// if err != nil { +// errResult = err +// failedSeqList = append(failedSeqList, v) +// log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) +// } else { +// log2.NewDebug(operationID, "redis get msg is ", msg.String()) +// seqMsg = append(seqMsg, &msg) +// } +// +// } +// } +// return seqMsg, failedSeqList, errResult +//} -func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { - var failedList []pbChat.MsgDataToMQ - for _, msg := range msgList { - key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) - s, err := utils.Pb2String(msg.MsgData) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) - continue - } - log2.NewDebug(operationID, "convert string is ", s) - _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) - if err != nil { - log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s) - failedList = append(failedList, *msg) - } - } - if len(failedList) != 0 { - return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) - } - return nil -} +//func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { +// var failedList []pbChat.MsgDataToMQ +// for _, msg := range msgList { +// key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) +// s, err := utils.Pb2String(msg.MsgData) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "Pb2String failed", msg.MsgData.String(), uid, err.Error()) +// continue +// } +// log2.NewDebug(operationID, "convert string is ", s) +// _, err = d.Exec("SET", key, s, "ex", config.Config.MsgCacheTimeout) +// if err != nil { +// log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s) +// failedList = append(failedList, *msg) +// } +// } +// if len(failedList) != 0 { +// return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q", failedList)) +// } +// return nil +//} //func (d *DataBases) DelMsgFromCache(uid string, seqList []uint32, operationID string) { // for _, seq := range seqList { diff --git a/pkg/common/db/redisModel_test.go b/pkg/common/db/redisModel_test.go index d9d71b94a..f90cd99cd 100644 --- a/pkg/common/db/redisModel_test.go +++ b/pkg/common/db/redisModel_test.go @@ -25,11 +25,11 @@ func Test_GetTokenMapByUidPid(t *testing.T) { fmt.Println(m) } -func TestDataBases_GetMultiConversationMsgOpt(t *testing.T) { - m, err := DB.GetMultiConversationMsgOpt("fg", []string{"user", "age", "color"}) - assert.Nil(t, err) - fmt.Println(m) -} +//func TestDataBases_GetMultiConversationMsgOpt(t *testing.T) { +// m, err := DB.GetMultiConversationMsgOpt("fg", []string{"user", "age", "color"}) +// assert.Nil(t, err) +// fmt.Println(m) +//} func Test_GetKeyTTL(t *testing.T) { ctx := context.Background() key := flag.String("key", "key", "key value") @@ -70,7 +70,7 @@ func Test_NewSetMessageToCache(t *testing.T) { data.AtUserIDList = []string{"1212", "23232"} msg.MsgData = &data messageList := []*pbChat.MsgDataToMQ{&msg} - err := DB.NewSetMessageToCache(messageList, uid, "cacheTest") + err := DB.SetMessageToCache(messageList, uid, "cacheTest") assert.Nil(t, err) } @@ -82,7 +82,7 @@ func Test_NewGetMessageListBySeq(t *testing.T) { data.ClientMsgID = "23jwhjsdf" msg.MsgData = &data - seqMsg, failedSeqList, err := DB.NewGetMessageListBySeq(uid, []uint32{1212}, "cacheTest") + seqMsg, failedSeqList, err := DB.GetMessageListBySeq(uid, []uint32{1212}, "cacheTest") assert.Nil(t, err) fmt.Println(seqMsg, failedSeqList) @@ -100,3 +100,21 @@ func Test_GetUserGlobalMsgRecvOpt(t *testing.T) { assert.Nil(t, err) fmt.Println("get opt", opt) } +func Test_JudgeAccountEXISTS(t *testing.T) { + uid := "test_uid" + b, err := DB.JudgeAccountEXISTS(uid) + assert.Nil(t, err) + fmt.Println(b) +} +func Test_SetAccountCode(t *testing.T) { + uid := "test_uid" + code := 666666 + err := DB.SetAccountCode(uid, code, 100) + assert.Nil(t, err) +} +func Test_GetAccountCode(t *testing.T) { + uid := "test_uid" + code, err := DB.GetAccountCode(uid) + assert.Nil(t, err) + fmt.Println(code) +} From 4315d9dfbb1c02fd8936abbe120b46418e28c27d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:35:24 +0800 Subject: [PATCH 189/256] redis replace to go_redis --- pkg/common/db/model.go | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 6d1660807..2418e7658 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -10,9 +10,7 @@ import ( "fmt" go_redis "github.com/go-redis/redis/v8" "go.mongodb.org/mongo-driver/mongo/options" - // "context" - // "fmt" - "github.com/garyburd/redigo/redis" + "gopkg.in/mgo.v2" "time" @@ -26,9 +24,9 @@ import ( var DB DataBases type DataBases struct { - MysqlDB mysqlDB - mgoSession *mgo.Session - redisPool *redis.Pool + MysqlDB mysqlDB + mgoSession *mgo.Session + //redisPool *redis.Pool mongoClient *mongo.Client rdb *go_redis.Client } @@ -98,22 +96,22 @@ func init() { DB.mongoClient = mongoClient // redis pool init - DB.redisPool = &redis.Pool{ - MaxIdle: config.Config.Redis.DBMaxIdle, - MaxActive: config.Config.Redis.DBMaxActive, - IdleTimeout: time.Duration(config.Config.Redis.DBIdleTimeout) * time.Second, - Dial: func() (redis.Conn, error) { - return redis.Dial( - "tcp", - config.Config.Redis.DBAddress, - redis.DialReadTimeout(time.Duration(1000)*time.Millisecond), - redis.DialWriteTimeout(time.Duration(1000)*time.Millisecond), - redis.DialConnectTimeout(time.Duration(1000)*time.Millisecond), - redis.DialDatabase(0), - redis.DialPassword(config.Config.Redis.DBPassWord), - ) - }, - } + //DB.redisPool = &redis.Pool{ + // MaxIdle: config.Config.Redis.DBMaxIdle, + // MaxActive: config.Config.Redis.DBMaxActive, + // IdleTimeout: time.Duration(config.Config.Redis.DBIdleTimeout) * time.Second, + // Dial: func() (redis.Conn, error) { + // return redis.Dial( + // "tcp", + // config.Config.Redis.DBAddress, + // redis.DialReadTimeout(time.Duration(1000)*time.Millisecond), + // redis.DialWriteTimeout(time.Duration(1000)*time.Millisecond), + // redis.DialConnectTimeout(time.Duration(1000)*time.Millisecond), + // redis.DialDatabase(0), + // redis.DialPassword(config.Config.Redis.DBPassWord), + // ) + // }, + //} DB.rdb = go_redis.NewClient(&go_redis.Options{ Addr: config.Config.Redis.DBAddress, Password: config.Config.Redis.DBPassWord, // no password set From eef47017a39b42fffe913ce7f586d812ab8bbe07 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:39:03 +0800 Subject: [PATCH 190/256] redis replace to go_redis --- go.mod | 2 +- go.sum | 8 +++++++ pkg/common/db/redisModel.go | 42 +++++++++++++++++-------------------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 0fcf1b807..6df88e549 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,6 @@ require ( github.com/antonfisher/nested-logrus-formatter v1.3.0 github.com/bwmarrin/snowflake v0.3.0 github.com/fatih/structs v1.1.0 - github.com/garyburd/redigo v1.6.2 github.com/gin-gonic/gin v1.7.0 github.com/go-playground/validator/v10 v10.4.1 github.com/go-redis/redis/v8 v8.11.5 @@ -33,6 +32,7 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.11.1 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 diff --git a/go.sum b/go.sum index 3d828c7c2..1d74a3093 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,7 @@ github.com/antonfisher/nested-logrus-formatter v1.3.0/go.mod h1:6WTfyWFkBc9+zyBa github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= @@ -108,6 +109,8 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM= github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc= +github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -269,6 +272,7 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= @@ -321,17 +325,21 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 59fd7ac72..c986d408f 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -1,9 +1,5 @@ package db -import ( - log2 "Open_IM/pkg/common/log" -) - const ( accountTempCode = "ACCOUNT_TEMP_CODE" resetPwdTempCode = "RESET_PWD_TEMP_CODE" @@ -23,25 +19,25 @@ const ( GlobalMsgRecvOpt = "GLOBAL_MSG_RECV_OPT" ) -func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { - con := d.redisPool.Get() - if err := con.Err(); err != nil { - log2.Error("", "", "redis cmd = %v, err = %v", cmd, err) - return nil, err - } - defer con.Close() - - params := make([]interface{}, 0) - params = append(params, key) - - if len(args) > 0 { - for _, v := range args { - params = append(params, v) - } - } - - return con.Do(cmd, params...) -} +//func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (interface{}, error) { +// con := d.redisPool.Get() +// if err := con.Err(); err != nil { +// log2.Error("", "", "redis cmd = %v, err = %v", cmd, err) +// return nil, err +// } +// defer con.Close() +// +// params := make([]interface{}, 0) +// params = append(params, key) +// +// if len(args) > 0 { +// for _, v := range args { +// params = append(params, v) +// } +// } +// +// return con.Do(cmd, params...) +//} //func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { // key := accountTempCode + account From f96e12a8b34784097d4c18f2c4e830b44b78f10b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 16:50:45 +0800 Subject: [PATCH 191/256] redis replace to go_redis --- internal/msg_gateway/gate/ws_server.go | 4 ++-- internal/rpc/msg/pull_message.go | 28 +++++++++++++------------- internal/rpc/msg/send_msg.go | 6 +++--- pkg/common/db/batch_insert_chat.go | 6 +++--- pkg/common/token_verify/jwt_token.go | 6 +++--- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 1ce05441f..54ea7138e 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -9,7 +9,7 @@ import ( "Open_IM/pkg/utils" "bytes" "encoding/gob" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "net/http" "sync" "time" @@ -117,7 +117,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn log.NewDebug(operationID, uid, platformID, "kick old conn") ws.sendKickMsg(oldConn, newConn) m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { log.NewError(operationID, "get token from redis err", err.Error(), uid) return } diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 1736baf83..22181f09b 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -2,7 +2,7 @@ package msg import ( "context" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" @@ -15,7 +15,7 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAnd m := make(map[string]*open_im_sdk.MaxAndMinSeq) //seq, err := model.GetBiggestSeqFromReceive(in.UserID) maxSeq, err1 := commonDB.DB.GetUserMaxSeq(in.UserID) - minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) + //minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) if err1 == nil { resp.MaxSeq = uint32(maxSeq) for _, v := range in.GroupIDList { @@ -25,22 +25,22 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *open_im_sdk.GetMaxAnd m[v] = x } resp.GroupMaxAndMinSeq = m - } else if err1 == redis.ErrNil { + } else if err1 == go_redis.Nil { resp.MaxSeq = 0 } else { log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err1.Error()) resp.ErrCode = 200 resp.ErrMsg = "redis get err" } - if err2 == nil { - resp.MinSeq = uint32(minSeq) - } else if err2 == redis.ErrNil { - resp.MinSeq = 0 - } else { - log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err2.Error()) - resp.ErrCode = 201 - resp.ErrMsg = "redis get err" - } + //if err2 == nil { + // resp.MinSeq = uint32(minSeq) + //} else if err2 == redis.ErrNil { + // resp.MinSeq = 0 + //} else { + // log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err2.Error()) + // resp.ErrCode = 201 + // resp.ErrMsg = "redis get err" + //} return resp, nil } func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) { @@ -50,7 +50,7 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull //msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID) if err != nil { - if err != redis.ErrNil { + if err != go_redis.Nil { log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) } else { log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) @@ -72,7 +72,7 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull x := new(open_im_sdk.MsgDataList) redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(k, v.SeqList, in.OperationID) if err != nil { - if err != redis.ErrNil { + if err != go_redis.Nil { log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList) } else { log.Debug(in.OperationID, "get message from redis is nil", failedSeqList) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 0419458e6..fffbf6789 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -15,7 +15,7 @@ import ( "Open_IM/pkg/utils" "context" "errors" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "math/rand" "strconv" @@ -464,7 +464,7 @@ func returnMsg(replay *pbChat.SendMsgResp, pb *pbChat.SendMsgReq, errCode int32, func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType int, pb *pbChat.SendMsgReq) bool { conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), err.Error()) return true } @@ -487,7 +487,7 @@ func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType i func modifyMessageByUserMessageReceiveOptoptimization(userID, sourceID string, sessionType int, operationID string, options *map[string]bool) bool { conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { log.NewError(operationID, "GetSingleConversationMsgOpt from redis err", userID, conversationID, err.Error()) return true } diff --git a/pkg/common/db/batch_insert_chat.go b/pkg/common/db/batch_insert_chat.go index fd037998c..c6b57201f 100644 --- a/pkg/common/db/batch_insert_chat.go +++ b/pkg/common/db/batch_insert_chat.go @@ -7,7 +7,7 @@ import ( "Open_IM/pkg/utils" "context" "errors" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" @@ -112,7 +112,7 @@ func (d *DataBases) BatchInsertChat2Cache(userID string, msgList []*pbMsg.MsgDat currentMaxSeq, err := d.GetUserMaxSeq(userID) if err == nil { - } else if err == redis.ErrNil { + } else if err == go_redis.Nil { currentMaxSeq = 0 } else { return utils.Wrap(err, ""), 0 @@ -161,7 +161,7 @@ func (d *DataBases) BatchInsertChat(userID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq, err := d.GetUserMaxSeq(userID) if err == nil { - } else if err == redis.ErrNil { + } else if err == go_redis.Nil { isInit = true currentMaxSeq = 0 } else { diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index f1e95bba7..aed09190f 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -6,7 +6,7 @@ import ( commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "Open_IM/pkg/utils" - "github.com/garyburd/redigo/redis" + go_redis "github.com/go-redis/redis/v8" "github.com/golang-jwt/jwt/v4" "time" ) @@ -39,7 +39,7 @@ func BuildClaims(uid, platform string, ttl int64) Claims { func DeleteToken(userID string, platformID int) error { m, err := commonDB.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { return utils.Wrap(err, "") } var deleteTokenKey []string @@ -65,7 +65,7 @@ func CreateToken(userID string, platformID int) (string, int64, error) { } //remove Invalid token m, err := commonDB.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) - if err != nil && err != redis.ErrNil { + if err != nil && err != go_redis.Nil { return "", 0, err } var deleteTokenKey []string From 21051900f9bb14a4fe611b5966af78f1cc5bcd66 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 15 Jun 2022 17:33:48 +0800 Subject: [PATCH 192/256] hash userID --- internal/demo/register/set_password.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index fde97a634..545a489d3 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -11,7 +11,10 @@ import ( "Open_IM/pkg/utils" "encoding/json" "github.com/gin-gonic/gin" + "math/big" "net/http" + "strconv" + "time" ) type ParamsSetPassword struct { @@ -53,7 +56,13 @@ func SetPassword(c *gin.Context) { return } } - userID := utils.Base64Encode(account) + //userID := utils.Base64Encode(account) + + userID := utils.Md5(params.OperationID + strconv.FormatInt(time.Now().UnixNano(), 10)) + bi := big.NewInt(0) + bi.SetString(userID[0:8], 16) + userID = bi.String() + url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID From f4f6ea681e596d0a05b4cb58c80ba2c76b00b566 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 18:02:48 +0800 Subject: [PATCH 193/256] Optimization for log --- internal/msg_gateway/gate/logic.go | 32 ++++------ internal/msg_gateway/gate/ws_server.go | 87 +++++++++++++------------- internal/rpc/msg/send_msg.go | 2 +- pkg/common/kafka/producer.go | 9 ++- pkg/common/token_verify/jwt_token.go | 10 ++- 5 files changed, 70 insertions(+), 70 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index e12062338..238d73e91 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -19,19 +19,12 @@ import ( ) func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { - //ws online debug data - //{"ReqIdentifier":1001,"Token":"123","SendID":"c4ca4238a0b923820dcc509a6f75849b","Time":"123","OperationID":"123","MsgIncr":0} - //{"ReqIdentifier":1002,"Token":"123","SendID":"c4ca4238a0b923820dcc509a6f75849b","Time":"123","OperationID":"123","MsgIncr":0,"SeqBegin":1,"SeqEnd":6} - //{"ReqIdentifier":1003,"Token":"123","SendID":"c4ca4238a0b923820dcc509a6f75849b", - //"RecvID":"a87ff679a2f3e71d9181a67b7542122c","ClientMsgID":"2343","Time":"147878787","OperationID": - //"123","MsgIncr":0,"SubMsgType":101,"MsgType":100,"MsgFrom":1,"Content":"sdfsdf"} b := bytes.NewBuffer(binaryMsg) m := Req{} dec := gob.NewDecoder(b) err := dec.Decode(&m) if err != nil { log.NewError("", "ws Decode err", err.Error()) - ws.sendErrMsg(conn, 200, err.Error(), constant.WSDataError, "", "") err = conn.Close() if err != nil { log.NewError("", "ws close err", err.Error()) @@ -43,27 +36,29 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { ws.sendErrMsg(conn, 201, err.Error(), m.ReqIdentifier, m.MsgIncr, m.OperationID) return } - //if !utils.VerifyToken(m.Token, m.SendID) { - // ws.sendErrMsg(conn, 202, "token validate err", m.ReqIdentifier, m.MsgIncr,m.OperationID) - // return - //} - log.NewInfo(m.OperationID, "Basic Info Authentication Success", m) + + log.NewInfo(m.OperationID, "Basic Info Authentication Success", m.SendID, m.MsgIncr, m.ReqIdentifier) switch m.ReqIdentifier { case constant.WSGetNewestSeq: + log.NewInfo(m.OperationID, "getSeqReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.getSeqReq(conn, &m) case constant.WSSendMsg: + log.NewInfo(m.OperationID, "sendMsgReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.sendMsgReq(conn, &m) case constant.WSSendSignalMsg: + log.NewInfo(m.OperationID, "sendSignalMsgReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.sendSignalMsgReq(conn, &m) case constant.WSPullMsgBySeqList: + log.NewInfo(m.OperationID, "pullMsgBySeqListReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) ws.pullMsgBySeqListReq(conn, &m) default: + log.Error(m.OperationID, "ReqIdentifier failed ", m.SendID, m.MsgIncr, m.ReqIdentifier) } log.NewInfo(m.OperationID, "goroutine num is ", runtime.NumGoroutine()) } func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier, m.Data) + log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier) nReply := new(sdk_ws.GetMaxAndMinSeqResp) isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq) if isPass { @@ -88,7 +83,6 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { nReply.ErrCode = errCode nReply.ErrMsg = errMsg ws.getSeqResp(conn, m, nReply) - } } @@ -189,8 +183,6 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { } func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { - // := make(map[string]interface{}) - var mReplyData sdk_ws.UserSendMsgResp mReplyData.ClientMsgID = pb.GetClientMsgID() mReplyData.ServerMsgID = pb.GetServerMsgID() @@ -277,14 +269,14 @@ func (ws *WServer) sendMsg(conn *UserConn, mReply interface{}) { enc := gob.NewEncoder(&b) err := enc.Encode(mReply) if err != nil { - uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "Encode Msg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + // uid, platform := ws.getUserUid(conn) + log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "Encode Msg error", conn.RemoteAddr().String(), err.Error()) return } err = ws.writeMsg(conn, websocket.BinaryMessage, b.Bytes()) if err != nil { - uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws writeMsg error", conn.RemoteAddr().String(), uid, platform, err.Error()) + // uid, platform := ws.getUserUid(conn) + log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws writeMsg error", conn.RemoteAddr().String(), err.Error()) } else { log.Debug(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws write response success") } diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 54ea7138e..223270197 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -51,21 +51,27 @@ func (ws *WServer) run() { } func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { - if ws.headerCheck(w, r) { - query := r.URL.Query() + query := r.URL.Query() + operationID := "" + if len(query["operationID"]) != 0 { + operationID = query["operationID"][0] + } else { + operationID = utils.OperationIDGenerator() + } + log.Debug(operationID, utils.GetSelfFuncName(), " args: ", query) + if ws.headerCheck(w, r, operationID) { conn, err := ws.wsUpGrader.Upgrade(w, r, nil) //Conn is obtained through the upgraded escalator if err != nil { - log.Error("", "upgrade http conn err", err, query) + log.Error(operationID, "upgrade http conn err", err.Error(), query) return } else { - //Connection mapping relationship, - //userID+" "+platformID->conn - //Initialize a lock for each user newConn := &UserConn{conn, new(sync.Mutex), 0} userCount++ - ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0]) + ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0], operationID) go ws.readMsg(newConn) } + } else { + log.Error(operationID, "headerCheck failed ") } } @@ -76,18 +82,13 @@ func (ws *WServer) readMsg(conn *UserConn) { log.NewInfo("", "this is a pingMessage") } if err != nil { - uid, platform := ws.getUserUid(conn) - log.Error("", "WS ReadMsg error", "userIP", conn.RemoteAddr().String(), "userUid", uid, "platform", platform, "error", err.Error()) + log.Error("", "WS ReadMsg error ", " userIP", conn.RemoteAddr().String(), "userUid", "platform", "error", err.Error()) userCount-- ws.delUserConn(conn) return - } else { - //log.ErrorByKv("test", "", "msgType", msgType, "userIP", conn.RemoteAddr().String(), "userUid", ws.getUserUid(conn)) } ws.msgParse(conn, msg) - //ws.writeMsg(conn, 1, chat) } - } func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { @@ -115,25 +116,27 @@ 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) + log.NewError(operationID, "get token from redis err", err.Error(), uid, constant.PlatformIDToName(platformID)) return } if m == nil { - log.NewError(operationID, "get token from redis err", "m is nil") + log.NewError(operationID, "get token from redis err", "m is nil", uid, constant.PlatformIDToName(platformID)) return } + log.NewDebug(operationID, "get token map is ", m, uid, constant.PlatformIDToName(platformID)) + for k, _ := range m { if k != token { m[k] = constant.KickedToken } } - log.NewDebug(operationID, "get map is ", m) + log.NewDebug(operationID, "set token map is ", m, uid, constant.PlatformIDToName(platformID)) err = db.DB.SetTokenMapByUidPid(uid, platformID, m) if err != nil { - log.NewError(operationID, "SetTokenMapByUidPid err", err.Error()) + log.NewError(operationID, "SetTokenMapByUidPid err", err.Error(), uid, platformID, m) return } err = oldConn.Close() @@ -146,7 +149,6 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn if err != nil { log.NewError(operationID, "conn close err", err.Error(), uid, platformID) } - } else { log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[platformID]) } @@ -177,10 +179,11 @@ func (ws *WServer) sendKickMsg(oldConn, newConn *UserConn) { log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "sendKickMsg WS WriteMsg error", oldConn.RemoteAddr().String(), newConn.RemoteAddr().String(), err.Error()) } } -func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token string) { + +func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token string, operationID string) { rwLock.Lock() defer rwLock.Unlock() - operationID := utils.OperationIDGenerator() + log.Info(operationID, utils.GetSelfFuncName(), " args: ", uid, platformID, conn, token) callbackResp := callbackUserOnline(operationID, uid, platformID, token) if callbackResp.ErrCode != 0 { log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOnline resp:", callbackResp) @@ -268,43 +271,39 @@ func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn { return nil } -func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { - rwLock.RLock() - defer rwLock.RUnlock() - - if stringMap, ok := ws.wsConnToUser[conn]; ok { - for k, v := range stringMap { - platform = k - uid = v - } - return uid, platform - } - return "", 0 -} -func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request) bool { +//func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { +// rwLock.RLock() +// defer rwLock.RUnlock() +// +// if stringMap, ok := ws.wsConnToUser[conn]; ok { +// for k, v := range stringMap { +// platform = k +// uid = v +// } +// return uid, platform +// } +// return "", 0 +//} +func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operationID string) bool { status := http.StatusUnauthorized query := r.URL.Query() - operationID := "" - if len(query["operationID"]) != 0 { - operationID = query["operationID"][0] - } if len(query["token"]) != 0 && len(query["sendID"]) != 0 && len(query["platformID"]) != 0 { if ok, err, msg := token_verify.WsVerifyToken(query["token"][0], query["sendID"][0], query["platformID"][0], operationID); !ok { - // e := err.(*constant.ErrInfo) log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error()) w.Header().Set("Sec-Websocket-Version", "13") w.Header().Set("ws_err_msg", err.Error()) http.Error(w, err.Error(), status) return false } else { - log.Info(operationID, "Connection Authentication Success", "", "token", query["token"][0], "userID", query["sendID"][0]) + log.Info(operationID, "Connection Authentication Success", "", "token ", query["token"][0], "userID ", query["sendID"][0], "platformID ", query["platformID"][0]) return true } } else { - log.Error(operationID, "Args err", "query", query) + log.Error(operationID, "Args err ", "query ", query) w.Header().Set("Sec-Websocket-Version", "13") - w.Header().Set("ws_err_msg", "args err, need token, sendID, platformID") - http.Error(w, http.StatusText(status), status) + errMsg := "args err, need token, sendID, platformID" + w.Header().Set("ws_err_msg", errMsg) + http.Error(w, errMsg, status) return false } } diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index fffbf6789..6afbc7549 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -176,7 +176,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S return returnMsg(&replay, pb, errCode, errMsg, "", 0) } rpc.encapsulateMsgData(pb.MsgData) - log.Info("", "this is a test MsgData ", pb.MsgData) + log.Info(pb.OperationID, "this is a test MsgData ", pb.MsgData) msgToMQSingle := pbChat.MsgDataToMQ{Token: pb.Token, OperationID: pb.OperationID, MsgData: pb.MsgData} // callback diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index 3d8ca02f5..c4cd9717a 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -16,8 +16,9 @@ type Producer struct { func NewKafkaProducer(addr []string, topic string) *Producer { p := Producer{} - p.config = sarama.NewConfig() //Instantiate a sarama Config - p.config.Producer.Return.Successes = true //Whether to enable the successes channel to be notified after the message is sent successfully + p.config = sarama.NewConfig() //Instantiate a sarama Config + p.config.Producer.Return.Successes = true //Whether to enable the successes channel to be notified after the message is sent successfully + p.config.Producer.Return.Errors = true p.config.Producer.RequiredAcks = sarama.WaitForAll //Set producer Message Reply level 0 1 all p.config.Producer.Partitioner = sarama.NewHashPartitioner //Set the hash-key automatic hash partition. When sending a message, you must specify the key value of the message. If there is no key, the partition will be selected randomly @@ -48,6 +49,10 @@ func (p *Producer) SendMessage(m proto.Message, key string, operationID string) } kMsg.Value = sarama.ByteEncoder(bMsg) log2.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer) + if kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 { + log2.Error(operationID, "kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 ", kMsg) + return -1, -1, errors.New("key or value == 0") + } a, b, c := p.producer.SendMessage(kMsg) log2.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg, p.producer) return a, b, c diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index aed09190f..54a1b4274 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -245,15 +245,19 @@ func VerifyToken(token, uid string) (bool, error) { return true, nil } func WsVerifyToken(token, uid string, platformID string, operationID string) (bool, error, string) { + argMsg := "token: " + token + " operationID: " + operationID + " userID: " + uid + " platformID: " + platformID claims, err := ParseToken(token, operationID) if err != nil { - return false, utils.Wrap(err, "parse token err"), "parse token err" + errMsg := "parse token err " + argMsg + return false, utils.Wrap(err, errMsg), errMsg } if claims.UID != uid { - return false, utils.Wrap(&constant.ErrTokenUnknown, "uid is not same to token uid"), "uid is not same to token uid" + errMsg := " uid is not same to token uid " + " claims.UID " + claims.UID + argMsg + return false, utils.Wrap(&constant.ErrTokenUnknown, errMsg), errMsg } if claims.Platform != constant.PlatformIDToName(utils.StringToInt(platformID)) { - return false, utils.Wrap(&constant.ErrTokenUnknown, "platform is not same to token platform"), "platform is not same to token platform" + errMsg := " platform is not same to token platform " + argMsg + "claims platformID " + claims.Platform + return false, utils.Wrap(&constant.ErrTokenUnknown, errMsg), errMsg } log.NewDebug(operationID, utils.GetSelfFuncName(), " check ok ", claims.UID, uid, claims.Platform) return true, nil, "" From 9f7cc1ae6985b3bc51839d4a3578c56b1056c260 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 18:11:15 +0800 Subject: [PATCH 194/256] Optimization for log --- internal/msg_gateway/gate/logic.go | 8 ++++--- internal/msg_gateway/gate/validate.go | 33 ++++++++------------------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 238d73e91..88c4af013 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -36,7 +36,6 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { ws.sendErrMsg(conn, 201, err.Error(), m.ReqIdentifier, m.MsgIncr, m.OperationID) return } - log.NewInfo(m.OperationID, "Basic Info Authentication Success", m.SendID, m.MsgIncr, m.ReqIdentifier) switch m.ReqIdentifier { @@ -57,10 +56,12 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { } log.NewInfo(m.OperationID, "goroutine num is ", runtime.NumGoroutine()) } + func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier) nReply := new(sdk_ws.GetMaxAndMinSeqResp) - isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq) + isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq, m.OperationID) + log.Info(m.OperationID, "argsValidate ", isPass, errCode, errMsg) if isPass { rpcReq := sdk_ws.GetMaxAndMinSeqReq{} rpcReq.GroupIDList = data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList @@ -71,9 +72,9 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { msgClient := pbChat.NewChatClient(grpcConn) rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) if err != nil { - log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err.Error(), rpcReq.String()) nReply.ErrCode = 500 nReply.ErrMsg = err.Error() + log.Error(rpcReq.OperationID, "rpc call failed to GetMaxAndMinSeq ", nReply.String()) ws.getSeqResp(conn, m, nReply) } else { log.NewInfo(rpcReq.OperationID, "rpc call success to getSeqReq", rpcReply.String()) @@ -82,6 +83,7 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { } else { nReply.ErrCode = errCode nReply.ErrMsg = errMsg + log.Error(m.OperationID, "argsValidate failed send resp: ", nReply.String()) ws.getSeqResp(conn, m, nReply) } } diff --git a/internal/msg_gateway/gate/validate.go b/internal/msg_gateway/gate/validate.go index 0f4950728..9a5558528 100644 --- a/internal/msg_gateway/gate/validate.go +++ b/internal/msg_gateway/gate/validate.go @@ -57,16 +57,16 @@ type SeqListData struct { SeqList []int64 `mapstructure:"seqList" validate:"required"` } -func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, errMsg string, returnData interface{}) { +func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass bool, errCode int32, errMsg string, returnData interface{}) { switch r { case constant.WSGetNewestSeq: data := open_im_sdk.GetMaxAndMinSeqReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } @@ -74,11 +74,11 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er case constant.WSSendMsg: data := open_im_sdk.MsgData{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } @@ -86,11 +86,11 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er case constant.WSSendSignalMsg: data := pbRtc.SignalReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } @@ -98,31 +98,16 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er case constant.WSPullMsgBySeqList: data := open_im_sdk.PullMessageBySeqListReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error("", "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Data struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { - log.Error("", "data args validate err", err.Error(), r) + log.Error(operationID, "data args validate err", err.Error(), r) return false, 204, err.Error(), nil } return true, 0, "", data - default: } - return false, 204, "args err", nil - - //b := bytes.NewBuffer(m.Data) - //dec := gob.NewDecoder(b) - //err := dec.Decode(&data) - //if err != nil { - // log.ErrorByKv("Decode Data struct err", "", "err", err.Error(), "reqIdentifier", r) - // return false, 203, err.Error(), nil - //} - //if err := mapstructure.WeakDecode(m.Data, &data); err != nil { - // log.ErrorByKv("map to Data struct err", "", "err", err.Error(), "reqIdentifier", r) - // return false, 203, err.Error(), nil - //} else - } From 1af78c9bcba826e9008f407da215919bc05ed345 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 18:15:00 +0800 Subject: [PATCH 195/256] Optimization for log --- internal/msg_gateway/gate/logic.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 88c4af013..668b3339a 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -89,7 +89,7 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { } func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeqResp) { - log.Debug(m.OperationID, "getSeqResp come here ", pb.String()) + b, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, @@ -99,6 +99,8 @@ func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeq OperationID: m.OperationID, Data: b, } + log.Debug(m.OperationID, "getSeqResp come here req: ", pb.String(), "send resp: ", + mReply.ReqIdentifier, mReply.MsgIncr, mReply.ErrCode, mReply.ErrMsg) ws.sendMsg(conn, mReply) } From d74bea25aaea8bdf54b4b409b27ce06182aa3136 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 19:17:49 +0800 Subject: [PATCH 196/256] redis replace to go_redis --- pkg/common/db/newRedisModel.go | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 9c279b69f..2ee01100e 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -128,33 +128,37 @@ func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { return utils.StringToInt(result), err } func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { + var keys []string for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - - result, err := d.rdb.Get(context.Background(), key).Result() - if err != nil { - errResult = err - failedSeqList = append(failedSeqList, v) - log2.NewWarn(operationID, "redis get message error:", err.Error(), v) - } else { + keys = append(keys, key) + } + result, err := d.rdb.MGet(context.Background(), keys...).Result() + if err != nil { + errResult = err + failedSeqList = seqList + log2.NewWarn(operationID, "redis get message error:", err.Error(), seqList) + } else { + for _, v := range result { msg := pbCommon.MsgData{} - err = jsonpb.UnmarshalString(result, &msg) + err = jsonpb.UnmarshalString(v.(string), &msg) if err != nil { errResult = err - failedSeqList = append(failedSeqList, v) + failedSeqList = seqList log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) + break } else { log2.NewDebug(operationID, "redis get msg is ", msg.String()) seqMsg = append(seqMsg, &msg) } - } } return seqMsg, failedSeqList, errResult } func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, operationID string) error { ctx := context.Background() + pipe := d.rdb.Pipeline() var failedList []pbChat.MsgDataToMQ for _, msg := range msgList { key := messageCache + uid + "_" + strconv.Itoa(int(msg.MsgData.Seq)) @@ -164,7 +168,7 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, continue } log2.NewDebug(operationID, "convert string is ", s) - err = d.rdb.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err() + err = pipe.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err() //err = d.rdb.HMSet(context.Background(), "12", map[string]interface{}{"1": 2, "343": false}).Err() if err != nil { log2.NewWarn(operationID, utils.GetSelfFuncName(), "redis failed", "args:", key, *msg, uid, s, err.Error()) @@ -174,7 +178,8 @@ func (d *DataBases) SetMessageToCache(msgList []*pbChat.MsgDataToMQ, uid string, if len(failedList) != 0 { return errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, operationID)) } - return nil + _, err := pipe.Exec(ctx) + return err } func (d *DataBases) CleanUpOneUserAllMsgFromRedis(userID string, operationID string) error { From 04ee5269fe716f1d31a9555c689f6c9a6f523b93 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 19:25:47 +0800 Subject: [PATCH 197/256] Optimization for log --- internal/msg_gateway/gate/logic.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 668b3339a..811449990 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -107,7 +107,7 @@ func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdk_ws.GetMaxAndMinSeq func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr, string(m.Data)) nReply := new(sdk_ws.PullMessageBySeqListResp) - isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsgBySeqList) + isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsgBySeqList, m.OperationID) if isPass { rpcReq := sdk_ws.PullMessageBySeqListReq{} rpcReq.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList From cc8301cc6e8c19a000e41418da7acae3dc59c2f3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 19:28:15 +0800 Subject: [PATCH 198/256] redis replace to go_redis --- internal/msg_gateway/gate/logic.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 811449990..56eed3587 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -157,7 +157,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg, m.OperationID) if isPass { data := pData.(sdk_ws.MsgData) pbData := pbChat.SendMsgReq{ @@ -206,7 +206,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg, m.OperationID) if isPass { signalResp := pbRtc.SignalResp{} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName) From 7cbd840060edef2c270dc78c749e44c65dfc675c Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Wed, 15 Jun 2022 19:51:16 +0800 Subject: [PATCH 199/256] Optimization for log --- internal/msg_gateway/gate/logic.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 811449990..56eed3587 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -157,7 +157,7 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg, m.OperationID) if isPass { data := pData.(sdk_ws.MsgData) pbData := pbChat.SendMsgReq{ @@ -206,7 +206,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg, m.OperationID) if isPass { signalResp := pbRtc.SignalResp{} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName) From 2e7e278ba478b7b08364c8e9659c0218bbb1a9d9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 15 Jun 2022 23:30:33 +0800 Subject: [PATCH 200/256] redis restore --- pkg/common/db/newRedisModel.go | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/pkg/common/db/newRedisModel.go b/pkg/common/db/newRedisModel.go index 2ee01100e..da5ec2127 100644 --- a/pkg/common/db/newRedisModel.go +++ b/pkg/common/db/newRedisModel.go @@ -128,30 +128,27 @@ func (d *DataBases) GetUserGlobalMsgRecvOpt(userID string) (int, error) { return utils.StringToInt(result), err } func (d *DataBases) GetMessageListBySeq(userID string, seqList []uint32, operationID string) (seqMsg []*pbCommon.MsgData, failedSeqList []uint32, errResult error) { - var keys []string for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) - keys = append(keys, key) - } - result, err := d.rdb.MGet(context.Background(), keys...).Result() - if err != nil { - errResult = err - failedSeqList = seqList - log2.NewWarn(operationID, "redis get message error:", err.Error(), seqList) - } else { - for _, v := range result { + + result, err := d.rdb.Get(context.Background(), key).Result() + if err != nil { + errResult = err + failedSeqList = append(failedSeqList, v) + log2.NewWarn(operationID, "redis get message error:", err.Error(), v) + } else { msg := pbCommon.MsgData{} - err = jsonpb.UnmarshalString(v.(string), &msg) + err = jsonpb.UnmarshalString(result, &msg) if err != nil { errResult = err - failedSeqList = seqList + failedSeqList = append(failedSeqList, v) log2.NewWarn(operationID, "Unmarshal err", result, err.Error()) - break } else { log2.NewDebug(operationID, "redis get msg is ", msg.String()) seqMsg = append(seqMsg, &msg) } + } } return seqMsg, failedSeqList, errResult From 0d2c0e91c804c8a990cfaee5e080b6f8abb0a048 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 10:26:37 +0800 Subject: [PATCH 201/256] use sarama v1.29.0 --- go.mod | 3 ++- internal/msg_gateway/gate/logic.go | 2 +- internal/rpc/msg/send_msg.go | 12 ++++++------ pkg/common/kafka/producer.go | 10 ++++++---- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 6df88e549..e34d69ab0 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,6 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.11.1 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 @@ -51,3 +50,5 @@ require ( gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) + +replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0 diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 56eed3587..95b6fd85c 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -256,7 +256,7 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { } func (ws *WServer) sendSignalMsgResp(conn *UserConn, errCode int32, errMsg string, m *Req, pb *pbRtc.SignalResp) { // := make(map[string]interface{}) - log.Debug(m.OperationID, "SignalMsgResp is", pb.String()) + log.Debug(m.OperationID, "sendSignalMsgResp is", pb.String()) b, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 6afbc7549..3dc98c3a7 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -160,29 +160,29 @@ func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false) utils.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) utils.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) - } } func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.SendMsgResp, error) { replay := pbChat.SendMsgResp{} newTime := db.GetCurrentTimestampByMill() - log.NewWarn(pb.OperationID, "rpc sendMsg come here", pb.String(), pb.MsgData.ClientMsgID) + log.Info(pb.OperationID, "rpc sendMsg come here ", pb.String()) flag, errCode, errMsg := isMessageHasReadEnabled(pb) + log.Info(pb.OperationID, "isMessageHasReadEnabled ", flag) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } flag, errCode, errMsg = userRelationshipVerification(pb) + log.Info(pb.OperationID, "userRelationshipVerification ", flag) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } rpc.encapsulateMsgData(pb.MsgData) - log.Info(pb.OperationID, "this is a test MsgData ", pb.MsgData) msgToMQSingle := pbChat.MsgDataToMQ{Token: pb.Token, OperationID: pb.OperationID, MsgData: pb.MsgData} - // callback callbackResp := callbackWordFilter(pb) + log.Info(pb.OperationID, "callbackWordFilter ", callbackResp) if callbackResp.ErrCode != 0 { - log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) + log.Error(pb.OperationID, utils.GetSelfFuncName(), "callbackWordFilter resp: ", callbackResp) } log.NewDebug(pb.OperationID, utils.GetSelfFuncName(), "callbackResp: ", callbackResp) if callbackResp.ActionCode != constant.ActionAllow { @@ -212,7 +212,7 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S log.NewInfo(msgToMQSingle.OperationID, msgToMQSingle) err1 := rpc.sendMsgToKafka(&msgToMQSingle, msgToMQSingle.MsgData.RecvID, constant.OnlineStatus) if err1 != nil { - log.NewError(msgToMQSingle.OperationID, "kafka send msg err:RecvID", msgToMQSingle.MsgData.RecvID, msgToMQSingle.String()) + log.NewError(msgToMQSingle.OperationID, "kafka send msg err :RecvID", msgToMQSingle.MsgData.RecvID, msgToMQSingle.String(), err1.Error()) return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0) } } diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index c4cd9717a..1ebaaab10 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -2,6 +2,7 @@ package kafka import ( log2 "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "errors" "github.com/Shopify/sarama" "github.com/golang/protobuf/proto" @@ -45,15 +46,16 @@ func (p *Producer) SendMessage(m proto.Message, key string, operationID string) return -1, -1, err } if len(bMsg) == 0 { - return 0, 0, errors.New("msg content is nil") + log2.Error(operationID, "len(bMsg) == 0 ") + return 0, 0, errors.New("len(bMsg) == 0 ") } kMsg.Value = sarama.ByteEncoder(bMsg) - log2.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer) + log2.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer, "len: ", kMsg.Key.Length(), kMsg.Value.Length()) if kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 { log2.Error(operationID, "kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 ", kMsg) return -1, -1, errors.New("key or value == 0") } a, b, c := p.producer.SendMessage(kMsg) - log2.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg, p.producer) - return a, b, c + log2.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg.Key.Length(), kMsg.Value.Length(), p.producer) + return a, b, utils.Wrap(c, "") } From ea76f208259f754463d6f92c5737f5175b9cd972 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 11:27:55 +0800 Subject: [PATCH 202/256] GlobalRecvMsgOpt --- internal/api/user/user.go | 4 +- internal/rpc/user/user.go | 11 +- pkg/base_info/public_struct.go | 2 +- .../mysql_model/im_mysql_model/user_model.go | 5 +- pkg/proto/user/user.pb.go | 398 ++++++++++-------- pkg/proto/user/user.proto | 2 + 6 files changed, 242 insertions(+), 180 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 6be7ed710..9f9e5d70a 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -191,7 +191,9 @@ func UpdateUserInfo(c *gin.Context) { return } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) - + if params.GlobalRecvMsgOpt != nil { + req.GlobalRecvMsgOpt.Value = *params.GlobalRecvMsgOpt + } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) client := rpc.NewUserClient(etcdConn) RpcResp, err := client.UpdateUserInfo(context.Background(), req) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index bacd88c9c..bfe458dce 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -383,7 +383,16 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI if req.UserInfo.Birth != 0 { user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth)) } - err := imdb.UpdateUserInfo(user) + m := make(map[string]interface{}, 1) + if req.GlobalRecvMsgOpt != nil { + m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt + err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + } + err := imdb.UpdateUserInfo(user, m) if err != nil { log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 7c4a6fa8d..89e2be936 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -13,7 +13,7 @@ type ApiUserInfo struct { PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` Birth uint32 `json:"birth" binding:"omitempty"` Email string `json:"email" binding:"omitempty,max=64"` - GlobalRecvMsgOpt int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` + GlobalRecvMsgOpt *int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` Ex string `json:"ex" binding:"omitempty,max=1024"` } diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index 4f26cecbe..e58ed8327 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -96,13 +96,16 @@ func GetUserNameByUserID(userID string) (string, error) { return user.Nickname, nil } -func UpdateUserInfo(user db.User) error { +func UpdateUserInfo(user db.User, m ...map[string]interface{}) error { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return err } dbConn.LogMode(false) err = dbConn.Table("users").Where("user_id=?", user.UserID).Update(&user).Error + if len(m) > 0 { + err = dbConn.Table("users").Where("user_id=?", user.UserID).Updates(m[0]).Error + } return err } diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index eeb501ebb..b6ae8daf0 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -7,6 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import sdk_ws "Open_IM/pkg/proto/sdk_ws" +import wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" import ( context "golang.org/x/net/context" @@ -36,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{0} + return fileDescriptor_user_1b2c9183e940b6c0, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -83,7 +84,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{1} + return fileDescriptor_user_1b2c9183e940b6c0, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -136,7 +137,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{2} + return fileDescriptor_user_1b2c9183e940b6c0, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -182,7 +183,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{3} + return fileDescriptor_user_1b2c9183e940b6c0, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -228,7 +229,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{4} + return fileDescriptor_user_1b2c9183e940b6c0, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -275,7 +276,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{5} + return fileDescriptor_user_1b2c9183e940b6c0, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -328,7 +329,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{6} + return fileDescriptor_user_1b2c9183e940b6c0, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -374,7 +375,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{6, 0} + return fileDescriptor_user_1b2c9183e940b6c0, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -421,7 +422,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{7} + return fileDescriptor_user_1b2c9183e940b6c0, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -474,7 +475,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{8} + return fileDescriptor_user_1b2c9183e940b6c0, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -509,19 +510,20 @@ func (m *GetUserInfoResp) GetUserInfoList() []*sdk_ws.UserInfo { } type UpdateUserInfoReq struct { - UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` - OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + GlobalRecvMsgOpt *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{9} + return fileDescriptor_user_1b2c9183e940b6c0, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -562,6 +564,13 @@ func (m *UpdateUserInfoReq) GetOperationID() string { return "" } +func (m *UpdateUserInfoReq) GetGlobalRecvMsgOpt() *wrapperspb.Int32Value { + if m != nil { + return m.GlobalRecvMsgOpt + } + return nil +} + type UpdateUserInfoResp struct { CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -573,7 +582,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{10} + return fileDescriptor_user_1b2c9183e940b6c0, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -624,7 +633,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{11} + return fileDescriptor_user_1b2c9183e940b6c0, []int{11} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -755,7 +764,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{12} + return fileDescriptor_user_1b2c9183e940b6c0, []int{12} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -807,7 +816,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{13} + return fileDescriptor_user_1b2c9183e940b6c0, []int{13} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -849,7 +858,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{14} + return fileDescriptor_user_1b2c9183e940b6c0, []int{14} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -915,7 +924,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{15} + return fileDescriptor_user_1b2c9183e940b6c0, []int{15} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -955,7 +964,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{16} + return fileDescriptor_user_1b2c9183e940b6c0, []int{16} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1008,7 +1017,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{17} + return fileDescriptor_user_1b2c9183e940b6c0, []int{17} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1055,7 +1064,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{18} + return fileDescriptor_user_1b2c9183e940b6c0, []int{18} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1108,7 +1117,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{19} + return fileDescriptor_user_1b2c9183e940b6c0, []int{19} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1154,7 +1163,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{20} + return fileDescriptor_user_1b2c9183e940b6c0, []int{20} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1200,7 +1209,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{21} + return fileDescriptor_user_1b2c9183e940b6c0, []int{21} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1248,7 +1257,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{22} + return fileDescriptor_user_1b2c9183e940b6c0, []int{22} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1309,7 +1318,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{23} + return fileDescriptor_user_1b2c9183e940b6c0, []int{23} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1362,7 +1371,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{24} + return fileDescriptor_user_1b2c9183e940b6c0, []int{24} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1407,7 +1416,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{25} + return fileDescriptor_user_1b2c9183e940b6c0, []int{25} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1446,7 +1455,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{26} + return fileDescriptor_user_1b2c9183e940b6c0, []int{26} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1495,7 +1504,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{27} + return fileDescriptor_user_1b2c9183e940b6c0, []int{27} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1562,7 +1571,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{28} + return fileDescriptor_user_1b2c9183e940b6c0, []int{28} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1609,7 +1618,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{29} + return fileDescriptor_user_1b2c9183e940b6c0, []int{29} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1663,7 +1672,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{30} + return fileDescriptor_user_1b2c9183e940b6c0, []int{30} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1720,7 +1729,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{31} + return fileDescriptor_user_1b2c9183e940b6c0, []int{31} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1793,7 +1802,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{32} + return fileDescriptor_user_1b2c9183e940b6c0, []int{32} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1833,7 +1842,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{33} + return fileDescriptor_user_1b2c9183e940b6c0, []int{33} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1888,7 +1897,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{34} + return fileDescriptor_user_1b2c9183e940b6c0, []int{34} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -1951,7 +1960,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{35} + return fileDescriptor_user_1b2c9183e940b6c0, []int{35} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2017,7 +2026,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{36} + return fileDescriptor_user_1b2c9183e940b6c0, []int{36} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2058,7 +2067,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{37} + return fileDescriptor_user_1b2c9183e940b6c0, []int{37} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2117,7 +2126,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{38} + return fileDescriptor_user_1b2c9183e940b6c0, []int{38} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2157,7 +2166,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{39} + return fileDescriptor_user_1b2c9183e940b6c0, []int{39} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2209,7 +2218,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{40} + return fileDescriptor_user_1b2c9183e940b6c0, []int{40} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2249,7 +2258,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{41} + return fileDescriptor_user_1b2c9183e940b6c0, []int{41} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2303,7 +2312,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{42} + return fileDescriptor_user_1b2c9183e940b6c0, []int{42} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2358,7 +2367,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{43} + return fileDescriptor_user_1b2c9183e940b6c0, []int{43} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2418,7 +2427,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{44} + return fileDescriptor_user_1b2c9183e940b6c0, []int{44} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2463,7 +2472,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{45} + return fileDescriptor_user_1b2c9183e940b6c0, []int{45} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2503,7 +2512,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{46} + return fileDescriptor_user_1b2c9183e940b6c0, []int{46} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2555,7 +2564,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_e11c6a5241e13fcd, []int{47} + return fileDescriptor_user_1b2c9183e940b6c0, []int{47} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -2667,6 +2676,7 @@ type UserClient interface { GetBlockUsers(ctx context.Context, in *GetBlockUsersReq, opts ...grpc.CallOption) (*GetBlockUsersResp, error) GetBlockUserById(ctx context.Context, in *GetBlockUserByIdReq, opts ...grpc.CallOption) (*GetBlockUserByIdResp, error) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ...grpc.CallOption) (*DeleteUserResp, error) + GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) } type userClient struct { @@ -2875,6 +2885,15 @@ func (c *userClient) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ... return out, nil } +func (c *userClient) GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) { + out := new(GetUserInfoResp) + err := grpc.Invoke(ctx, "/user.user/GetUserInfoFromCache", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for User service type UserServer interface { @@ -2900,6 +2919,7 @@ type UserServer interface { GetBlockUsers(context.Context, *GetBlockUsersReq) (*GetBlockUsersResp, error) GetBlockUserById(context.Context, *GetBlockUserByIdReq) (*GetBlockUserByIdResp, error) DeleteUser(context.Context, *DeleteUserReq) (*DeleteUserResp, error) + GetUserInfoFromCache(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) } func RegisterUserServer(s *grpc.Server, srv UserServer) { @@ -3302,6 +3322,24 @@ func _User_DeleteUser_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _User_GetUserInfoFromCache_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUserInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).GetUserInfoFromCache(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/GetUserInfoFromCache", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).GetUserInfoFromCache(ctx, req.(*GetUserInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + var _User_serviceDesc = grpc.ServiceDesc{ ServiceName: "user.user", HandlerType: (*UserServer)(nil), @@ -3394,130 +3432,138 @@ var _User_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteUser", Handler: _User_DeleteUser_Handler, }, + { + MethodName: "GetUserInfoFromCache", + Handler: _User_GetUserInfoFromCache_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_e11c6a5241e13fcd) } - -var fileDescriptor_user_e11c6a5241e13fcd = []byte{ - // 1857 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xdd, 0x4f, 0x24, 0x4b, - 0x15, 0x4f, 0xcf, 0xc7, 0x02, 0x67, 0x98, 0x61, 0x28, 0xb8, 0xd0, 0xb7, 0x55, 0xc4, 0xce, 0xf5, - 0x4a, 0x48, 0x04, 0x5d, 0x8d, 0x6b, 0xd6, 0xe8, 0x2e, 0x33, 0xb0, 0x64, 0x8c, 0x0b, 0x93, 0x9e, - 0x25, 0x31, 0xc6, 0x84, 0xf4, 0xce, 0x14, 0xd0, 0x61, 0xa6, 0xbb, 0xb7, 0xab, 0x87, 0x5d, 0x7c, - 0x59, 0xe3, 0xc7, 0x8b, 0xf1, 0xc5, 0xa7, 0x5d, 0x7d, 0xf0, 0xef, 0xf0, 0x5d, 0x9f, 0xfc, 0x0f, - 0xf4, 0xc5, 0x7f, 0xc5, 0xd4, 0x47, 0x77, 0x57, 0x55, 0x37, 0x30, 0xb7, 0x21, 0xfb, 0x02, 0x53, - 0xa7, 0xbe, 0x7e, 0xe7, 0x9c, 0xdf, 0x39, 0x75, 0xaa, 0x1a, 0x96, 0xa6, 0x04, 0x47, 0xbb, 0xf4, - 0xcf, 0x4e, 0x18, 0x05, 0x71, 0x80, 0x6a, 0xf4, 0xb7, 0xf5, 0xad, 0xe3, 0x10, 0xfb, 0xa7, 0xbd, - 0x97, 0xbb, 0xe1, 0xe5, 0xf9, 0x2e, 0xeb, 0xd8, 0x25, 0xa3, 0xcb, 0xd3, 0xb7, 0x64, 0xf7, 0x2d, - 0xe1, 0x03, 0xed, 0x9f, 0x01, 0x74, 0x83, 0xc9, 0x24, 0xf0, 0x1d, 0x4c, 0x42, 0x64, 0xc2, 0x1c, - 0x8e, 0xa2, 0x6e, 0x30, 0xc2, 0xa6, 0xb1, 0x69, 0x6c, 0xd5, 0x9d, 0xa4, 0x89, 0xd6, 0xe0, 0x11, - 0x8e, 0xa2, 0x97, 0xe4, 0xdc, 0xac, 0x6c, 0x1a, 0x5b, 0x0b, 0x8e, 0x68, 0xd9, 0xbf, 0x81, 0xd6, - 0x3e, 0x1e, 0xe3, 0x18, 0x9f, 0x10, 0x1c, 0x11, 0x07, 0xbf, 0x41, 0xdb, 0xd0, 0xce, 0x24, 0xbd, - 0xfd, 0x5f, 0x78, 0x24, 0x36, 0x2b, 0x9b, 0xd5, 0xad, 0x05, 0x27, 0x27, 0x47, 0x16, 0xcc, 0x1f, - 0x87, 0xbc, 0x6d, 0x56, 0xd9, 0xba, 0x69, 0x1b, 0x6d, 0x42, 0xe3, 0x38, 0xc4, 0x91, 0x1b, 0x7b, - 0x81, 0xdf, 0xdb, 0x37, 0x6b, 0xac, 0x5b, 0x16, 0xd9, 0x01, 0x2c, 0x29, 0x7b, 0x93, 0x10, 0x7d, - 0x4f, 0x56, 0x87, 0xe9, 0xd0, 0x78, 0xdc, 0xde, 0x61, 0x86, 0xc9, 0xe4, 0x8e, 0xac, 0xf2, 0x36, - 0xb4, 0x5f, 0xb8, 0xde, 0x18, 0x8f, 0xf2, 0x70, 0x75, 0xb9, 0x7d, 0x0c, 0x4b, 0x87, 0x38, 0xde, - 0x1b, 0x8f, 0xb9, 0x8c, 0x6a, 0x6b, 0xc1, 0x7c, 0x90, 0x68, 0x60, 0x70, 0x0d, 0x02, 0x49, 0x83, - 0x40, 0xd2, 0x80, 0x1b, 0x4e, 0x16, 0xd9, 0x23, 0x68, 0xab, 0x0b, 0x96, 0x52, 0x61, 0x03, 0x20, - 0x07, 0x5e, 0x92, 0xd8, 0xd7, 0xb0, 0xb4, 0x37, 0x1c, 0x06, 0x53, 0x3f, 0xee, 0x5e, 0xe0, 0xe1, - 0x25, 0x85, 0xbd, 0x05, 0x4b, 0xec, 0xb7, 0x34, 0xcf, 0x60, 0xf3, 0x74, 0xb1, 0xe2, 0xa2, 0xca, - 0xed, 0x2e, 0xaa, 0xe6, 0x5d, 0xf4, 0x3f, 0x03, 0xda, 0xea, 0xde, 0x5c, 0xc3, 0xe1, 0x0c, 0x1a, - 0x66, 0x63, 0xd0, 0x21, 0x80, 0x83, 0xc9, 0x74, 0x1c, 0xa7, 0x1a, 0x36, 0x1e, 0x7f, 0x87, 0xcf, - 0xd0, 0x57, 0xdf, 0x19, 0x78, 0xfe, 0xf9, 0x98, 0x51, 0x62, 0x10, 0xbb, 0xf1, 0x94, 0x38, 0xd2, - 0x54, 0xab, 0x0f, 0x6d, 0xbd, 0x9f, 0x52, 0x7b, 0x2a, 0x3b, 0x50, 0xb4, 0xd0, 0x17, 0xd0, 0x74, - 0xf9, 0xe2, 0x7c, 0xa0, 0x50, 0x5f, 0x15, 0xda, 0x3e, 0xb4, 0x0e, 0x71, 0xcc, 0x0c, 0xe2, 0x9f, - 0x05, 0xd4, 0xb6, 0x1b, 0x00, 0x53, 0xdd, 0xac, 0x92, 0xe4, 0x9e, 0x16, 0xfd, 0x83, 0xc1, 0x48, - 0x98, 0x6d, 0x58, 0xca, 0xa0, 0xcf, 0x60, 0x31, 0x59, 0x81, 0xa1, 0xac, 0x32, 0x93, 0x7e, 0x6d, - 0x87, 0xe0, 0xe8, 0x0a, 0x47, 0xa7, 0x6e, 0xe8, 0x9d, 0x86, 0x6e, 0xe4, 0x4e, 0xc8, 0x4e, 0xba, - 0x91, 0x32, 0xc1, 0xfe, 0x93, 0x01, 0xcb, 0x27, 0xe1, 0xc8, 0x15, 0xe1, 0x2c, 0x54, 0x7f, 0x02, - 0xf3, 0x49, 0x53, 0xc0, 0xb8, 0x75, 0xc9, 0x74, 0xf0, 0x5d, 0x36, 0x09, 0xf2, 0x36, 0x91, 0xc3, - 0xe8, 0x05, 0x20, 0x1d, 0x4b, 0x19, 0xab, 0xd8, 0xff, 0xad, 0xc2, 0x62, 0x37, 0xf0, 0xaf, 0x70, - 0x44, 0xd8, 0xd2, 0xcc, 0x1d, 0x6f, 0x7d, 0x1c, 0x29, 0x01, 0x2e, 0x8b, 0xd0, 0x97, 0xd0, 0x92, - 0x67, 0xa4, 0xf0, 0x35, 0x29, 0x25, 0x85, 0x83, 0x87, 0x57, 0x2f, 0xc9, 0xf9, 0x71, 0x18, 0x33, - 0x1d, 0xea, 0x8e, 0x24, 0xa1, 0x69, 0x48, 0x9e, 0xf1, 0xea, 0x3a, 0xc4, 0x2c, 0xe5, 0xd5, 0x9d, - 0x9c, 0x9c, 0x12, 0x56, 0x00, 0xaa, 0x73, 0xc2, 0x0a, 0x2c, 0x26, 0xcc, 0x1d, 0x46, 0xc1, 0x34, - 0xec, 0xed, 0x9b, 0x8f, 0x58, 0x47, 0xd2, 0xa4, 0x7a, 0x9c, 0xf8, 0x11, 0x76, 0x47, 0x5d, 0xca, - 0x5c, 0x73, 0x8e, 0x2d, 0x2c, 0x8b, 0x28, 0xd9, 0xf7, 0x23, 0xf7, 0x2c, 0x7e, 0x85, 0xdf, 0xc5, - 0xaf, 0xbc, 0x09, 0x36, 0xe7, 0x37, 0x8d, 0xad, 0xaa, 0xa3, 0x0a, 0xa9, 0x9b, 0x7a, 0xa4, 0xef, - 0xf9, 0x3e, 0x1e, 0x99, 0x0b, 0x9b, 0xc6, 0xd6, 0xbc, 0x93, 0xb6, 0x91, 0x0d, 0x8b, 0x7b, 0x71, - 0xec, 0x0e, 0x2f, 0xf0, 0x88, 0xf9, 0x1f, 0x18, 0x04, 0x45, 0x46, 0x77, 0xe9, 0x91, 0x7e, 0xe4, - 0x5d, 0xb9, 0x31, 0xee, 0x5e, 0xb8, 0xb1, 0xd9, 0x60, 0x8b, 0xa8, 0x42, 0x8a, 0x96, 0x01, 0xdf, - 0x8b, 0x99, 0x19, 0x16, 0x39, 0x5a, 0x49, 0x44, 0xf7, 0xea, 0x91, 0xa3, 0x20, 0xee, 0xf9, 0x4c, - 0x6a, 0x36, 0xd9, 0x32, 0x8a, 0x0c, 0xb5, 0xa0, 0x72, 0xf0, 0xce, 0x6c, 0x31, 0x14, 0x95, 0x83, - 0x77, 0xf6, 0xdf, 0x0c, 0x40, 0x03, 0x1c, 0xcb, 0xd6, 0xa4, 0x94, 0xfd, 0x91, 0xea, 0x72, 0xc1, - 0x13, 0x94, 0xf0, 0x44, 0x1a, 0xac, 0x52, 0x63, 0x1b, 0xda, 0x7e, 0x10, 0x7b, 0x67, 0xde, 0x30, - 0x73, 0x58, 0x85, 0x3b, 0x4c, 0x97, 0xcf, 0x10, 0xd5, 0x87, 0xb0, 0x92, 0xc3, 0x56, 0x8a, 0xc2, - 0xff, 0x36, 0xa0, 0x3d, 0xc0, 0x71, 0xc6, 0x2c, 0xaa, 0xe3, 0x27, 0xa5, 0x71, 0xce, 0x2a, 0xb5, - 0xd9, 0xac, 0x52, 0xcf, 0x5b, 0xe5, 0x00, 0x96, 0x35, 0x5d, 0x4a, 0xd9, 0xe4, 0xb7, 0x06, 0xa0, - 0xc3, 0xbc, 0xe7, 0xf3, 0x3a, 0x1b, 0x85, 0x3a, 0x6b, 0xd6, 0xab, 0xe4, 0xad, 0x77, 0xb7, 0x7f, - 0xdf, 0xc3, 0xca, 0xe1, 0x43, 0xf8, 0x37, 0x47, 0xd7, 0xca, 0x6c, 0x74, 0xb5, 0x7f, 0x6f, 0xe4, - 0x10, 0x90, 0xd9, 0xa8, 0x41, 0x4b, 0x05, 0xc5, 0x20, 0x44, 0x94, 0x18, 0xba, 0x78, 0x06, 0x33, - 0xfc, 0xce, 0x80, 0xd5, 0x3c, 0x8a, 0x52, 0x86, 0xf8, 0x31, 0x34, 0x95, 0x65, 0x44, 0x55, 0x50, - 0x64, 0x09, 0x75, 0xa0, 0xfd, 0x6b, 0x58, 0xe3, 0x45, 0x57, 0x09, 0x63, 0x68, 0x2a, 0x56, 0xf2, - 0x2a, 0xfe, 0xd1, 0x80, 0xf5, 0xc2, 0xe5, 0x3f, 0xb1, 0x96, 0xff, 0x32, 0xc0, 0xec, 0xb8, 0xf1, - 0xf0, 0x62, 0x50, 0xe0, 0xf5, 0xdc, 0xb2, 0xc6, 0x8c, 0xcb, 0xce, 0x10, 0x0c, 0x45, 0x29, 0xa0, - 0x3a, 0x5b, 0x0a, 0xa8, 0x15, 0x05, 0xce, 0xe7, 0x37, 0x68, 0x51, 0xca, 0x9e, 0x26, 0xcc, 0x0d, - 0xa6, 0xc3, 0x21, 0x26, 0x09, 0x89, 0x93, 0x26, 0x3d, 0x54, 0x79, 0xbd, 0xcf, 0x6a, 0xa1, 0x05, - 0x47, 0xb4, 0xec, 0x1e, 0x34, 0x1d, 0x4c, 0xbc, 0x73, 0x9f, 0xaa, 0x47, 0x6d, 0x97, 0x9c, 0xbe, - 0xa3, 0xa4, 0x5c, 0xe4, 0xad, 0x19, 0xa8, 0xd1, 0x81, 0x96, 0xbc, 0x54, 0xa9, 0x5c, 0xf6, 0xf3, - 0xb4, 0xdc, 0xec, 0x5c, 0xf7, 0x46, 0xf7, 0xc3, 0xf3, 0xd1, 0x80, 0x1a, 0x1d, 0x4c, 0x8f, 0xd3, - 0x7e, 0x14, 0x9c, 0x79, 0x63, 0xdc, 0xbf, 0x08, 0xe2, 0x40, 0x2c, 0xa4, 0xc8, 0xe8, 0xd1, 0x7f, - 0xe4, 0x0d, 0x2f, 0x7d, 0x77, 0x82, 0x93, 0x0a, 0x2d, 0x69, 0x4b, 0x10, 0xaa, 0x0a, 0x84, 0x0d, - 0x80, 0x6e, 0x84, 0xdd, 0x18, 0xb3, 0x8a, 0x82, 0x7b, 0x57, 0x92, 0x50, 0x6f, 0xf4, 0x48, 0x67, - 0x1c, 0x0c, 0x2f, 0x59, 0xf6, 0x9f, 0x77, 0x92, 0xa6, 0x3d, 0x4c, 0x8b, 0x5c, 0xae, 0x66, 0xc9, - 0x7b, 0x11, 0xbb, 0x06, 0x8b, 0x1c, 0x09, 0x7c, 0x2c, 0xb3, 0x3d, 0x93, 0xdb, 0x1f, 0x0c, 0x58, - 0x16, 0xbb, 0x90, 0xce, 0xf5, 0x91, 0x3b, 0xc1, 0xe2, 0x46, 0x47, 0x25, 0xb4, 0x99, 0xdc, 0xe8, - 0x92, 0x36, 0xda, 0x07, 0xe8, 0xbb, 0xe7, 0x9e, 0x2f, 0xe7, 0xde, 0x2f, 0x0a, 0x2a, 0x5c, 0x07, - 0xbf, 0x99, 0x62, 0x12, 0x67, 0x63, 0x1d, 0x69, 0xde, 0x0c, 0x79, 0xf2, 0xaf, 0xfc, 0xc4, 0x52, - 0x90, 0x91, 0x10, 0x6d, 0x42, 0x9d, 0x02, 0x4f, 0xc2, 0x55, 0xd6, 0x88, 0x77, 0xa0, 0x83, 0x02, - 0x80, 0xdf, 0x2e, 0x04, 0x48, 0xc2, 0xc0, 0x27, 0xf8, 0x06, 0x84, 0x89, 0x0d, 0xa6, 0x13, 0x22, - 0x62, 0x37, 0x6d, 0xdb, 0xff, 0x30, 0x60, 0x71, 0x6f, 0x1c, 0xf3, 0x78, 0xbf, 0x17, 0x01, 0xe9, - 0x88, 0xfe, 0x45, 0xe0, 0xe3, 0xa3, 0xe9, 0xe4, 0x35, 0x8e, 0xd8, 0x4e, 0x55, 0x47, 0x16, 0x29, - 0xac, 0xab, 0x69, 0xac, 0x5b, 0x85, 0xfa, 0xc1, 0xc4, 0xf5, 0xc6, 0xa2, 0x72, 0xe0, 0x0d, 0xe9, - 0x26, 0x31, 0x12, 0x55, 0x70, 0xda, 0xb6, 0xf7, 0xa0, 0x29, 0x21, 0x2f, 0xc3, 0x29, 0xfb, 0x2f, - 0x06, 0x34, 0x12, 0xcf, 0x24, 0x47, 0x86, 0xa4, 0xa4, 0x91, 0x57, 0xf2, 0x61, 0x38, 0x23, 0xb3, - 0xb2, 0xaa, 0xb2, 0xd2, 0xfe, 0xa7, 0x01, 0x8b, 0x19, 0xa6, 0x7b, 0x86, 0x4a, 0xb5, 0x28, 0x54, - 0x34, 0x5e, 0x55, 0x1f, 0x82, 0x57, 0x35, 0x8d, 0x57, 0x1f, 0x0d, 0x80, 0xbd, 0xd1, 0x28, 0x61, - 0xd5, 0xdd, 0x86, 0xd5, 0xd8, 0x23, 0xf8, 0x25, 0xb3, 0xe7, 0xa6, 0xbc, 0x84, 0xa0, 0x26, 0x31, - 0x8a, 0xfd, 0x56, 0x78, 0x53, 0xd7, 0x78, 0xf3, 0x0c, 0x1a, 0x29, 0xb2, 0x52, 0xac, 0xf9, 0xb3, - 0x01, 0x8b, 0x2c, 0xb1, 0xdd, 0x15, 0x33, 0x5f, 0x42, 0xeb, 0xc0, 0x1f, 0xed, 0x7b, 0xc4, 0x7d, - 0x3d, 0xe6, 0x59, 0x53, 0xd4, 0xe1, 0xaa, 0xf4, 0xee, 0x14, 0xa2, 0xe8, 0x53, 0xcb, 0xc7, 0x81, - 0x84, 0xa6, 0x94, 0x46, 0x67, 0xd0, 0x3a, 0xf1, 0x67, 0x52, 0xe9, 0xee, 0x34, 0x20, 0x43, 0xad, - 0x6a, 0x50, 0xbb, 0xb0, 0xa4, 0xec, 0x53, 0x0a, 0xec, 0xdf, 0x0d, 0xf6, 0xce, 0x96, 0x2e, 0xc3, - 0x22, 0x57, 0x8d, 0x4b, 0xe3, 0x61, 0x72, 0x79, 0x81, 0x76, 0xb6, 0xe4, 0xfa, 0xa3, 0xe9, 0x44, - 0xe4, 0x53, 0x45, 0x66, 0xbf, 0x87, 0x85, 0xb4, 0x4d, 0x63, 0x91, 0xfe, 0x17, 0x90, 0x94, 0x58, - 0x64, 0xfd, 0xdb, 0xd0, 0xee, 0xe0, 0x73, 0xcf, 0xcf, 0xb3, 0x24, 0x27, 0x2f, 0xe0, 0x53, 0xb5, - 0x88, 0x4f, 0xf6, 0x7f, 0xf8, 0x51, 0x28, 0x5b, 0xa8, 0x54, 0x1e, 0xd9, 0x05, 0xc8, 0xd6, 0x10, - 0xd9, 0x64, 0x89, 0xcf, 0xc8, 0x9c, 0x28, 0x0d, 0xf9, 0x14, 0x89, 0xa5, 0xcf, 0x6e, 0x3e, 0xe9, - 0x9e, 0x49, 0xdd, 0xb4, 0x0e, 0x73, 0xb4, 0x79, 0xea, 0x7d, 0xf5, 0xc2, 0xe9, 0x80, 0xdd, 0x62, - 0xb4, 0x15, 0x49, 0x88, 0xbe, 0x2b, 0xb9, 0x51, 0x64, 0xfa, 0x9c, 0xf2, 0xd9, 0x08, 0xfb, 0x0c, - 0x9a, 0xd9, 0xfb, 0xf5, 0xfd, 0x20, 0xdd, 0x1a, 0x43, 0x1d, 0xf9, 0x8d, 0xbe, 0x9c, 0x63, 0x1f, - 0x7f, 0x68, 0xf0, 0x13, 0x02, 0x3d, 0x4d, 0xcf, 0x3f, 0xf6, 0xa2, 0xb3, 0xca, 0x67, 0xa9, 0x4f, - 0xa0, 0xd6, 0x67, 0x05, 0x52, 0x12, 0xa2, 0x2e, 0xb4, 0xd4, 0x77, 0x3a, 0xb4, 0x2e, 0xd8, 0xad, - 0xbf, 0x24, 0x5a, 0x66, 0x71, 0x07, 0x09, 0x29, 0x00, 0xe9, 0xd5, 0x3f, 0x01, 0xa0, 0x7e, 0x84, - 0x48, 0x00, 0xe8, 0x9f, 0x07, 0x7e, 0xca, 0x0e, 0xca, 0xf4, 0xbd, 0x1d, 0x65, 0x38, 0xe5, 0x47, - 0x7d, 0x6b, 0xad, 0x48, 0xcc, 0xa7, 0xcb, 0xcf, 0xcd, 0xc9, 0x74, 0xed, 0x71, 0x3d, 0x99, 0x9e, - 0x7b, 0xf7, 0x7e, 0xc1, 0x8a, 0x5a, 0xe5, 0x15, 0xc9, 0x4c, 0x77, 0xd2, 0x5e, 0x27, 0xac, 0xcf, - 0x6f, 0xe8, 0x21, 0x21, 0x72, 0x18, 0xa1, 0xf5, 0x1b, 0x26, 0xfa, 0xba, 0x8c, 0x5a, 0xbf, 0xf2, - 0x59, 0xdf, 0xb8, 0xa5, 0x97, 0x84, 0xa8, 0xc7, 0x32, 0xa4, 0xba, 0x60, 0x31, 0x04, 0xb6, 0x9a, - 0x75, 0x53, 0x17, 0x09, 0xd1, 0x2f, 0xe1, 0xb3, 0xc2, 0x2b, 0x1b, 0xda, 0x10, 0xb1, 0x70, 0xc3, - 0xad, 0xd4, 0xfa, 0xe6, 0xad, 0xfd, 0xdc, 0x80, 0x83, 0x62, 0x03, 0x0e, 0x6e, 0x34, 0x60, 0xd1, - 0xb3, 0xda, 0x73, 0x68, 0x2a, 0xef, 0x4a, 0x68, 0x2d, 0x1d, 0xab, 0x3c, 0x9c, 0x59, 0xeb, 0x85, - 0x72, 0x4e, 0x42, 0xe9, 0x7e, 0xa2, 0x45, 0x81, 0xc8, 0x30, 0x5a, 0x14, 0xa4, 0x59, 0xa2, 0x9b, - 0x5e, 0xe1, 0x44, 0x6d, 0x9f, 0x44, 0x41, 0xee, 0x2e, 0x62, 0x99, 0xc5, 0x1d, 0x24, 0x44, 0x4f, - 0xd8, 0x17, 0x11, 0x71, 0x97, 0x44, 0x2b, 0x7c, 0x9c, 0x72, 0x51, 0xb5, 0x56, 0xf3, 0x42, 0x12, - 0xa2, 0x1f, 0xc2, 0x42, 0x5a, 0x03, 0x23, 0x71, 0xe1, 0x97, 0xcb, 0x79, 0x6b, 0x25, 0x27, 0x23, - 0x21, 0xfa, 0x3e, 0xcc, 0x27, 0x20, 0xd0, 0xb2, 0x0a, 0x8a, 0xce, 0x41, 0xba, 0x88, 0x84, 0x68, - 0x07, 0xe6, 0x44, 0xd1, 0x84, 0x44, 0x6a, 0xc9, 0xaa, 0x3b, 0x6b, 0x59, 0x93, 0x70, 0x60, 0xd9, - 0x19, 0x88, 0xf4, 0xb4, 0x99, 0x01, 0x53, 0x8b, 0x81, 0xa7, 0xd0, 0x90, 0xea, 0x83, 0xc4, 0x11, - 0x6a, 0x69, 0x92, 0x38, 0x42, 0x2f, 0x24, 0x9e, 0x43, 0x53, 0x39, 0xf3, 0x50, 0x16, 0xf7, 0x4a, - 0xa9, 0x60, 0xad, 0x17, 0xca, 0xd3, 0xa8, 0x51, 0x0e, 0x02, 0x29, 0x6a, 0xf4, 0x23, 0x47, 0x8a, - 0x9a, 0xfc, 0xd9, 0xf1, 0x04, 0x20, 0xcb, 0x56, 0x89, 0x43, 0x95, 0xe3, 0xc1, 0x5a, 0xcd, 0x0b, - 0x49, 0xd8, 0x69, 0xfe, 0xaa, 0xb1, 0xc3, 0x3e, 0xfd, 0xfe, 0x84, 0xfe, 0x79, 0xfd, 0x88, 0x7d, - 0xd7, 0xfd, 0xc1, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x34, 0x9a, 0x78, 0xde, 0x13, 0x1e, 0x00, - 0x00, +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_1b2c9183e940b6c0) } + +var fileDescriptor_user_1b2c9183e940b6c0 = []byte{ + // 1922 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, + 0x15, 0x57, 0xdb, 0xce, 0x24, 0x79, 0x8e, 0x1d, 0xa7, 0x26, 0x3b, 0xe9, 0x6d, 0x60, 0x08, 0xad, + 0x65, 0x37, 0x1a, 0x09, 0x07, 0x66, 0x11, 0x83, 0x16, 0xc1, 0x6e, 0xec, 0x64, 0x2c, 0x23, 0x26, + 0xb1, 0xda, 0x33, 0x08, 0x21, 0xa4, 0xa8, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0x76, + 0x66, 0xc2, 0x65, 0x11, 0x1f, 0x37, 0x2e, 0x9c, 0x58, 0x38, 0xf0, 0x77, 0x70, 0x87, 0x13, 0x57, + 0x4e, 0x20, 0x24, 0xfe, 0x95, 0x55, 0x7d, 0x74, 0x77, 0x55, 0x75, 0x3b, 0xf1, 0x74, 0xa2, 0xb9, + 0x24, 0xae, 0x57, 0x5f, 0xbf, 0xf7, 0xde, 0xef, 0xbd, 0x7a, 0x55, 0x0d, 0x9b, 0x73, 0x82, 0xa3, + 0x7d, 0xfa, 0xa7, 0x1d, 0x46, 0x41, 0x1c, 0xa0, 0x1a, 0xfd, 0x6d, 0x7d, 0xeb, 0x24, 0xc4, 0xfe, + 0x69, 0xff, 0xc5, 0x7e, 0x78, 0x39, 0xd9, 0x67, 0x1d, 0xfb, 0x64, 0x7c, 0x79, 0xfa, 0x9a, 0xec, + 0xbf, 0x26, 0x7c, 0xa0, 0xf5, 0xd1, 0xe2, 0x21, 0x91, 0x1b, 0x86, 0x38, 0x12, 0x03, 0xed, 0x9f, + 0x00, 0x74, 0x83, 0xd9, 0x2c, 0xf0, 0x1d, 0x4c, 0x42, 0x64, 0xc2, 0x2a, 0x8e, 0xa2, 0x6e, 0x30, + 0xc6, 0xa6, 0xb1, 0x6b, 0xec, 0xad, 0x38, 0x49, 0x13, 0x3d, 0x82, 0x07, 0x38, 0x8a, 0x5e, 0x90, + 0x89, 0x59, 0xd9, 0x35, 0xf6, 0xd6, 0x1d, 0xd1, 0xb2, 0x7f, 0x0d, 0xcd, 0x43, 0x3c, 0xc5, 0x31, + 0x7e, 0x45, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x02, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, + 0x62, 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, + 0x95, 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, + 0xb3, 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, + 0x0e, 0xf5, 0xa7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x40, 0xeb, 0xb9, 0xeb, + 0x4d, 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, + 0x54, 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, + 0x70, 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x8f, 0x01, 0x72, 0xe0, 0x25, 0x89, + 0x7d, 0x0d, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x05, 0x1e, 0x5d, 0x52, 0xd8, 0x7b, + 0xb0, 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xec, 0xa2, 0x6a, + 0xde, 0x45, 0xff, 0x37, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, + 0x00, 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xf4, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, + 0xf4, 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, + 0xbd, 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, + 0x50, 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0xcf, 0x03, 0x6a, 0xdb, 0xc7, + 0x00, 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x8e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, + 0xa0, 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x0a, + 0x47, 0xa7, 0x6e, 0xe8, 0x9d, 0x86, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, + 0xdb, 0x80, 0xad, 0x57, 0xe1, 0xd8, 0x15, 0xe1, 0x2c, 0x54, 0x7f, 0x06, 0x6b, 0x49, 0x53, 0xc0, + 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x6d, 0x36, 0x09, 0xf2, 0x36, 0x91, 0x44, 0xa8, 0x07, 0xad, 0xc9, + 0x34, 0x38, 0x73, 0xa7, 0x0e, 0x1e, 0x5d, 0xbd, 0x20, 0x93, 0x93, 0x30, 0x66, 0xf9, 0x82, 0x6e, + 0x3f, 0x09, 0x82, 0xc9, 0x14, 0xf3, 0x6c, 0x77, 0x36, 0x3f, 0x6f, 0xf7, 0xfd, 0xf8, 0xe3, 0xa7, + 0x3f, 0x77, 0xa7, 0x73, 0xec, 0xe4, 0x26, 0xd9, 0xcf, 0x01, 0xe9, 0x4a, 0x95, 0x31, 0xaf, 0xfd, + 0xdf, 0x2a, 0x6c, 0x74, 0x03, 0xff, 0x0a, 0x47, 0x84, 0x61, 0x64, 0x7e, 0x7d, 0xed, 0xe3, 0x48, + 0xc9, 0x14, 0xb2, 0x08, 0x7d, 0x08, 0x4d, 0x79, 0x46, 0x6a, 0x07, 0x4d, 0x4a, 0xd9, 0x25, 0x69, + 0x59, 0x65, 0x59, 0x5a, 0x92, 0xd0, 0x7c, 0x26, 0xcf, 0x78, 0x79, 0x1d, 0x62, 0x66, 0x8b, 0x15, + 0x27, 0x27, 0xa7, 0xcc, 0x17, 0x80, 0x56, 0x38, 0xf3, 0x05, 0x16, 0x13, 0x56, 0x7b, 0x51, 0x30, + 0x0f, 0xfb, 0x87, 0xe6, 0x03, 0xd6, 0x91, 0x34, 0xa9, 0x1e, 0xaf, 0xfc, 0x08, 0xbb, 0xe3, 0x2e, + 0x0d, 0x01, 0x73, 0x95, 0x2d, 0x2c, 0x8b, 0x68, 0xd4, 0x1c, 0x46, 0xee, 0x79, 0xfc, 0x12, 0xbf, + 0x89, 0x5f, 0x7a, 0x33, 0x6c, 0xae, 0xed, 0x1a, 0x7b, 0x55, 0x47, 0x15, 0x52, 0x7f, 0xf7, 0xc9, + 0xc0, 0xf3, 0x7d, 0x3c, 0x36, 0xd7, 0x77, 0x8d, 0xbd, 0x35, 0x27, 0x6d, 0x23, 0x1b, 0x36, 0x0e, + 0xe2, 0xd8, 0x1d, 0x5d, 0xe0, 0x31, 0x23, 0x12, 0x30, 0x08, 0x8a, 0x8c, 0xee, 0xd2, 0x27, 0x83, + 0xc8, 0xbb, 0x72, 0x63, 0xdc, 0xbd, 0x70, 0x63, 0xb3, 0xce, 0x16, 0x51, 0x85, 0x14, 0x2d, 0x03, + 0x7e, 0x10, 0x33, 0x33, 0x6c, 0x70, 0xb4, 0x92, 0x88, 0xee, 0xd5, 0x27, 0xc7, 0x41, 0xdc, 0xf7, + 0x99, 0xd4, 0x6c, 0xb0, 0x65, 0x14, 0x19, 0x6a, 0x42, 0xe5, 0xe8, 0x8d, 0xd9, 0x64, 0x28, 0x2a, + 0x47, 0x6f, 0xec, 0xbf, 0x1a, 0x80, 0x86, 0x38, 0x96, 0xad, 0x49, 0xb9, 0xff, 0x03, 0xd5, 0xe5, + 0x82, 0x27, 0x28, 0xe1, 0x89, 0x34, 0x58, 0xa5, 0xc6, 0x13, 0x68, 0xf9, 0x41, 0xec, 0x9d, 0x7b, + 0xa3, 0xcc, 0x61, 0x15, 0xee, 0x30, 0x5d, 0xbe, 0x44, 0x7a, 0xe8, 0xc1, 0xc3, 0x1c, 0xb6, 0x52, + 0x14, 0xfe, 0x97, 0x01, 0xad, 0x21, 0x8e, 0x33, 0x66, 0x51, 0x1d, 0xdf, 0x29, 0x8d, 0x73, 0x56, + 0xa9, 0x2d, 0x67, 0x95, 0x95, 0xbc, 0x55, 0x8e, 0x60, 0x4b, 0xd3, 0xa5, 0x94, 0x4d, 0x7e, 0x63, + 0x00, 0xea, 0xe5, 0x3d, 0x9f, 0xd7, 0xd9, 0x28, 0xd4, 0x59, 0xb3, 0x5e, 0x25, 0x6f, 0xbd, 0xdb, + 0xfd, 0xfb, 0x05, 0x3c, 0xec, 0xdd, 0x87, 0x7f, 0x73, 0x74, 0xad, 0x2c, 0x47, 0x57, 0xfb, 0x77, + 0x46, 0x0e, 0x01, 0x59, 0x8e, 0x1a, 0xb4, 0xe6, 0x50, 0x0c, 0x42, 0x44, 0xad, 0xa2, 0x8b, 0x97, + 0x30, 0xc3, 0x6f, 0x0d, 0xd8, 0xce, 0xa3, 0x28, 0x65, 0x88, 0x1f, 0x42, 0x43, 0x59, 0x46, 0x94, + 0x17, 0x45, 0x96, 0x50, 0x07, 0xda, 0xbf, 0x82, 0x47, 0xbc, 0x7a, 0x2b, 0x61, 0x0c, 0x4d, 0xc5, + 0x4a, 0x5e, 0xc5, 0x3f, 0x18, 0xb0, 0x53, 0xb8, 0xfc, 0x3b, 0xd6, 0xf2, 0x9f, 0x06, 0x98, 0x1d, + 0x37, 0x1e, 0x5d, 0x0c, 0x0b, 0xbc, 0x9e, 0x5b, 0xd6, 0x58, 0x72, 0xd9, 0x25, 0x82, 0xa1, 0x28, + 0x05, 0x54, 0x97, 0x4b, 0x01, 0xb5, 0xa2, 0xc0, 0x79, 0x7f, 0x81, 0x16, 0xa5, 0xec, 0x69, 0xc2, + 0xea, 0x70, 0x3e, 0x1a, 0x61, 0x92, 0x90, 0x38, 0x69, 0xd2, 0x43, 0x95, 0x5f, 0x1c, 0x58, 0x51, + 0xb5, 0xee, 0x88, 0x96, 0xdd, 0x87, 0x86, 0x83, 0x89, 0x37, 0xf1, 0xa9, 0x7a, 0xd4, 0x76, 0xc9, + 0xe9, 0x3b, 0x4e, 0xea, 0x4e, 0xde, 0x5a, 0x82, 0x1a, 0x1d, 0x68, 0xca, 0x4b, 0x95, 0xca, 0x65, + 0x3f, 0x4d, 0xeb, 0xd6, 0xce, 0x75, 0x7f, 0x7c, 0x37, 0x3c, 0x5f, 0x1a, 0x50, 0xa3, 0x83, 0xe9, + 0x71, 0x3a, 0x88, 0x82, 0x73, 0x6f, 0x8a, 0x07, 0x17, 0x41, 0x1c, 0x88, 0x85, 0x14, 0x19, 0x3d, + 0xfa, 0x8f, 0xbd, 0xd1, 0xa5, 0xef, 0xce, 0x70, 0x52, 0xea, 0x25, 0x6d, 0x09, 0x42, 0x55, 0x81, + 0xf0, 0x18, 0xa0, 0x1b, 0x61, 0x37, 0xc6, 0xac, 0xa2, 0xe0, 0xde, 0x95, 0x24, 0xd4, 0x1b, 0x7d, + 0xd2, 0x99, 0x06, 0xa3, 0x4b, 0x96, 0xfd, 0xd7, 0x9c, 0xa4, 0x69, 0x8f, 0xd2, 0x6a, 0x99, 0xab, + 0x59, 0xf2, 0x82, 0xc5, 0x2e, 0xde, 0x22, 0x47, 0x02, 0x1f, 0xcb, 0x6c, 0xcf, 0xe4, 0xf6, 0x9f, + 0x0d, 0xd8, 0x12, 0xbb, 0x90, 0xce, 0xf5, 0xb1, 0x3b, 0xc3, 0xe2, 0x6a, 0x48, 0x25, 0xb4, 0x99, + 0x5c, 0x0d, 0x93, 0x36, 0x3a, 0x04, 0x18, 0xb8, 0x13, 0xcf, 0x97, 0x73, 0xef, 0x07, 0x05, 0xa5, + 0xb2, 0x83, 0x3f, 0x9f, 0x63, 0x12, 0x67, 0x63, 0x1d, 0x69, 0xde, 0x12, 0x79, 0xf2, 0x2f, 0xfc, + 0xc4, 0x52, 0x90, 0x91, 0x10, 0xed, 0xc2, 0x0a, 0x05, 0x9e, 0x84, 0xab, 0xac, 0x11, 0xef, 0x40, + 0x47, 0x05, 0x00, 0xbf, 0x5d, 0x08, 0x90, 0x84, 0x81, 0x4f, 0xf0, 0x02, 0x84, 0x89, 0x0d, 0xe6, + 0x33, 0x22, 0x62, 0x37, 0x6d, 0xdb, 0x7f, 0x37, 0x60, 0xe3, 0x60, 0x1a, 0xf3, 0x78, 0xbf, 0x13, + 0x01, 0xe9, 0x88, 0xc1, 0x45, 0xe0, 0xe3, 0xe3, 0xf9, 0xec, 0x0c, 0x47, 0x6c, 0xa7, 0xaa, 0x23, + 0x8b, 0x14, 0xd6, 0xd5, 0x34, 0xd6, 0x6d, 0xc3, 0xca, 0xd1, 0xcc, 0xf5, 0xa6, 0xa2, 0x72, 0xe0, + 0x0d, 0xe9, 0x4a, 0x32, 0x16, 0x55, 0x70, 0xda, 0xb6, 0x0f, 0xa0, 0x21, 0x21, 0x2f, 0xc3, 0x29, + 0xfb, 0x4f, 0x06, 0xd4, 0x13, 0xcf, 0x24, 0x47, 0x86, 0xa4, 0xa4, 0x91, 0x57, 0xf2, 0x7e, 0x38, + 0x23, 0xb3, 0xb2, 0xaa, 0xb2, 0xd2, 0xfe, 0x87, 0x01, 0x1b, 0x19, 0xa6, 0x3b, 0x86, 0x4a, 0xb5, + 0x28, 0x54, 0x34, 0x5e, 0x55, 0xef, 0x83, 0x57, 0x35, 0x8d, 0x57, 0x5f, 0x1a, 0x00, 0x07, 0xe3, + 0x71, 0xc2, 0xaa, 0xdb, 0x0d, 0xab, 0xb1, 0x47, 0xf0, 0x4b, 0x66, 0xcf, 0xa2, 0xbc, 0x84, 0xa0, + 0x26, 0x31, 0x8a, 0xfd, 0x56, 0x78, 0xb3, 0xa2, 0xf1, 0xe6, 0x53, 0xa8, 0xa7, 0xc8, 0x4a, 0xb1, + 0xe6, 0x8f, 0x06, 0x6c, 0xb0, 0xc4, 0x76, 0x5b, 0xcc, 0x7c, 0x08, 0xcd, 0x23, 0x7f, 0x7c, 0xe8, + 0x11, 0xf7, 0x6c, 0xca, 0xb3, 0xa6, 0xa8, 0xc3, 0x55, 0xe9, 0xed, 0x29, 0x44, 0xd1, 0xa7, 0x96, + 0x8f, 0x03, 0x09, 0x4d, 0x29, 0x8d, 0xce, 0xa1, 0xf9, 0xca, 0x5f, 0x4a, 0xa5, 0xdb, 0xd3, 0x80, + 0x0c, 0xb5, 0xaa, 0x41, 0xed, 0xc2, 0xa6, 0xb2, 0x4f, 0x29, 0xb0, 0x7f, 0x33, 0xd8, 0x83, 0x5d, + 0xba, 0x0c, 0x8b, 0x5c, 0x35, 0x2e, 0x8d, 0xfb, 0xc9, 0xe5, 0x05, 0xda, 0xd9, 0x92, 0xeb, 0x8f, + 0xe7, 0x33, 0x91, 0x4f, 0x15, 0x99, 0xfd, 0x05, 0xac, 0xa7, 0x6d, 0x1a, 0x8b, 0xf4, 0xbf, 0x80, + 0xa4, 0xc4, 0x22, 0xeb, 0x7f, 0x02, 0xad, 0x0e, 0x9e, 0x78, 0x7e, 0x9e, 0x25, 0x39, 0x79, 0x01, + 0x9f, 0xaa, 0x45, 0x7c, 0xb2, 0xff, 0xc3, 0x8f, 0x42, 0xd9, 0x42, 0xa5, 0xf2, 0xc8, 0x3e, 0x40, + 0xb6, 0x86, 0xc8, 0x26, 0x9b, 0x7c, 0x46, 0xe6, 0x44, 0x69, 0xc8, 0xbb, 0x48, 0x2c, 0x03, 0x76, + 0xf3, 0x49, 0xf7, 0x4c, 0xea, 0xa6, 0x1d, 0x58, 0xa5, 0xcd, 0x53, 0xef, 0xed, 0x0b, 0xa7, 0x23, + 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, 0x8e, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, + 0xec, 0x73, 0x68, 0x64, 0x0f, 0xe1, 0x77, 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe4, 0xc7, 0xfe, 0x72, + 0x8e, 0x7d, 0xfa, 0xbf, 0x3a, 0x3f, 0x21, 0xd0, 0x27, 0xe9, 0xf9, 0xc7, 0x5e, 0x74, 0xb6, 0xf9, + 0x2c, 0xf5, 0x2d, 0xd5, 0x7a, 0xaf, 0x40, 0x4a, 0x42, 0xd4, 0x85, 0xa6, 0xfa, 0x4e, 0x87, 0x76, + 0x04, 0xbb, 0xf5, 0x27, 0x49, 0xcb, 0x2c, 0xee, 0x20, 0x21, 0x05, 0x20, 0x7d, 0x3e, 0x48, 0x00, + 0xa8, 0x5f, 0x33, 0x12, 0x00, 0xfa, 0x77, 0x86, 0x1f, 0xb3, 0x83, 0x32, 0x7d, 0xb8, 0x47, 0x19, + 0x4e, 0xf9, 0xeb, 0x80, 0xf5, 0xa8, 0x48, 0xcc, 0xa7, 0xcb, 0xef, 0xd6, 0xc9, 0x74, 0xed, 0x95, + 0x3e, 0x99, 0x9e, 0x7b, 0x40, 0x7f, 0xce, 0x8a, 0x5a, 0xe5, 0x15, 0xc9, 0x4c, 0x77, 0xd2, 0x5e, + 0x27, 0xac, 0xf7, 0x17, 0xf4, 0x90, 0x10, 0x39, 0x8c, 0xd0, 0xfa, 0x0d, 0x13, 0x7d, 0x5d, 0x46, + 0xad, 0x5f, 0xf9, 0xac, 0x6f, 0xdc, 0xd0, 0x4b, 0x42, 0xd4, 0x67, 0x19, 0x52, 0x5d, 0xb0, 0x18, + 0x02, 0x5b, 0xcd, 0x5a, 0xd4, 0x45, 0x42, 0xf4, 0x0b, 0x78, 0xaf, 0xf0, 0xca, 0x86, 0x1e, 0x8b, + 0x58, 0x58, 0x70, 0x2b, 0xb5, 0xbe, 0x79, 0x63, 0x3f, 0x37, 0xe0, 0xb0, 0xd8, 0x80, 0xc3, 0x85, + 0x06, 0x2c, 0x7a, 0x56, 0xfb, 0x0c, 0x1a, 0xca, 0xbb, 0x12, 0x7a, 0x94, 0x8e, 0x55, 0x1e, 0xce, + 0xac, 0x9d, 0x42, 0x39, 0x27, 0xa1, 0x74, 0x3f, 0xd1, 0xa2, 0x40, 0x64, 0x18, 0x2d, 0x0a, 0xd2, + 0x2c, 0xd1, 0x4d, 0xaf, 0x70, 0xa2, 0xb6, 0x4f, 0xa2, 0x20, 0x77, 0x17, 0xb1, 0xcc, 0xe2, 0x0e, + 0x12, 0xa2, 0x67, 0xec, 0xd3, 0x8a, 0xb8, 0x4b, 0xa2, 0x87, 0x7c, 0x9c, 0x72, 0x51, 0xb5, 0xb6, + 0xf3, 0x42, 0x12, 0xa2, 0xef, 0xc3, 0x7a, 0x5a, 0x03, 0x23, 0x71, 0xe1, 0x97, 0xcb, 0x79, 0xeb, + 0x61, 0x4e, 0x46, 0x42, 0xf4, 0x3d, 0x58, 0x4b, 0x40, 0xa0, 0x2d, 0x15, 0x14, 0x9d, 0x83, 0x74, + 0x11, 0x09, 0x51, 0x1b, 0x56, 0x45, 0xd1, 0x84, 0x44, 0x6a, 0xc9, 0xaa, 0x3b, 0x6b, 0x4b, 0x93, + 0x70, 0x60, 0xd9, 0x19, 0x88, 0xf4, 0xb4, 0x99, 0x01, 0x53, 0x8b, 0x81, 0x4f, 0xa0, 0x2e, 0xd5, + 0x07, 0x89, 0x23, 0xd4, 0xd2, 0x24, 0x71, 0x84, 0x5e, 0x48, 0x7c, 0x06, 0x0d, 0xe5, 0xcc, 0x43, + 0x59, 0xdc, 0x2b, 0xa5, 0x82, 0xb5, 0x53, 0x28, 0x4f, 0xa3, 0x46, 0x39, 0x08, 0xa4, 0xa8, 0xd1, + 0x8f, 0x1c, 0x29, 0x6a, 0xf2, 0x67, 0xc7, 0x33, 0x80, 0x2c, 0x5b, 0x25, 0x0e, 0x55, 0x8e, 0x07, + 0x6b, 0x3b, 0x2f, 0x64, 0x74, 0xda, 0x96, 0xf2, 0xec, 0xf3, 0x28, 0x98, 0x75, 0xdd, 0xd1, 0x05, + 0x7e, 0xab, 0xcc, 0xdc, 0x69, 0xfc, 0xb2, 0xde, 0x66, 0x5f, 0xac, 0x7f, 0x44, 0xff, 0x9c, 0x3d, + 0x60, 0xdf, 0x5d, 0x3e, 0xfe, 0x2a, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xf3, 0x37, 0xab, 0xca, 0x1e, + 0x00, 0x00, } diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 3fbfd0162..f28a1673e 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -1,5 +1,6 @@ syntax = "proto3"; import "Open_IM/pkg/proto/sdk_ws/ws.proto"; +import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; option go_package = "./user;user"; package user; @@ -62,6 +63,7 @@ message UpdateUserInfoReq{ server_api_params.UserInfo UserInfo = 1; string OpUserID = 2; string operationID = 3; + google.protobuf.Int32Value globalRecvMsgOpt = 4; } message UpdateUserInfoResp{ CommonResp commonResp = 1; From 41833712f0a1f88a20fbce271f61bf4f2407a1e0 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 11:45:52 +0800 Subject: [PATCH 203/256] has read default->true --- config/config.yaml | 4 ++-- go.sum | 60 ++++++++++++++++------------------------------ 2 files changed, 23 insertions(+), 41 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 2f78bd49d..a3e836a15 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -231,9 +231,9 @@ reliablestorage: false #消息缓存时间 msgCacheTimeout: 1800 #群聊已读开启 -groupMessageHasReadReceiptEnable: false +groupMessageHasReadReceiptEnable: true #单聊已读开启 -singleMessageHasReadReceiptEnable: false +singleMessageHasReadReceiptEnable: true #token config tokenpolicy: diff --git a/go.sum b/go.sum index 1d74a3093..ac8ee760f 100644 --- a/go.sum +++ b/go.sum @@ -3,10 +3,10 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/Shopify/sarama v1.32.0 h1:P+RUjEaRU0GMMbYexGMDyrMkLhbbBVUVISDywi+IlFU= -github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= -github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= -github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= +github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= +github.com/Shopify/sarama v1.29.0/go.mod h1:2QpgD79wpdAESqNQMxNc0KYMkycd4slxGdV3TWSVqrU= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -46,7 +46,6 @@ github.com/antonfisher/nested-logrus-formatter v1.3.0/go.mod h1:6WTfyWFkBc9+zyBa github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= @@ -71,7 +70,6 @@ github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmf github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -102,15 +100,11 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM= -github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc= -github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -165,8 +159,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -175,9 +169,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -185,7 +178,6 @@ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= @@ -236,10 +228,10 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4= -github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= @@ -247,9 +239,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -272,7 +263,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= @@ -314,8 +304,8 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= -github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= +github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -325,33 +315,25 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -384,14 +366,14 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/scram v1.1.0 h1:d70R37I0HrDLsafRrMBXyrD4lmQbCHE873t00Vr0gm0= -github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg/scram v1.0.3/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -424,8 +406,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -459,9 +441,10 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -579,7 +562,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= From 1b1f4464eeedf8bf53b4daf980f9de2efa3661c5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 11:53:43 +0800 Subject: [PATCH 204/256] GlobalRecvMsgOpt --- go.sum | 12 ++ pkg/proto/user/user.pb.go | 370 +++++++++++++++++--------------------- pkg/proto/user/user.proto | 4 - 3 files changed, 180 insertions(+), 206 deletions(-) diff --git a/go.sum b/go.sum index 1d74a3093..da2ea714b 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,11 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= +github.com/Shopify/sarama v1.29.0/go.mod h1:2QpgD79wpdAESqNQMxNc0KYMkycd4slxGdV3TWSVqrU= github.com/Shopify/sarama v1.32.0 h1:P+RUjEaRU0GMMbYexGMDyrMkLhbbBVUVISDywi+IlFU= github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -102,6 +105,7 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns= github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -165,6 +169,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -236,6 +241,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4= @@ -314,6 +320,7 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -392,6 +399,8 @@ github.com/xdg-go/scram v1.1.0 h1:d70R37I0HrDLsafRrMBXyrD4lmQbCHE873t00Vr0gm0= github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg/scram v1.0.3/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -424,6 +433,7 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -459,7 +469,9 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index b6ae8daf0..ec740001b 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -37,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{0} + return fileDescriptor_user_94f030505f068262, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -84,7 +84,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{1} + return fileDescriptor_user_94f030505f068262, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{2} + return fileDescriptor_user_94f030505f068262, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{3} + return fileDescriptor_user_94f030505f068262, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -229,7 +229,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{4} + return fileDescriptor_user_94f030505f068262, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -276,7 +276,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{5} + return fileDescriptor_user_94f030505f068262, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -329,7 +329,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{6} + return fileDescriptor_user_94f030505f068262, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -375,7 +375,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{6, 0} + return fileDescriptor_user_94f030505f068262, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -422,7 +422,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{7} + return fileDescriptor_user_94f030505f068262, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -475,7 +475,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{8} + return fileDescriptor_user_94f030505f068262, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -523,7 +523,7 @@ func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{9} + return fileDescriptor_user_94f030505f068262, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -582,7 +582,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{10} + return fileDescriptor_user_94f030505f068262, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -633,7 +633,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{11} + return fileDescriptor_user_94f030505f068262, []int{11} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -764,7 +764,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{12} + return fileDescriptor_user_94f030505f068262, []int{12} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -816,7 +816,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{13} + return fileDescriptor_user_94f030505f068262, []int{13} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -858,7 +858,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{14} + return fileDescriptor_user_94f030505f068262, []int{14} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -924,7 +924,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{15} + return fileDescriptor_user_94f030505f068262, []int{15} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -964,7 +964,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{16} + return fileDescriptor_user_94f030505f068262, []int{16} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1017,7 +1017,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{17} + return fileDescriptor_user_94f030505f068262, []int{17} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1064,7 +1064,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{18} + return fileDescriptor_user_94f030505f068262, []int{18} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1117,7 +1117,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{19} + return fileDescriptor_user_94f030505f068262, []int{19} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1163,7 +1163,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{20} + return fileDescriptor_user_94f030505f068262, []int{20} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1209,7 +1209,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{21} + return fileDescriptor_user_94f030505f068262, []int{21} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1257,7 +1257,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{22} + return fileDescriptor_user_94f030505f068262, []int{22} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1318,7 +1318,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{23} + return fileDescriptor_user_94f030505f068262, []int{23} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1371,7 +1371,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{24} + return fileDescriptor_user_94f030505f068262, []int{24} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1416,7 +1416,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{25} + return fileDescriptor_user_94f030505f068262, []int{25} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1455,7 +1455,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{26} + return fileDescriptor_user_94f030505f068262, []int{26} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1504,7 +1504,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{27} + return fileDescriptor_user_94f030505f068262, []int{27} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1571,7 +1571,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{28} + return fileDescriptor_user_94f030505f068262, []int{28} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1618,7 +1618,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{29} + return fileDescriptor_user_94f030505f068262, []int{29} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1672,7 +1672,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{30} + return fileDescriptor_user_94f030505f068262, []int{30} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1729,7 +1729,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{31} + return fileDescriptor_user_94f030505f068262, []int{31} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1802,7 +1802,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{32} + return fileDescriptor_user_94f030505f068262, []int{32} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1842,7 +1842,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{33} + return fileDescriptor_user_94f030505f068262, []int{33} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1897,7 +1897,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{34} + return fileDescriptor_user_94f030505f068262, []int{34} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -1960,7 +1960,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{35} + return fileDescriptor_user_94f030505f068262, []int{35} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2026,7 +2026,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{36} + return fileDescriptor_user_94f030505f068262, []int{36} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2067,7 +2067,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{37} + return fileDescriptor_user_94f030505f068262, []int{37} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2126,7 +2126,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{38} + return fileDescriptor_user_94f030505f068262, []int{38} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2166,7 +2166,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{39} + return fileDescriptor_user_94f030505f068262, []int{39} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2218,7 +2218,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{40} + return fileDescriptor_user_94f030505f068262, []int{40} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2258,7 +2258,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{41} + return fileDescriptor_user_94f030505f068262, []int{41} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2312,7 +2312,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{42} + return fileDescriptor_user_94f030505f068262, []int{42} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2367,7 +2367,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{43} + return fileDescriptor_user_94f030505f068262, []int{43} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2427,7 +2427,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{44} + return fileDescriptor_user_94f030505f068262, []int{44} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2472,7 +2472,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{45} + return fileDescriptor_user_94f030505f068262, []int{45} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2512,7 +2512,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{46} + return fileDescriptor_user_94f030505f068262, []int{46} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2564,7 +2564,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_1b2c9183e940b6c0, []int{47} + return fileDescriptor_user_94f030505f068262, []int{47} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -2676,7 +2676,6 @@ type UserClient interface { GetBlockUsers(ctx context.Context, in *GetBlockUsersReq, opts ...grpc.CallOption) (*GetBlockUsersResp, error) GetBlockUserById(ctx context.Context, in *GetBlockUserByIdReq, opts ...grpc.CallOption) (*GetBlockUserByIdResp, error) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ...grpc.CallOption) (*DeleteUserResp, error) - GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) } type userClient struct { @@ -2885,15 +2884,6 @@ func (c *userClient) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ... return out, nil } -func (c *userClient) GetUserInfoFromCache(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) { - out := new(GetUserInfoResp) - err := grpc.Invoke(ctx, "/user.user/GetUserInfoFromCache", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // Server API for User service type UserServer interface { @@ -2919,7 +2909,6 @@ type UserServer interface { GetBlockUsers(context.Context, *GetBlockUsersReq) (*GetBlockUsersResp, error) GetBlockUserById(context.Context, *GetBlockUserByIdReq) (*GetBlockUserByIdResp, error) DeleteUser(context.Context, *DeleteUserReq) (*DeleteUserResp, error) - GetUserInfoFromCache(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) } func RegisterUserServer(s *grpc.Server, srv UserServer) { @@ -3322,24 +3311,6 @@ func _User_DeleteUser_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } -func _User_GetUserInfoFromCache_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetUserInfoReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UserServer).GetUserInfoFromCache(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/user.user/GetUserInfoFromCache", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UserServer).GetUserInfoFromCache(ctx, req.(*GetUserInfoReq)) - } - return interceptor(ctx, in, info, handler) -} - var _User_serviceDesc = grpc.ServiceDesc{ ServiceName: "user.user", HandlerType: (*UserServer)(nil), @@ -3432,138 +3403,133 @@ var _User_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteUser", Handler: _User_DeleteUser_Handler, }, - { - MethodName: "GetUserInfoFromCache", - Handler: _User_GetUserInfoFromCache_Handler, - }, }, Streams: []grpc.StreamDesc{}, Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_1b2c9183e940b6c0) } +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_94f030505f068262) } -var fileDescriptor_user_1b2c9183e940b6c0 = []byte{ - // 1922 bytes of a gzipped FileDescriptorProto +var fileDescriptor_user_94f030505f068262 = []byte{ + // 1906 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, 0x15, 0x57, 0xdb, 0xce, 0x24, 0x79, 0x8e, 0x1d, 0xa7, 0x26, 0x3b, 0xe9, 0x6d, 0x60, 0x08, 0xad, 0x65, 0x37, 0x1a, 0x09, 0x07, 0x66, 0x11, 0x83, 0x16, 0xc1, 0x6e, 0xec, 0x64, 0x2c, 0x23, 0x26, - 0xb1, 0xda, 0x33, 0x08, 0x21, 0xa4, 0xa8, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0x76, - 0x66, 0xc2, 0x65, 0x11, 0x1f, 0x37, 0x2e, 0x9c, 0x58, 0x38, 0xf0, 0x77, 0x70, 0x87, 0x13, 0x57, - 0x4e, 0x20, 0x24, 0xfe, 0x95, 0x55, 0x7d, 0x74, 0x77, 0x55, 0x75, 0x3b, 0xf1, 0x74, 0xa2, 0xb9, - 0x24, 0xae, 0x57, 0x5f, 0xbf, 0xf7, 0xde, 0xef, 0xbd, 0x7a, 0x55, 0x0d, 0x9b, 0x73, 0x82, 0xa3, - 0x7d, 0xfa, 0xa7, 0x1d, 0x46, 0x41, 0x1c, 0xa0, 0x1a, 0xfd, 0x6d, 0x7d, 0xeb, 0x24, 0xc4, 0xfe, - 0x69, 0xff, 0xc5, 0x7e, 0x78, 0x39, 0xd9, 0x67, 0x1d, 0xfb, 0x64, 0x7c, 0x79, 0xfa, 0x9a, 0xec, - 0xbf, 0x26, 0x7c, 0xa0, 0xf5, 0xd1, 0xe2, 0x21, 0x91, 0x1b, 0x86, 0x38, 0x12, 0x03, 0xed, 0x9f, - 0x00, 0x74, 0x83, 0xd9, 0x2c, 0xf0, 0x1d, 0x4c, 0x42, 0x64, 0xc2, 0x2a, 0x8e, 0xa2, 0x6e, 0x30, - 0xc6, 0xa6, 0xb1, 0x6b, 0xec, 0xad, 0x38, 0x49, 0x13, 0x3d, 0x82, 0x07, 0x38, 0x8a, 0x5e, 0x90, - 0x89, 0x59, 0xd9, 0x35, 0xf6, 0xd6, 0x1d, 0xd1, 0xb2, 0x7f, 0x0d, 0xcd, 0x43, 0x3c, 0xc5, 0x31, - 0x7e, 0x45, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x02, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, - 0x62, 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, - 0x95, 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, - 0xb3, 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, - 0x0e, 0xf5, 0xa7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x40, 0xeb, 0xb9, 0xeb, - 0x4d, 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, - 0x54, 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, - 0x70, 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x8f, 0x01, 0x72, 0xe0, 0x25, 0x89, - 0x7d, 0x0d, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x05, 0x1e, 0x5d, 0x52, 0xd8, 0x7b, - 0xb0, 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xec, 0xa2, 0x6a, - 0xde, 0x45, 0xff, 0x37, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, - 0x00, 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xf4, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, - 0xf4, 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, - 0xbd, 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, - 0x50, 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0xcf, 0x03, 0x6a, 0xdb, 0xc7, - 0x00, 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x8e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, - 0xa0, 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x0a, - 0x47, 0xa7, 0x6e, 0xe8, 0x9d, 0x86, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, - 0xdb, 0x80, 0xad, 0x57, 0xe1, 0xd8, 0x15, 0xe1, 0x2c, 0x54, 0x7f, 0x06, 0x6b, 0x49, 0x53, 0xc0, - 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x6d, 0x36, 0x09, 0xf2, 0x36, 0x91, 0x44, 0xa8, 0x07, 0xad, 0xc9, - 0x34, 0x38, 0x73, 0xa7, 0x0e, 0x1e, 0x5d, 0xbd, 0x20, 0x93, 0x93, 0x30, 0x66, 0xf9, 0x82, 0x6e, - 0x3f, 0x09, 0x82, 0xc9, 0x14, 0xf3, 0x6c, 0x77, 0x36, 0x3f, 0x6f, 0xf7, 0xfd, 0xf8, 0xe3, 0xa7, - 0x3f, 0x77, 0xa7, 0x73, 0xec, 0xe4, 0x26, 0xd9, 0xcf, 0x01, 0xe9, 0x4a, 0x95, 0x31, 0xaf, 0xfd, - 0xdf, 0x2a, 0x6c, 0x74, 0x03, 0xff, 0x0a, 0x47, 0x84, 0x61, 0x64, 0x7e, 0x7d, 0xed, 0xe3, 0x48, - 0xc9, 0x14, 0xb2, 0x08, 0x7d, 0x08, 0x4d, 0x79, 0x46, 0x6a, 0x07, 0x4d, 0x4a, 0xd9, 0x25, 0x69, - 0x59, 0x65, 0x59, 0x5a, 0x92, 0xd0, 0x7c, 0x26, 0xcf, 0x78, 0x79, 0x1d, 0x62, 0x66, 0x8b, 0x15, - 0x27, 0x27, 0xa7, 0xcc, 0x17, 0x80, 0x56, 0x38, 0xf3, 0x05, 0x16, 0x13, 0x56, 0x7b, 0x51, 0x30, - 0x0f, 0xfb, 0x87, 0xe6, 0x03, 0xd6, 0x91, 0x34, 0xa9, 0x1e, 0xaf, 0xfc, 0x08, 0xbb, 0xe3, 0x2e, - 0x0d, 0x01, 0x73, 0x95, 0x2d, 0x2c, 0x8b, 0x68, 0xd4, 0x1c, 0x46, 0xee, 0x79, 0xfc, 0x12, 0xbf, - 0x89, 0x5f, 0x7a, 0x33, 0x6c, 0xae, 0xed, 0x1a, 0x7b, 0x55, 0x47, 0x15, 0x52, 0x7f, 0xf7, 0xc9, - 0xc0, 0xf3, 0x7d, 0x3c, 0x36, 0xd7, 0x77, 0x8d, 0xbd, 0x35, 0x27, 0x6d, 0x23, 0x1b, 0x36, 0x0e, - 0xe2, 0xd8, 0x1d, 0x5d, 0xe0, 0x31, 0x23, 0x12, 0x30, 0x08, 0x8a, 0x8c, 0xee, 0xd2, 0x27, 0x83, - 0xc8, 0xbb, 0x72, 0x63, 0xdc, 0xbd, 0x70, 0x63, 0xb3, 0xce, 0x16, 0x51, 0x85, 0x14, 0x2d, 0x03, - 0x7e, 0x10, 0x33, 0x33, 0x6c, 0x70, 0xb4, 0x92, 0x88, 0xee, 0xd5, 0x27, 0xc7, 0x41, 0xdc, 0xf7, - 0x99, 0xd4, 0x6c, 0xb0, 0x65, 0x14, 0x19, 0x6a, 0x42, 0xe5, 0xe8, 0x8d, 0xd9, 0x64, 0x28, 0x2a, - 0x47, 0x6f, 0xec, 0xbf, 0x1a, 0x80, 0x86, 0x38, 0x96, 0xad, 0x49, 0xb9, 0xff, 0x03, 0xd5, 0xe5, - 0x82, 0x27, 0x28, 0xe1, 0x89, 0x34, 0x58, 0xa5, 0xc6, 0x13, 0x68, 0xf9, 0x41, 0xec, 0x9d, 0x7b, - 0xa3, 0xcc, 0x61, 0x15, 0xee, 0x30, 0x5d, 0xbe, 0x44, 0x7a, 0xe8, 0xc1, 0xc3, 0x1c, 0xb6, 0x52, - 0x14, 0xfe, 0x97, 0x01, 0xad, 0x21, 0x8e, 0x33, 0x66, 0x51, 0x1d, 0xdf, 0x29, 0x8d, 0x73, 0x56, - 0xa9, 0x2d, 0x67, 0x95, 0x95, 0xbc, 0x55, 0x8e, 0x60, 0x4b, 0xd3, 0xa5, 0x94, 0x4d, 0x7e, 0x63, - 0x00, 0xea, 0xe5, 0x3d, 0x9f, 0xd7, 0xd9, 0x28, 0xd4, 0x59, 0xb3, 0x5e, 0x25, 0x6f, 0xbd, 0xdb, - 0xfd, 0xfb, 0x05, 0x3c, 0xec, 0xdd, 0x87, 0x7f, 0x73, 0x74, 0xad, 0x2c, 0x47, 0x57, 0xfb, 0x77, - 0x46, 0x0e, 0x01, 0x59, 0x8e, 0x1a, 0xb4, 0xe6, 0x50, 0x0c, 0x42, 0x44, 0xad, 0xa2, 0x8b, 0x97, - 0x30, 0xc3, 0x6f, 0x0d, 0xd8, 0xce, 0xa3, 0x28, 0x65, 0x88, 0x1f, 0x42, 0x43, 0x59, 0x46, 0x94, - 0x17, 0x45, 0x96, 0x50, 0x07, 0xda, 0xbf, 0x82, 0x47, 0xbc, 0x7a, 0x2b, 0x61, 0x0c, 0x4d, 0xc5, - 0x4a, 0x5e, 0xc5, 0x3f, 0x18, 0xb0, 0x53, 0xb8, 0xfc, 0x3b, 0xd6, 0xf2, 0x9f, 0x06, 0x98, 0x1d, - 0x37, 0x1e, 0x5d, 0x0c, 0x0b, 0xbc, 0x9e, 0x5b, 0xd6, 0x58, 0x72, 0xd9, 0x25, 0x82, 0xa1, 0x28, - 0x05, 0x54, 0x97, 0x4b, 0x01, 0xb5, 0xa2, 0xc0, 0x79, 0x7f, 0x81, 0x16, 0xa5, 0xec, 0x69, 0xc2, - 0xea, 0x70, 0x3e, 0x1a, 0x61, 0x92, 0x90, 0x38, 0x69, 0xd2, 0x43, 0x95, 0x5f, 0x1c, 0x58, 0x51, - 0xb5, 0xee, 0x88, 0x96, 0xdd, 0x87, 0x86, 0x83, 0x89, 0x37, 0xf1, 0xa9, 0x7a, 0xd4, 0x76, 0xc9, - 0xe9, 0x3b, 0x4e, 0xea, 0x4e, 0xde, 0x5a, 0x82, 0x1a, 0x1d, 0x68, 0xca, 0x4b, 0x95, 0xca, 0x65, - 0x3f, 0x4d, 0xeb, 0xd6, 0xce, 0x75, 0x7f, 0x7c, 0x37, 0x3c, 0x5f, 0x1a, 0x50, 0xa3, 0x83, 0xe9, - 0x71, 0x3a, 0x88, 0x82, 0x73, 0x6f, 0x8a, 0x07, 0x17, 0x41, 0x1c, 0x88, 0x85, 0x14, 0x19, 0x3d, - 0xfa, 0x8f, 0xbd, 0xd1, 0xa5, 0xef, 0xce, 0x70, 0x52, 0xea, 0x25, 0x6d, 0x09, 0x42, 0x55, 0x81, - 0xf0, 0x18, 0xa0, 0x1b, 0x61, 0x37, 0xc6, 0xac, 0xa2, 0xe0, 0xde, 0x95, 0x24, 0xd4, 0x1b, 0x7d, - 0xd2, 0x99, 0x06, 0xa3, 0x4b, 0x96, 0xfd, 0xd7, 0x9c, 0xa4, 0x69, 0x8f, 0xd2, 0x6a, 0x99, 0xab, - 0x59, 0xf2, 0x82, 0xc5, 0x2e, 0xde, 0x22, 0x47, 0x02, 0x1f, 0xcb, 0x6c, 0xcf, 0xe4, 0xf6, 0x9f, - 0x0d, 0xd8, 0x12, 0xbb, 0x90, 0xce, 0xf5, 0xb1, 0x3b, 0xc3, 0xe2, 0x6a, 0x48, 0x25, 0xb4, 0x99, - 0x5c, 0x0d, 0x93, 0x36, 0x3a, 0x04, 0x18, 0xb8, 0x13, 0xcf, 0x97, 0x73, 0xef, 0x07, 0x05, 0xa5, - 0xb2, 0x83, 0x3f, 0x9f, 0x63, 0x12, 0x67, 0x63, 0x1d, 0x69, 0xde, 0x12, 0x79, 0xf2, 0x2f, 0xfc, - 0xc4, 0x52, 0x90, 0x91, 0x10, 0xed, 0xc2, 0x0a, 0x05, 0x9e, 0x84, 0xab, 0xac, 0x11, 0xef, 0x40, - 0x47, 0x05, 0x00, 0xbf, 0x5d, 0x08, 0x90, 0x84, 0x81, 0x4f, 0xf0, 0x02, 0x84, 0x89, 0x0d, 0xe6, - 0x33, 0x22, 0x62, 0x37, 0x6d, 0xdb, 0x7f, 0x37, 0x60, 0xe3, 0x60, 0x1a, 0xf3, 0x78, 0xbf, 0x13, - 0x01, 0xe9, 0x88, 0xc1, 0x45, 0xe0, 0xe3, 0xe3, 0xf9, 0xec, 0x0c, 0x47, 0x6c, 0xa7, 0xaa, 0x23, - 0x8b, 0x14, 0xd6, 0xd5, 0x34, 0xd6, 0x6d, 0xc3, 0xca, 0xd1, 0xcc, 0xf5, 0xa6, 0xa2, 0x72, 0xe0, - 0x0d, 0xe9, 0x4a, 0x32, 0x16, 0x55, 0x70, 0xda, 0xb6, 0x0f, 0xa0, 0x21, 0x21, 0x2f, 0xc3, 0x29, - 0xfb, 0x4f, 0x06, 0xd4, 0x13, 0xcf, 0x24, 0x47, 0x86, 0xa4, 0xa4, 0x91, 0x57, 0xf2, 0x7e, 0x38, - 0x23, 0xb3, 0xb2, 0xaa, 0xb2, 0xd2, 0xfe, 0x87, 0x01, 0x1b, 0x19, 0xa6, 0x3b, 0x86, 0x4a, 0xb5, - 0x28, 0x54, 0x34, 0x5e, 0x55, 0xef, 0x83, 0x57, 0x35, 0x8d, 0x57, 0x5f, 0x1a, 0x00, 0x07, 0xe3, - 0x71, 0xc2, 0xaa, 0xdb, 0x0d, 0xab, 0xb1, 0x47, 0xf0, 0x4b, 0x66, 0xcf, 0xa2, 0xbc, 0x84, 0xa0, - 0x26, 0x31, 0x8a, 0xfd, 0x56, 0x78, 0xb3, 0xa2, 0xf1, 0xe6, 0x53, 0xa8, 0xa7, 0xc8, 0x4a, 0xb1, - 0xe6, 0x8f, 0x06, 0x6c, 0xb0, 0xc4, 0x76, 0x5b, 0xcc, 0x7c, 0x08, 0xcd, 0x23, 0x7f, 0x7c, 0xe8, - 0x11, 0xf7, 0x6c, 0xca, 0xb3, 0xa6, 0xa8, 0xc3, 0x55, 0xe9, 0xed, 0x29, 0x44, 0xd1, 0xa7, 0x96, - 0x8f, 0x03, 0x09, 0x4d, 0x29, 0x8d, 0xce, 0xa1, 0xf9, 0xca, 0x5f, 0x4a, 0xa5, 0xdb, 0xd3, 0x80, - 0x0c, 0xb5, 0xaa, 0x41, 0xed, 0xc2, 0xa6, 0xb2, 0x4f, 0x29, 0xb0, 0x7f, 0x33, 0xd8, 0x83, 0x5d, - 0xba, 0x0c, 0x8b, 0x5c, 0x35, 0x2e, 0x8d, 0xfb, 0xc9, 0xe5, 0x05, 0xda, 0xd9, 0x92, 0xeb, 0x8f, - 0xe7, 0x33, 0x91, 0x4f, 0x15, 0x99, 0xfd, 0x05, 0xac, 0xa7, 0x6d, 0x1a, 0x8b, 0xf4, 0xbf, 0x80, - 0xa4, 0xc4, 0x22, 0xeb, 0x7f, 0x02, 0xad, 0x0e, 0x9e, 0x78, 0x7e, 0x9e, 0x25, 0x39, 0x79, 0x01, - 0x9f, 0xaa, 0x45, 0x7c, 0xb2, 0xff, 0xc3, 0x8f, 0x42, 0xd9, 0x42, 0xa5, 0xf2, 0xc8, 0x3e, 0x40, - 0xb6, 0x86, 0xc8, 0x26, 0x9b, 0x7c, 0x46, 0xe6, 0x44, 0x69, 0xc8, 0xbb, 0x48, 0x2c, 0x03, 0x76, - 0xf3, 0x49, 0xf7, 0x4c, 0xea, 0xa6, 0x1d, 0x58, 0xa5, 0xcd, 0x53, 0xef, 0xed, 0x0b, 0xa7, 0x23, - 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, 0x8e, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, - 0xec, 0x73, 0x68, 0x64, 0x0f, 0xe1, 0x77, 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe4, 0xc7, 0xfe, 0x72, - 0x8e, 0x7d, 0xfa, 0xbf, 0x3a, 0x3f, 0x21, 0xd0, 0x27, 0xe9, 0xf9, 0xc7, 0x5e, 0x74, 0xb6, 0xf9, - 0x2c, 0xf5, 0x2d, 0xd5, 0x7a, 0xaf, 0x40, 0x4a, 0x42, 0xd4, 0x85, 0xa6, 0xfa, 0x4e, 0x87, 0x76, - 0x04, 0xbb, 0xf5, 0x27, 0x49, 0xcb, 0x2c, 0xee, 0x20, 0x21, 0x05, 0x20, 0x7d, 0x3e, 0x48, 0x00, - 0xa8, 0x5f, 0x33, 0x12, 0x00, 0xfa, 0x77, 0x86, 0x1f, 0xb3, 0x83, 0x32, 0x7d, 0xb8, 0x47, 0x19, - 0x4e, 0xf9, 0xeb, 0x80, 0xf5, 0xa8, 0x48, 0xcc, 0xa7, 0xcb, 0xef, 0xd6, 0xc9, 0x74, 0xed, 0x95, - 0x3e, 0x99, 0x9e, 0x7b, 0x40, 0x7f, 0xce, 0x8a, 0x5a, 0xe5, 0x15, 0xc9, 0x4c, 0x77, 0xd2, 0x5e, - 0x27, 0xac, 0xf7, 0x17, 0xf4, 0x90, 0x10, 0x39, 0x8c, 0xd0, 0xfa, 0x0d, 0x13, 0x7d, 0x5d, 0x46, - 0xad, 0x5f, 0xf9, 0xac, 0x6f, 0xdc, 0xd0, 0x4b, 0x42, 0xd4, 0x67, 0x19, 0x52, 0x5d, 0xb0, 0x18, - 0x02, 0x5b, 0xcd, 0x5a, 0xd4, 0x45, 0x42, 0xf4, 0x0b, 0x78, 0xaf, 0xf0, 0xca, 0x86, 0x1e, 0x8b, - 0x58, 0x58, 0x70, 0x2b, 0xb5, 0xbe, 0x79, 0x63, 0x3f, 0x37, 0xe0, 0xb0, 0xd8, 0x80, 0xc3, 0x85, - 0x06, 0x2c, 0x7a, 0x56, 0xfb, 0x0c, 0x1a, 0xca, 0xbb, 0x12, 0x7a, 0x94, 0x8e, 0x55, 0x1e, 0xce, - 0xac, 0x9d, 0x42, 0x39, 0x27, 0xa1, 0x74, 0x3f, 0xd1, 0xa2, 0x40, 0x64, 0x18, 0x2d, 0x0a, 0xd2, - 0x2c, 0xd1, 0x4d, 0xaf, 0x70, 0xa2, 0xb6, 0x4f, 0xa2, 0x20, 0x77, 0x17, 0xb1, 0xcc, 0xe2, 0x0e, - 0x12, 0xa2, 0x67, 0xec, 0xd3, 0x8a, 0xb8, 0x4b, 0xa2, 0x87, 0x7c, 0x9c, 0x72, 0x51, 0xb5, 0xb6, - 0xf3, 0x42, 0x12, 0xa2, 0xef, 0xc3, 0x7a, 0x5a, 0x03, 0x23, 0x71, 0xe1, 0x97, 0xcb, 0x79, 0xeb, - 0x61, 0x4e, 0x46, 0x42, 0xf4, 0x3d, 0x58, 0x4b, 0x40, 0xa0, 0x2d, 0x15, 0x14, 0x9d, 0x83, 0x74, - 0x11, 0x09, 0x51, 0x1b, 0x56, 0x45, 0xd1, 0x84, 0x44, 0x6a, 0xc9, 0xaa, 0x3b, 0x6b, 0x4b, 0x93, - 0x70, 0x60, 0xd9, 0x19, 0x88, 0xf4, 0xb4, 0x99, 0x01, 0x53, 0x8b, 0x81, 0x4f, 0xa0, 0x2e, 0xd5, - 0x07, 0x89, 0x23, 0xd4, 0xd2, 0x24, 0x71, 0x84, 0x5e, 0x48, 0x7c, 0x06, 0x0d, 0xe5, 0xcc, 0x43, - 0x59, 0xdc, 0x2b, 0xa5, 0x82, 0xb5, 0x53, 0x28, 0x4f, 0xa3, 0x46, 0x39, 0x08, 0xa4, 0xa8, 0xd1, - 0x8f, 0x1c, 0x29, 0x6a, 0xf2, 0x67, 0xc7, 0x33, 0x80, 0x2c, 0x5b, 0x25, 0x0e, 0x55, 0x8e, 0x07, - 0x6b, 0x3b, 0x2f, 0x64, 0x74, 0xda, 0x96, 0xf2, 0xec, 0xf3, 0x28, 0x98, 0x75, 0xdd, 0xd1, 0x05, - 0x7e, 0xab, 0xcc, 0xdc, 0x69, 0xfc, 0xb2, 0xde, 0x66, 0x5f, 0xac, 0x7f, 0x44, 0xff, 0x9c, 0x3d, - 0x60, 0xdf, 0x5d, 0x3e, 0xfe, 0x2a, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xf3, 0x37, 0xab, 0xca, 0x1e, + 0xb1, 0xda, 0x13, 0x84, 0x10, 0x52, 0xd4, 0xb1, 0x2b, 0x4e, 0x2b, 0x76, 0x77, 0x6f, 0x57, 0x3b, + 0x33, 0xe1, 0xb2, 0x88, 0x8f, 0x1b, 0x17, 0x4e, 0xbb, 0x70, 0xe0, 0xef, 0xe0, 0x0e, 0x27, 0xae, + 0x9c, 0xe0, 0xc2, 0xbf, 0x82, 0xea, 0xa3, 0xbb, 0xab, 0xaa, 0xdb, 0x89, 0xe9, 0x44, 0x73, 0x49, + 0x5c, 0xaf, 0xbe, 0x7e, 0xef, 0xbd, 0xdf, 0x7b, 0xf5, 0xaa, 0x1a, 0x36, 0xe7, 0x04, 0x47, 0xfb, + 0xf4, 0x4f, 0x3b, 0x8c, 0x82, 0x38, 0x40, 0x35, 0xfa, 0xdb, 0xfa, 0xd6, 0x49, 0x88, 0xfd, 0xb3, + 0xfe, 0xab, 0xfd, 0xf0, 0x6a, 0xb2, 0xcf, 0x3a, 0xf6, 0xc9, 0xf8, 0xea, 0xec, 0x0d, 0xd9, 0x7f, + 0x43, 0xf8, 0x40, 0xeb, 0xa3, 0xc5, 0x43, 0x22, 0x37, 0x0c, 0x71, 0x24, 0x06, 0xda, 0x3f, 0x01, + 0xe8, 0x06, 0xb3, 0x59, 0xe0, 0x3b, 0x98, 0x84, 0xc8, 0x84, 0x55, 0x1c, 0x45, 0xdd, 0x60, 0x8c, + 0x4d, 0x63, 0xd7, 0xd8, 0x5b, 0x71, 0x92, 0x26, 0x7a, 0x02, 0x8f, 0x70, 0x14, 0xbd, 0x22, 0x13, + 0xb3, 0xb2, 0x6b, 0xec, 0xad, 0x3b, 0xa2, 0x65, 0xff, 0x1a, 0x9a, 0x87, 0x78, 0x8a, 0x63, 0x7c, + 0x4a, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x06, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, 0x62, + 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, 0x95, + 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, 0xb3, + 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, 0x0e, + 0xf5, 0xe7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x41, 0xeb, 0xa5, 0xeb, 0x4d, + 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, 0x54, + 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, 0x70, + 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x4f, 0x01, 0x72, 0xe0, 0x25, 0x89, 0x7d, + 0x03, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x25, 0x1e, 0x5d, 0x51, 0xd8, 0x7b, 0xb0, + 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xee, 0xa2, 0x6a, 0xde, + 0x45, 0xff, 0x35, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, 0x00, + 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xfc, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, 0xf4, + 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, 0xbd, + 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, 0x50, + 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0x2f, 0x02, 0x6a, 0xdb, 0xa7, 0x00, + 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x9e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, 0xa0, + 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x1a, 0x47, + 0x67, 0x6e, 0xe8, 0x9d, 0x85, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xcb, + 0x80, 0xad, 0xd3, 0x70, 0xec, 0x8a, 0x70, 0x16, 0xaa, 0xbf, 0x80, 0xb5, 0xa4, 0x29, 0x60, 0xdc, + 0xba, 0x64, 0x3a, 0xf8, 0x2e, 0x9b, 0x04, 0x79, 0x9b, 0x48, 0x22, 0xd4, 0x83, 0xd6, 0x64, 0x1a, + 0x9c, 0xbb, 0x53, 0x07, 0x8f, 0xae, 0x5f, 0x91, 0xc9, 0x49, 0x18, 0xb3, 0x7c, 0x41, 0xb7, 0x9f, + 0x04, 0xc1, 0x64, 0x8a, 0x79, 0xb6, 0x3b, 0x9f, 0x5f, 0xb4, 0xfb, 0x7e, 0xfc, 0xf1, 0xf3, 0x9f, + 0xbb, 0xd3, 0x39, 0x76, 0x72, 0x93, 0xec, 0x97, 0x80, 0x74, 0xa5, 0xca, 0x98, 0xd7, 0xfe, 0x4f, + 0x15, 0x36, 0xba, 0x81, 0x7f, 0x8d, 0x23, 0xc2, 0x30, 0x32, 0xbf, 0xbe, 0xf1, 0x71, 0xa4, 0x64, + 0x0a, 0x59, 0x84, 0x3e, 0x84, 0xa6, 0x3c, 0x23, 0xb5, 0x83, 0x26, 0xa5, 0xec, 0x92, 0xb4, 0xac, + 0xb2, 0x2c, 0x2d, 0x49, 0x68, 0x3e, 0x93, 0x67, 0xbc, 0xbe, 0x09, 0x31, 0xb3, 0xc5, 0x8a, 0x93, + 0x93, 0x53, 0xe6, 0x0b, 0x40, 0x2b, 0x9c, 0xf9, 0x02, 0x8b, 0x09, 0xab, 0xbd, 0x28, 0x98, 0x87, + 0xfd, 0x43, 0xf3, 0x11, 0xeb, 0x48, 0x9a, 0x54, 0x8f, 0x53, 0x3f, 0xc2, 0xee, 0xb8, 0x4b, 0x43, + 0xc0, 0x5c, 0x65, 0x0b, 0xcb, 0x22, 0x1a, 0x35, 0x87, 0x91, 0x7b, 0x11, 0xbf, 0xc6, 0x6f, 0xe3, + 0xd7, 0xde, 0x0c, 0x9b, 0x6b, 0xbb, 0xc6, 0x5e, 0xd5, 0x51, 0x85, 0xd4, 0xdf, 0x7d, 0x32, 0xf0, + 0x7c, 0x1f, 0x8f, 0xcd, 0xf5, 0x5d, 0x63, 0x6f, 0xcd, 0x49, 0xdb, 0xc8, 0x86, 0x8d, 0x83, 0x38, + 0x76, 0x47, 0x97, 0x78, 0xcc, 0x88, 0x04, 0x0c, 0x82, 0x22, 0xa3, 0xbb, 0xf4, 0xc9, 0x20, 0xf2, + 0xae, 0xdd, 0x18, 0x77, 0x2f, 0xdd, 0xd8, 0xac, 0xb3, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, + 0xc4, 0xcc, 0x0c, 0x1b, 0x1c, 0xad, 0x24, 0xa2, 0x7b, 0xf5, 0xc9, 0x71, 0x10, 0xf7, 0x7d, 0x26, + 0x35, 0x1b, 0x6c, 0x19, 0x45, 0x86, 0x9a, 0x50, 0x39, 0x7a, 0x6b, 0x36, 0x19, 0x8a, 0xca, 0xd1, + 0x5b, 0xfb, 0x2f, 0x06, 0xa0, 0x21, 0x8e, 0x65, 0x6b, 0x52, 0xee, 0xff, 0x40, 0x75, 0xb9, 0xe0, + 0x09, 0x4a, 0x78, 0x22, 0x0d, 0x56, 0xa9, 0xf1, 0x0c, 0x5a, 0x7e, 0x10, 0x7b, 0x17, 0xde, 0x28, + 0x73, 0x58, 0x85, 0x3b, 0x4c, 0x97, 0x2f, 0x91, 0x1e, 0x7a, 0xf0, 0x38, 0x87, 0xad, 0x14, 0x85, + 0xff, 0x69, 0x40, 0x6b, 0x88, 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, + 0xcb, 0x59, 0x65, 0x25, 0x6f, 0x95, 0x23, 0xd8, 0xd2, 0x74, 0x29, 0x65, 0x93, 0xdf, 0x18, 0x80, + 0x7a, 0x79, 0xcf, 0xe7, 0x75, 0x36, 0x0a, 0x75, 0xd6, 0xac, 0x57, 0xc9, 0x5b, 0xef, 0x6e, 0xff, + 0x7e, 0x01, 0x8f, 0x7b, 0x0f, 0xe1, 0xdf, 0x1c, 0x5d, 0x2b, 0xcb, 0xd1, 0xd5, 0xfe, 0x9d, 0x91, + 0x43, 0x40, 0x96, 0xa3, 0x06, 0xad, 0x39, 0x14, 0x83, 0x10, 0x51, 0xab, 0xe8, 0xe2, 0x25, 0xcc, + 0xf0, 0x5b, 0x03, 0xb6, 0xf3, 0x28, 0x4a, 0x19, 0xe2, 0x87, 0xd0, 0x50, 0x96, 0x11, 0xe5, 0x45, + 0x91, 0x25, 0xd4, 0x81, 0xf6, 0xaf, 0xe0, 0x09, 0xaf, 0xde, 0x4a, 0x18, 0x43, 0x53, 0xb1, 0x92, + 0x57, 0xf1, 0x0f, 0x06, 0xec, 0x14, 0x2e, 0xff, 0x8e, 0xb5, 0xfc, 0x87, 0x01, 0x66, 0xc7, 0x8d, + 0x47, 0x97, 0xc3, 0x02, 0xaf, 0xe7, 0x96, 0x35, 0x96, 0x5c, 0x76, 0x89, 0x60, 0x28, 0x4a, 0x01, + 0xd5, 0xe5, 0x52, 0x40, 0xad, 0x28, 0x70, 0xde, 0x5f, 0xa0, 0x45, 0x29, 0x7b, 0x9a, 0xb0, 0x3a, + 0x9c, 0x8f, 0x46, 0x98, 0x24, 0x24, 0x4e, 0x9a, 0xf4, 0x50, 0xe5, 0x17, 0x07, 0x56, 0x54, 0xad, + 0x3b, 0xa2, 0x65, 0xf7, 0xa1, 0xe1, 0x60, 0xe2, 0x4d, 0x7c, 0xaa, 0x1e, 0xb5, 0x5d, 0x72, 0xfa, + 0x8e, 0x93, 0xba, 0x93, 0xb7, 0x96, 0xa0, 0x46, 0x07, 0x9a, 0xf2, 0x52, 0xa5, 0x72, 0xd9, 0x4f, + 0xd3, 0xba, 0xb5, 0x73, 0xd3, 0x1f, 0xdf, 0x0f, 0xcf, 0x57, 0x06, 0xd4, 0xe8, 0x60, 0x7a, 0x9c, + 0x0e, 0xa2, 0xe0, 0xc2, 0x9b, 0xe2, 0xc1, 0x65, 0x10, 0x07, 0x62, 0x21, 0x45, 0x46, 0x8f, 0xfe, + 0x63, 0x6f, 0x74, 0xe5, 0xbb, 0x33, 0x9c, 0x94, 0x7a, 0x49, 0x5b, 0x82, 0x50, 0x55, 0x20, 0x3c, + 0x05, 0xe8, 0x46, 0xd8, 0x8d, 0x31, 0xab, 0x28, 0xb8, 0x77, 0x25, 0x09, 0xf5, 0x46, 0x9f, 0x74, + 0xa6, 0xc1, 0xe8, 0x8a, 0x65, 0xff, 0x35, 0x27, 0x69, 0xda, 0xa3, 0xb4, 0x5a, 0xe6, 0x6a, 0x96, + 0xbc, 0x60, 0xb1, 0x8b, 0xb7, 0xc8, 0x91, 0xc0, 0xc7, 0x32, 0xdb, 0x33, 0xb9, 0xfd, 0xa5, 0x01, + 0x5b, 0x62, 0x17, 0xd2, 0xb9, 0x39, 0x76, 0x67, 0x58, 0x5c, 0x0d, 0xa9, 0x84, 0x36, 0x93, 0xab, + 0x61, 0xd2, 0x46, 0x87, 0x00, 0x03, 0x77, 0xe2, 0xf9, 0x72, 0xee, 0xfd, 0xa0, 0xa0, 0x54, 0x76, + 0xf0, 0xe7, 0x73, 0x4c, 0xe2, 0x6c, 0xac, 0x23, 0xcd, 0x5b, 0x22, 0x4f, 0xfe, 0x99, 0x9f, 0x58, + 0x0a, 0x32, 0x12, 0xa2, 0x5d, 0x58, 0xa1, 0xc0, 0x93, 0x70, 0x95, 0x35, 0xe2, 0x1d, 0xe8, 0xa8, + 0x00, 0xe0, 0xb7, 0x0b, 0x01, 0x92, 0x30, 0xf0, 0x09, 0x5e, 0x80, 0x30, 0xb1, 0xc1, 0x7c, 0x46, + 0x44, 0xec, 0xa6, 0x6d, 0xfb, 0x6f, 0x06, 0x6c, 0x1c, 0x4c, 0x63, 0x1e, 0xef, 0xf7, 0x22, 0x20, + 0x1d, 0x31, 0xb8, 0x0c, 0x7c, 0x7c, 0x3c, 0x9f, 0x9d, 0xe3, 0x88, 0xed, 0x54, 0x75, 0x64, 0x91, + 0xc2, 0xba, 0x9a, 0xc6, 0xba, 0x6d, 0x58, 0x39, 0x9a, 0xb9, 0xde, 0x54, 0x54, 0x0e, 0xbc, 0x21, + 0x5d, 0x49, 0xc6, 0xa2, 0x0a, 0x4e, 0xdb, 0xf6, 0x01, 0x34, 0x24, 0xe4, 0x65, 0x38, 0x65, 0xff, + 0xc9, 0x80, 0x7a, 0xe2, 0x99, 0xe4, 0xc8, 0x90, 0x94, 0x34, 0xf2, 0x4a, 0x3e, 0x0c, 0x67, 0x64, + 0x56, 0x56, 0x55, 0x56, 0xda, 0x7f, 0x37, 0x60, 0x23, 0xc3, 0x74, 0xcf, 0x50, 0xa9, 0x16, 0x85, + 0x8a, 0xc6, 0xab, 0xea, 0x43, 0xf0, 0xaa, 0xa6, 0xf1, 0xea, 0x2b, 0x03, 0xe0, 0x60, 0x3c, 0x4e, + 0x58, 0x75, 0xb7, 0x61, 0x35, 0xf6, 0x08, 0x7e, 0xc9, 0xec, 0x59, 0x94, 0x97, 0x10, 0xd4, 0x24, + 0x46, 0xb1, 0xdf, 0x0a, 0x6f, 0x56, 0x34, 0xde, 0x7c, 0x0a, 0xf5, 0x14, 0x59, 0x29, 0xd6, 0xfc, + 0xd1, 0x80, 0x0d, 0x96, 0xd8, 0xee, 0x8a, 0x99, 0x0f, 0xa1, 0x79, 0xe4, 0x8f, 0x0f, 0x3d, 0xe2, + 0x9e, 0x4f, 0x79, 0xd6, 0x14, 0x75, 0xb8, 0x2a, 0xbd, 0x3b, 0x85, 0x28, 0xfa, 0xd4, 0xf2, 0x71, + 0x20, 0xa1, 0x29, 0xa5, 0xd1, 0x05, 0x34, 0x4f, 0xfd, 0xa5, 0x54, 0xba, 0x3b, 0x0d, 0xc8, 0x50, + 0xab, 0x1a, 0xd4, 0x2e, 0x6c, 0x2a, 0xfb, 0x94, 0x02, 0xfb, 0x57, 0x83, 0x3d, 0xd8, 0xa5, 0xcb, + 0xb0, 0xc8, 0x55, 0xe3, 0xd2, 0x78, 0x98, 0x5c, 0x5e, 0xa0, 0x9d, 0x2d, 0xb9, 0xfe, 0x78, 0x3e, + 0x13, 0xf9, 0x54, 0x91, 0xd9, 0x5f, 0xc0, 0x7a, 0xda, 0xa6, 0xb1, 0x48, 0xff, 0x0b, 0x48, 0x4a, + 0x2c, 0xb2, 0xfe, 0x67, 0xd0, 0xea, 0xe0, 0x89, 0xe7, 0xe7, 0x59, 0x92, 0x93, 0x17, 0xf0, 0xa9, + 0x5a, 0xc4, 0x27, 0xfb, 0xdf, 0xfc, 0x28, 0x94, 0x2d, 0x54, 0x2a, 0x8f, 0xec, 0x03, 0x64, 0x6b, + 0x88, 0x6c, 0xb2, 0xc9, 0x67, 0x64, 0x4e, 0x94, 0x86, 0xbc, 0x8b, 0xc4, 0x32, 0x60, 0x37, 0x9f, + 0x74, 0xcf, 0xa4, 0x6e, 0xda, 0x81, 0x55, 0xda, 0x3c, 0xf3, 0xfe, 0xff, 0xc2, 0xe9, 0x88, 0xdd, + 0x62, 0xb4, 0x15, 0x49, 0x88, 0xbe, 0x23, 0xb9, 0x51, 0x64, 0xfa, 0x9c, 0xf2, 0xd9, 0x08, 0xfb, + 0x02, 0x1a, 0xd9, 0x43, 0xf8, 0xfd, 0x20, 0xdd, 0x1a, 0x43, 0x1d, 0xf9, 0xb1, 0xbf, 0x9c, 0x63, + 0x9f, 0x7f, 0x59, 0xe7, 0x27, 0x04, 0xfa, 0x24, 0x3d, 0xff, 0xd8, 0x8b, 0xce, 0x36, 0x9f, 0xa5, + 0xbe, 0xa5, 0x5a, 0xef, 0x15, 0x48, 0x49, 0x88, 0xba, 0xd0, 0x54, 0xdf, 0xe9, 0xd0, 0x8e, 0x60, + 0xb7, 0xfe, 0x24, 0x69, 0x99, 0xc5, 0x1d, 0x24, 0xa4, 0x00, 0xa4, 0xcf, 0x07, 0x09, 0x00, 0xf5, + 0x6b, 0x46, 0x02, 0x40, 0xff, 0xce, 0xf0, 0x63, 0x76, 0x50, 0xa6, 0x0f, 0xf7, 0x28, 0xc3, 0x29, + 0x7f, 0x1d, 0xb0, 0x9e, 0x14, 0x89, 0xf9, 0x74, 0xf9, 0xdd, 0x3a, 0x99, 0xae, 0xbd, 0xd2, 0x27, + 0xd3, 0x73, 0x0f, 0xe8, 0x2f, 0x59, 0x51, 0xab, 0xbc, 0x22, 0x99, 0xe9, 0x4e, 0xda, 0xeb, 0x84, + 0xf5, 0xfe, 0x82, 0x1e, 0x12, 0x22, 0x87, 0x11, 0x5a, 0xbf, 0x61, 0xa2, 0xaf, 0xcb, 0xa8, 0xf5, + 0x2b, 0x9f, 0xf5, 0x8d, 0x5b, 0x7a, 0x49, 0x88, 0xfa, 0x2c, 0x43, 0xaa, 0x0b, 0x16, 0x43, 0x60, + 0xab, 0x59, 0x8b, 0xba, 0x48, 0x88, 0x7e, 0x01, 0xef, 0x15, 0x5e, 0xd9, 0xd0, 0x53, 0x11, 0x0b, + 0x0b, 0x6e, 0xa5, 0xd6, 0x37, 0x6f, 0xed, 0xe7, 0x06, 0x1c, 0x16, 0x1b, 0x70, 0xb8, 0xd0, 0x80, + 0x45, 0xcf, 0x6a, 0x9f, 0x41, 0x43, 0x79, 0x57, 0x42, 0x4f, 0xd2, 0xb1, 0xca, 0xc3, 0x99, 0xb5, + 0x53, 0x28, 0xe7, 0x24, 0x94, 0xee, 0x27, 0x5a, 0x14, 0x88, 0x0c, 0xa3, 0x45, 0x41, 0x9a, 0x25, + 0xba, 0xe9, 0x15, 0x4e, 0xd4, 0xf6, 0x49, 0x14, 0xe4, 0xee, 0x22, 0x96, 0x59, 0xdc, 0x41, 0x42, + 0xf4, 0x82, 0x7d, 0x5a, 0x11, 0x77, 0x49, 0xf4, 0x98, 0x8f, 0x53, 0x2e, 0xaa, 0xd6, 0x76, 0x5e, + 0x48, 0x42, 0xf4, 0x7d, 0x58, 0x4f, 0x6b, 0x60, 0x24, 0x2e, 0xfc, 0x72, 0x39, 0x6f, 0x3d, 0xce, + 0xc9, 0x48, 0x88, 0xbe, 0x07, 0x6b, 0x09, 0x08, 0xb4, 0xa5, 0x82, 0xa2, 0x73, 0x90, 0x2e, 0x22, + 0x21, 0x6a, 0xc3, 0xaa, 0x28, 0x9a, 0x90, 0x48, 0x2d, 0x59, 0x75, 0x67, 0x6d, 0x69, 0x12, 0x0e, + 0x2c, 0x3b, 0x03, 0x91, 0x9e, 0x36, 0x33, 0x60, 0x6a, 0x31, 0xf0, 0x09, 0xd4, 0xa5, 0xfa, 0x20, + 0x71, 0x84, 0x5a, 0x9a, 0x24, 0x8e, 0xd0, 0x0b, 0x89, 0xcf, 0xa0, 0xa1, 0x9c, 0x79, 0x28, 0x8b, + 0x7b, 0xa5, 0x54, 0xb0, 0x76, 0x0a, 0xe5, 0x69, 0xd4, 0x28, 0x07, 0x81, 0x14, 0x35, 0xfa, 0x91, + 0x23, 0x45, 0x4d, 0xfe, 0xec, 0x78, 0x01, 0x90, 0x65, 0xab, 0xc4, 0xa1, 0xca, 0xf1, 0x60, 0x6d, + 0xe7, 0x85, 0x24, 0xec, 0x34, 0x7e, 0x59, 0x6f, 0xb3, 0x8f, 0xcd, 0x3f, 0xa2, 0x7f, 0xce, 0x1f, + 0xb1, 0x4f, 0x26, 0x1f, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x5b, 0xa4, 0x32, 0x85, 0x1e, 0x00, 0x00, } diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index f28a1673e..2f591aed6 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -317,8 +317,4 @@ service user { rpc GetBlockUsers(GetBlockUsersReq) returns (GetBlockUsersResp); rpc GetBlockUserById(GetBlockUserByIdReq) returns (GetBlockUserByIdResp); rpc DeleteUser(DeleteUserReq) returns (DeleteUserResp); - - - rpc GetUserInfoFromCache(GetUserInfoReq) returns(GetUserInfoResp); - } From 310997f9784763a2722129a834136a45d886ee22 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 12:04:57 +0800 Subject: [PATCH 205/256] update chat.pb --- pkg/proto/chat/chat.pb.go | 165 +++++++++++++++++++++++++++----------- pkg/proto/chat/chat.proto | 8 ++ 2 files changed, 124 insertions(+), 49 deletions(-) diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index b3d53675f..b69f57018 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -37,7 +37,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{0} + return fileDescriptor_chat_64077d68a66b2cfd, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{1} + return fileDescriptor_chat_64077d68a66b2cfd, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +137,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{2} + return fileDescriptor_chat_64077d68a66b2cfd, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -178,6 +178,68 @@ func (m *PushMsgDataToMQ) GetPushToUserID() string { return "" } +type MsgDataToMongoByMQ struct { + LastSeq uint64 `protobuf:"varint,1,opt,name=lastSeq" json:"lastSeq,omitempty"` + AggregationID string `protobuf:"bytes,2,opt,name=aggregationID" json:"aggregationID,omitempty"` + MessageList []*MsgDataToMQ `protobuf:"bytes,3,rep,name=messageList" json:"messageList,omitempty"` + TriggerID string `protobuf:"bytes,4,opt,name=triggerID" json:"triggerID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MsgDataToMongoByMQ) Reset() { *m = MsgDataToMongoByMQ{} } +func (m *MsgDataToMongoByMQ) String() string { return proto.CompactTextString(m) } +func (*MsgDataToMongoByMQ) ProtoMessage() {} +func (*MsgDataToMongoByMQ) Descriptor() ([]byte, []int) { + return fileDescriptor_chat_64077d68a66b2cfd, []int{3} +} +func (m *MsgDataToMongoByMQ) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgDataToMongoByMQ.Unmarshal(m, b) +} +func (m *MsgDataToMongoByMQ) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgDataToMongoByMQ.Marshal(b, m, deterministic) +} +func (dst *MsgDataToMongoByMQ) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDataToMongoByMQ.Merge(dst, src) +} +func (m *MsgDataToMongoByMQ) XXX_Size() int { + return xxx_messageInfo_MsgDataToMongoByMQ.Size(m) +} +func (m *MsgDataToMongoByMQ) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDataToMongoByMQ.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDataToMongoByMQ proto.InternalMessageInfo + +func (m *MsgDataToMongoByMQ) GetLastSeq() uint64 { + if m != nil { + return m.LastSeq + } + return 0 +} + +func (m *MsgDataToMongoByMQ) GetAggregationID() string { + if m != nil { + return m.AggregationID + } + return "" +} + +func (m *MsgDataToMongoByMQ) GetMessageList() []*MsgDataToMQ { + if m != nil { + return m.MessageList + } + return nil +} + +func (m *MsgDataToMongoByMQ) GetTriggerID() string { + if m != nil { + return m.TriggerID + } + return "" +} + // message PullMessageReq { // string UserID = 1; // int64 SeqBegin = 2; @@ -210,7 +272,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_chat_9735d58eeaab60cd, []int{3} + return fileDescriptor_chat_64077d68a66b2cfd, []int{4} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -258,7 +320,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_chat_9735d58eeaab60cd, []int{4} + return fileDescriptor_chat_64077d68a66b2cfd, []int{5} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -319,7 +381,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{5} + return fileDescriptor_chat_64077d68a66b2cfd, []int{6} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -375,7 +437,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{6} + return fileDescriptor_chat_64077d68a66b2cfd, []int{7} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -443,7 +505,7 @@ func (m *ClearMsgReq) Reset() { *m = ClearMsgReq{} } func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) } func (*ClearMsgReq) ProtoMessage() {} func (*ClearMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{7} + return fileDescriptor_chat_64077d68a66b2cfd, []int{8} } func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b) @@ -496,7 +558,7 @@ func (m *ClearMsgResp) Reset() { *m = ClearMsgResp{} } func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) } func (*ClearMsgResp) ProtoMessage() {} func (*ClearMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_chat_9735d58eeaab60cd, []int{8} + return fileDescriptor_chat_64077d68a66b2cfd, []int{9} } func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b) @@ -534,6 +596,7 @@ func init() { proto.RegisterType((*MsgDataToMQ)(nil), "pbChat.MsgDataToMQ") proto.RegisterType((*MsgDataToDB)(nil), "pbChat.MsgDataToDB") proto.RegisterType((*PushMsgDataToMQ)(nil), "pbChat.PushMsgDataToMQ") + proto.RegisterType((*MsgDataToMongoByMQ)(nil), "pbChat.MsgDataToMongoByMQ") proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "pbChat.GetMaxAndMinSeqReq") proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "pbChat.GetMaxAndMinSeqResp") proto.RegisterType((*SendMsgReq)(nil), "pbChat.SendMsgReq") @@ -746,44 +809,48 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_9735d58eeaab60cd) } - -var fileDescriptor_chat_9735d58eeaab60cd = []byte{ - // 563 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xc1, 0x6e, 0xda, 0x40, - 0x10, 0x95, 0x43, 0x42, 0x92, 0x71, 0x22, 0xa4, 0x4d, 0x14, 0x59, 0x3e, 0x39, 0x96, 0x5a, 0xa1, - 0x56, 0x32, 0x12, 0x6d, 0x4f, 0xbd, 0xb4, 0xe0, 0xa8, 0x42, 0xaa, 0x9b, 0xc4, 0xd0, 0x4b, 0x2f, - 0x74, 0x03, 0x23, 0x63, 0x01, 0xf6, 0xe2, 0x31, 0x25, 0x6d, 0xbf, 0xa1, 0xe7, 0x1e, 0xfb, 0xab, - 0x95, 0x77, 0x0d, 0x18, 0x8c, 0x14, 0xd4, 0x43, 0x2f, 0x96, 0xde, 0xdb, 0xf1, 0x7b, 0x6f, 0x76, - 0x47, 0x03, 0xb5, 0xc1, 0x88, 0xa7, 0x8d, 0xec, 0xe3, 0x88, 0x24, 0x4e, 0x63, 0x56, 0x15, 0x0f, - 0xed, 0x11, 0x4f, 0xcd, 0xeb, 0x5b, 0x81, 0x51, 0xbf, 0xe3, 0x35, 0xc4, 0x38, 0x68, 0xc8, 0xa3, - 0x06, 0x0d, 0xc7, 0xfd, 0x05, 0x35, 0x16, 0xa4, 0x4a, 0xed, 0x9f, 0xa0, 0x7b, 0x14, 0xb8, 0x3c, - 0xe5, 0xbd, 0xd8, 0xbb, 0x67, 0x97, 0x70, 0x94, 0xc6, 0x63, 0x8c, 0x0c, 0xcd, 0xd2, 0xea, 0xa7, - 0xbe, 0x02, 0xcc, 0x02, 0x3d, 0x16, 0x98, 0xf0, 0x34, 0x8c, 0xa3, 0x8e, 0x6b, 0x1c, 0xc8, 0xb3, - 0x22, 0xc5, 0x5e, 0xc3, 0xf1, 0x54, 0xc9, 0x18, 0x15, 0x4b, 0xab, 0xeb, 0x4d, 0xd3, 0x21, 0x4c, - 0xbe, 0x61, 0xd2, 0xe7, 0x22, 0xec, 0x0b, 0x9e, 0xf0, 0x29, 0x39, 0xb9, 0x91, 0xbf, 0x2c, 0xb5, - 0xb1, 0x60, 0xee, 0xb6, 0x8a, 0x22, 0xda, 0xde, 0x22, 0x4f, 0x87, 0xb3, 0x7f, 0x69, 0x50, 0xbb, - 0x9b, 0xd3, 0xa8, 0xd8, 0xa8, 0x05, 0xfa, 0x6d, 0xe1, 0x2f, 0xd5, 0x6e, 0x91, 0x2a, 0xa6, 0x39, - 0xd8, 0x3f, 0x8d, 0x0d, 0x67, 0x62, 0x4e, 0xa3, 0x5e, 0xfc, 0x99, 0x30, 0xe9, 0xb8, 0xf2, 0x36, - 0x4e, 0xfd, 0x0d, 0xce, 0xfe, 0x04, 0xec, 0x03, 0xa6, 0x1e, 0x7f, 0x7c, 0x1f, 0x0d, 0xbd, 0x30, - 0xea, 0xe2, 0xcc, 0xc7, 0x19, 0xbb, 0x82, 0x6a, 0xfe, 0x8f, 0x0a, 0x93, 0xa3, 0xed, 0xa4, 0x07, - 0xa5, 0xa4, 0xf6, 0x02, 0x2e, 0x4a, 0x7a, 0x24, 0x98, 0x01, 0xc7, 0x37, 0x49, 0xd2, 0x8e, 0x87, - 0x28, 0x15, 0x8f, 0xfc, 0x25, 0xcc, 0xac, 0x6e, 0x92, 0xc4, 0xa3, 0x20, 0x57, 0xcb, 0x51, 0xc6, - 0x7b, 0xfc, 0xb1, 0x8b, 0x33, 0x19, 0xfb, 0xdc, 0xcf, 0x91, 0xe4, 0xa5, 0xae, 0x71, 0x98, 0xf3, - 0x12, 0xd9, 0x3f, 0x00, 0xba, 0x18, 0x0d, 0x3d, 0x0a, 0xb2, 0x06, 0xfe, 0xef, 0xec, 0xfc, 0xd1, - 0x40, 0x5f, 0x99, 0xab, 0x6e, 0x71, 0xb3, 0x5b, 0x5c, 0x77, 0x8b, 0x1b, 0xdd, 0x2a, 0x94, 0x25, - 0x53, 0x3e, 0x1e, 0x05, 0x1d, 0x57, 0xb6, 0x76, 0xea, 0x17, 0xa9, 0xac, 0x62, 0x30, 0x09, 0x31, - 0x4a, 0x55, 0xc5, 0x91, 0xaa, 0x28, 0x50, 0xcc, 0x84, 0x13, 0xc2, 0x68, 0xd8, 0x0b, 0xa7, 0x68, - 0x54, 0x2d, 0xad, 0x5e, 0xf1, 0x57, 0xd8, 0x1e, 0x80, 0xde, 0x9e, 0x20, 0x4f, 0xf2, 0xeb, 0xb9, - 0x82, 0xea, 0x7c, 0xe3, 0x7d, 0x15, 0xca, 0x24, 0x62, 0x91, 0xbf, 0xbc, 0x0a, 0xb8, 0xc2, 0xdb, - 0x97, 0x57, 0x29, 0xcf, 0xf6, 0x3b, 0x38, 0x5b, 0x9b, 0xfc, 0xcb, 0x35, 0x34, 0x7f, 0x57, 0xe0, - 0x30, 0xdb, 0x16, 0xec, 0x2b, 0xd4, 0xb6, 0xc6, 0x88, 0x3d, 0xdb, 0xf1, 0x12, 0xe5, 0xd1, 0x35, - 0x9f, 0xef, 0x53, 0x46, 0x82, 0xc5, 0x70, 0x79, 0x37, 0x9f, 0x4c, 0x3c, 0x24, 0xe2, 0x01, 0xb6, - 0xbe, 0x77, 0x71, 0xf6, 0x31, 0xa4, 0x94, 0xbd, 0xd8, 0xf1, 0xff, 0xae, 0xc2, 0xcc, 0xeb, 0xe5, - 0xde, 0xb5, 0x24, 0x58, 0x13, 0x8e, 0xf3, 0x19, 0x61, 0xcc, 0x51, 0x4b, 0xd1, 0x59, 0x4f, 0xac, - 0x79, 0x51, 0xe2, 0x48, 0xb0, 0x7b, 0x00, 0x17, 0x27, 0x1e, 0x05, 0x32, 0x9a, 0xb5, 0xc3, 0x6e, - 0x7d, 0x9c, 0x89, 0x5c, 0x3f, 0x51, 0x41, 0x82, 0xbd, 0x81, 0x93, 0xe5, 0x23, 0xb1, 0x95, 0x67, - 0x61, 0x36, 0xcc, 0xcb, 0x32, 0x49, 0xa2, 0x55, 0xfb, 0x72, 0xee, 0xc8, 0xb5, 0xfe, 0x56, 0x9d, - 0x3e, 0x54, 0xe5, 0xce, 0x7e, 0xf5, 0x37, 0x00, 0x00, 0xff, 0xff, 0xee, 0x03, 0xc5, 0x33, 0xf1, - 0x05, 0x00, 0x00, +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_64077d68a66b2cfd) } + +var fileDescriptor_chat_64077d68a66b2cfd = []byte{ + // 636 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x41, 0x6f, 0xda, 0x4c, + 0x10, 0x95, 0x43, 0x42, 0x92, 0x71, 0x22, 0xa4, 0x4d, 0x14, 0x21, 0xf4, 0x1d, 0x1c, 0xeb, 0x6b, + 0x85, 0x5a, 0x09, 0x24, 0xda, 0x9c, 0x7a, 0x69, 0x09, 0x51, 0x15, 0xa9, 0x6e, 0x12, 0x93, 0x5e, + 0x7a, 0xa1, 0x9b, 0x30, 0x5a, 0xac, 0x80, 0xbd, 0xec, 0x98, 0x26, 0x69, 0x7f, 0x43, 0xcf, 0x3d, + 0xf6, 0xdc, 0x7f, 0x59, 0xed, 0xae, 0x01, 0x83, 0x91, 0x82, 0x7a, 0xe8, 0x05, 0xe9, 0xbd, 0x7d, + 0xbc, 0x99, 0x37, 0x3b, 0x2b, 0x43, 0xe5, 0x76, 0xc0, 0xd3, 0xa6, 0xfe, 0x69, 0x48, 0x95, 0xa4, + 0x09, 0x2b, 0xcb, 0x9b, 0xd3, 0x01, 0x4f, 0x6b, 0xc7, 0x17, 0x12, 0xe3, 0xde, 0x79, 0xd0, 0x94, + 0x77, 0xa2, 0x69, 0x8e, 0x9a, 0xd4, 0xbf, 0xeb, 0xdd, 0x53, 0xf3, 0x9e, 0xac, 0xd4, 0xff, 0x0e, + 0x6e, 0x40, 0xa2, 0xc3, 0x53, 0x7e, 0x9d, 0x04, 0x57, 0xec, 0x10, 0xb6, 0xd2, 0xe4, 0x0e, 0xe3, + 0xaa, 0xe3, 0x39, 0xf5, 0xdd, 0xd0, 0x02, 0xe6, 0x81, 0x9b, 0x48, 0x54, 0x3c, 0x8d, 0x92, 0xf8, + 0xbc, 0x53, 0xdd, 0x30, 0x67, 0x79, 0x8a, 0xbd, 0x86, 0xed, 0x91, 0xb5, 0xa9, 0x96, 0x3c, 0xa7, + 0xee, 0xb6, 0x6a, 0x0d, 0x42, 0xf5, 0x15, 0x55, 0x8f, 0xcb, 0xa8, 0x27, 0xb9, 0xe2, 0x23, 0x6a, + 0x64, 0x85, 0xc2, 0xa9, 0xd4, 0xc7, 0x5c, 0xf1, 0x4e, 0x3b, 0x6f, 0xe2, 0xac, 0x6d, 0xf2, 0x74, + 0x73, 0xfe, 0x0f, 0x07, 0x2a, 0x97, 0x13, 0x1a, 0xe4, 0x83, 0x7a, 0xe0, 0x5e, 0xe4, 0xfe, 0x65, + 0xe3, 0xe6, 0xa9, 0x7c, 0x37, 0x1b, 0xeb, 0x77, 0xe3, 0xc3, 0x9e, 0x9c, 0xd0, 0xe0, 0x3a, 0xf9, + 0x44, 0xa8, 0xce, 0x3b, 0x66, 0x1a, 0xbb, 0xe1, 0x02, 0xe7, 0xff, 0x76, 0x80, 0xcd, 0x7b, 0x49, + 0x62, 0x91, 0xb4, 0x1f, 0x83, 0x2b, 0x56, 0x85, 0xed, 0x21, 0xa7, 0xb4, 0x8b, 0x63, 0xd3, 0xce, + 0x66, 0x38, 0x85, 0xec, 0x7f, 0xd8, 0xe7, 0x42, 0x28, 0x14, 0x8b, 0x21, 0x17, 0x49, 0x76, 0x02, + 0xee, 0x08, 0x89, 0xb8, 0xc0, 0x0f, 0x11, 0xa5, 0xd5, 0x92, 0x57, 0xaa, 0xbb, 0xad, 0x83, 0x86, + 0xdd, 0x85, 0x46, 0x2e, 0x7c, 0x98, 0xd7, 0xb1, 0xff, 0x60, 0x37, 0x55, 0x91, 0x10, 0xa6, 0xdd, + 0x4d, 0x63, 0x3c, 0x27, 0xfc, 0x8f, 0xc0, 0xde, 0x63, 0x1a, 0xf0, 0x87, 0x77, 0x71, 0x3f, 0x88, + 0xe2, 0x2e, 0x8e, 0x43, 0x1c, 0xb3, 0x23, 0x28, 0x67, 0xf9, 0xec, 0xe0, 0x32, 0xb4, 0x3c, 0xd5, + 0x8d, 0xc2, 0x54, 0xfd, 0x7b, 0x38, 0x28, 0xf8, 0x91, 0xd4, 0xd9, 0xcf, 0x94, 0x3a, 0x4d, 0xfa, + 0x68, 0x1c, 0xb7, 0xc2, 0x29, 0xd4, 0xa5, 0xce, 0x94, 0x0a, 0x48, 0x64, 0x6e, 0x19, 0xd2, 0x7c, + 0xc0, 0x1f, 0xf4, 0xb0, 0xf4, 0x88, 0xf7, 0xc3, 0x0c, 0x19, 0xde, 0xf8, 0x9a, 0x2c, 0x9a, 0x37, + 0xc8, 0xff, 0x06, 0xd0, 0xc5, 0xb8, 0x1f, 0x90, 0xd0, 0x01, 0xfe, 0xed, 0x9e, 0xff, 0x72, 0xc0, + 0x9d, 0x15, 0xb7, 0x69, 0x71, 0x31, 0x2d, 0xce, 0xd3, 0xe2, 0x42, 0x5a, 0x8b, 0x74, 0x67, 0xb6, + 0x4e, 0x40, 0x62, 0x76, 0x4d, 0x79, 0x4a, 0x2b, 0x6e, 0x87, 0x11, 0xc6, 0xa9, 0x55, 0x6c, 0x59, + 0x45, 0x8e, 0x62, 0x35, 0xd8, 0x21, 0x8c, 0xfb, 0xd7, 0xd1, 0x08, 0xab, 0x65, 0xcf, 0xa9, 0x97, + 0xc2, 0x19, 0xf6, 0x6f, 0xc1, 0x3d, 0x1d, 0x22, 0x57, 0xd9, 0x78, 0x8e, 0xa0, 0x3c, 0x59, 0xb8, + 0x5f, 0x8b, 0xb4, 0x45, 0x22, 0xb3, 0x9b, 0xb7, 0x0d, 0xce, 0xf0, 0xf2, 0xf0, 0x4a, 0xc5, 0x77, + 0xf8, 0x16, 0xf6, 0xe6, 0x45, 0xfe, 0x66, 0x0c, 0xad, 0x9f, 0x25, 0xd8, 0xd4, 0xdb, 0xcc, 0xbe, + 0x40, 0x65, 0x69, 0x8d, 0xd8, 0xb3, 0x15, 0x37, 0x51, 0x5c, 0xdd, 0xda, 0xf3, 0x75, 0x64, 0x24, + 0x59, 0x02, 0x87, 0x97, 0x93, 0xe1, 0x30, 0xb0, 0x2f, 0xa5, 0xfd, 0xd8, 0xc5, 0xb1, 0x79, 0x2e, + 0x2f, 0x56, 0xfc, 0x7f, 0x95, 0x50, 0xd7, 0x7a, 0xb9, 0xb6, 0x96, 0x24, 0x6b, 0xc1, 0x76, 0xb6, + 0x23, 0x8c, 0x4d, 0x1f, 0xed, 0x7c, 0x63, 0x6b, 0x07, 0x05, 0x8e, 0x24, 0xbb, 0x02, 0xe8, 0xe0, + 0x30, 0x20, 0x61, 0x5a, 0xf3, 0x56, 0x94, 0x9b, 0x1f, 0x6b, 0x93, 0xe3, 0x27, 0x14, 0x24, 0xd9, + 0x09, 0xec, 0x4c, 0x2f, 0x89, 0xcd, 0x6a, 0xe6, 0x76, 0xa3, 0x76, 0x58, 0x24, 0x49, 0xb6, 0x2b, + 0x9f, 0xf7, 0x1b, 0xe6, 0x13, 0xf4, 0xc6, 0x9e, 0xde, 0x94, 0xcd, 0xf7, 0xe5, 0xd5, 0x9f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x88, 0x55, 0xa7, 0xa7, 0x9d, 0x06, 0x00, 0x00, } diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index 5fd88be5c..74ea0f396 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -22,6 +22,14 @@ message PushMsgDataToMQ{ server_api_params.MsgData msgData = 2; string pushToUserID = 3; } +message MsgDataToMongoByMQ{ + uint64 lastSeq =1; + string aggregationID = 2; + repeated MsgDataToMQ messageList = 3; + string triggerID = 4; + + +} //message PullMessageReq { // string UserID = 1; From 5e51eebe8abd04af6d601db7737bc4191657bcc5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 12:21:49 +0800 Subject: [PATCH 206/256] msg handle --- config/config.yaml | 3 +++ docker-compose.yaml | 2 +- internal/msg_transfer/logic/init.go | 2 ++ .../logic/online_history_msg_handler.go | 16 +++++++++----- pkg/common/config/config.go | 4 ++++ pkg/common/db/model.go | 22 +++++++++---------- 6 files changed, 32 insertions(+), 17 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index a3e836a15..85c5bc9f1 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -47,6 +47,9 @@ kafka: ws2mschatoffline: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat_offline" + msgtomongo: + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + topic: "msg_to_mongo" ms2pschat: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" diff --git a/docker-compose.yaml b/docker-compose.yaml index 4a419ae1b..e1d2a98b2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_CREATE_TOPICS: "ws2ms_chat:2:1,ms2ps_chat:2:1" + KAFKA_CREATE_TOPICS: "ws2ms_chat:2:1,ms2ps_chat:2:1,msg_to_mongo:2:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 8829906e4..65457878c 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -22,6 +22,7 @@ var ( persistentCH PersistentConsumerHandler historyCH OnlineHistoryConsumerHandler producer *kafka.Producer + producerToMongo *kafka.Producer cmdCh chan Cmd2Value onlineTopicStatus int w *sync.Mutex @@ -43,6 +44,7 @@ func Init() { statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) producer = kafka.NewKafkaProducer(config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.Ms2pschat.Topic) + producerToMongo = kafka.NewKafkaProducer(config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.MsgToMongo.Topic) } func Run() { //register mysqlConsumerHandler to diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index afacf097c..42684c7ff 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -155,11 +155,17 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { - hashCode := getHashCode(aggregationID) - channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) - //go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { - och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} + pid, offset, err := producerToMongo.SendMessage(&pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID) + if err != nil { + log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) + } else { + // log.NewWarn(m.OperationID, "sendMsgToKafka client msgID ", m.MsgData.ClientMsgID) + } + //hashCode := getHashCode(aggregationID) + //channelID := hashCode % ChannelNum + //log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) + ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { + //och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { for { diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index dff8a693e..0618ca7d7 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -203,6 +203,10 @@ type config struct { Addr []string `yaml:"addr"` Topic string `yaml:"topic"` } + MsgToMongo struct { + Addr []string `yaml:"addr"` + Topic string `yaml:"topic"` + } Ms2pschat struct { Addr []string `yaml:"addr"` Topic string `yaml:"topic"` diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 2418e7658..92bbca353 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.Client + rdb *go_redis.ClusterClient } func key(dbAddress, dbName string) string { @@ -112,17 +112,17 @@ func init() { // ) // }, //} - DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, - Password: config.Config.Redis.DBPassWord, // no password set - DB: 0, // use default DB - PoolSize: 100, // 连接池大小 - }) - //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - // Addrs: []string{config.Config.Redis.DBAddress}, - // PoolSize: 100, - // Password: config.Config.Redis.DBPassWord, + //DB.rdb = go_redis.NewClient(&go_redis.Options{ + // Addr: config.Config.Redis.DBAddress, + // Password: config.Config.Redis.DBPassWord, // no password set + // DB: 0, // use default DB + // PoolSize: 100, // 连接池大小 //}) + DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + Addrs: []string{config.Config.Redis.DBAddress}, + PoolSize: 50, + //Password: config.Config.Redis.DBPassWord, + }) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() _, err = DB.rdb.Ping(ctx).Result() From 7e6e214f08c6c274bb72f593dff51654d5d86a2c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 12:41:31 +0800 Subject: [PATCH 207/256] add global recv opt --- internal/rpc/user/user.go | 17 ++++++++++++----- .../db/mysql_model/im_mysql_model/user_model.go | 14 +++++++++++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index bfe458dce..922ddc09d 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -391,12 +391,19 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } + err = imdb.UpdateUserInfoByMap(user, m) + if err != nil { + log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + } else { + err := imdb.UpdateUserInfo(user) + if err != nil { + log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } } - err := imdb.UpdateUserInfo(user, m) - if err != nil { - log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) client := pbFriend.NewFriendClient(etcdConn) newReq := &pbFriend.GetFriendListReq{ diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index e58ed8327..8882f6931 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -96,16 +96,24 @@ func GetUserNameByUserID(userID string) (string, error) { return user.Nickname, nil } -func UpdateUserInfo(user db.User, m ...map[string]interface{}) error { +func UpdateUserInfo(user db.User) error { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return err } dbConn.LogMode(false) err = dbConn.Table("users").Where("user_id=?", user.UserID).Update(&user).Error - if len(m) > 0 { - err = dbConn.Table("users").Where("user_id=?", user.UserID).Updates(m[0]).Error + + return err +} + +func UpdateUserInfoByMap(user db.User, m map[string]interface{}) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return err } + dbConn.LogMode(false) + err = dbConn.Table("users").Where("user_id=?", user.UserID).Updates(m).Error return err } From 0a44a8e78a04747cc2acd02d9596f9e6f4d4cb71 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 12:53:39 +0800 Subject: [PATCH 208/256] add global recv opt --- internal/rpc/msg/send_msg.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 3dc98c3a7..6b6f33198 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -462,13 +462,29 @@ func returnMsg(replay *pbChat.SendMsgResp, pb *pbChat.SendMsgReq, errCode int32, } func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType int, pb *pbChat.SendMsgReq) bool { + opt, err := db.DB.GetUserGlobalMsgRecvOpt(userID) + if err != nil { + log.NewError(pb.OperationID, "GetUserGlobalMsgRecvOpt from redis err", userID, pb.String(), err.Error()) + + } + switch opt { + case constant.ReceiveMessage: + case constant.NotReceiveMessage: + return false + case constant.ReceiveNotNotifyMessage: + if pb.MsgData.Options == nil { + pb.MsgData.Options = make(map[string]bool, 10) + } + utils.SetSwitchFromOptions(pb.MsgData.Options, constant.IsOfflinePush, false) + return true + } conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) - opt, err := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) - if err != nil && err != go_redis.Nil { - log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), err.Error()) + singleOpt, sErr := db.DB.GetSingleConversationRecvMsgOpt(userID, conversationID) + if sErr != nil && sErr != go_redis.Nil { + log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), sErr.Error()) return true } - switch opt { + switch singleOpt { case constant.ReceiveMessage: return true case constant.NotReceiveMessage: From 96d3ae86cc22d7bd94e659ce89179a4c199059fd Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 13:41:18 +0800 Subject: [PATCH 209/256] Merge branch 'superGroup' of github.com:OpenIMSDK/Open-IM-Server into superGroup --- pkg/common/db/model.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 92bbca353..a6ed0408a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.ClusterClient + rdb *go_redis.Client } func key(dbAddress, dbName string) string { @@ -112,17 +112,17 @@ func init() { // ) // }, //} - //DB.rdb = go_redis.NewClient(&go_redis.Options{ - // Addr: config.Config.Redis.DBAddress, - // Password: config.Config.Redis.DBPassWord, // no password set - // DB: 0, // use default DB - // PoolSize: 100, // 连接池大小 - //}) - DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - Addrs: []string{config.Config.Redis.DBAddress}, - PoolSize: 50, - //Password: config.Config.Redis.DBPassWord, + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 }) + //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + // Addrs: []string{config.Config.Redis.DBAddress}, + // PoolSize: 50, + //Password: config.Config.Redis.DBPassWord, + //}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() _, err = DB.rdb.Ping(ctx).Result() From dbc2713495687fbff5689e9594a2fd4126b647ed Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:09:28 +0800 Subject: [PATCH 210/256] Handling exception: getcdv3.GetConn == nil --- internal/api/auth/auth.go | 24 ++- internal/api/chat/del_msg.go | 16 +- internal/api/chat/get_max_min_seq.go | 9 +- internal/api/conversation/conversation.go | 56 +++++- internal/api/friend/friend.go | 92 +++++++-- internal/api/group/group.go | 176 +++++++++++++++--- internal/api/group/super_group.go | 16 +- internal/api/manage/management_chat.go | 28 ++- internal/api/manage/management_user.go | 24 ++- internal/api/office/tag.go | 56 +++++- internal/cms_api/message_cms/message.go | 40 +++- internal/cms_api/statistics/statistics.go | 70 +++++-- internal/msg_gateway/gate/batch_push.go | 8 +- internal/msg_gateway/gate/logic.go | 46 ++++- .../logic/online_history_msg_handler.go | 2 +- internal/rpc/user/user.go | 8 +- pkg/common/constant/error.go | 1 + pkg/grpc-etcdv3/getcdv3/resolver.go | 33 ++-- 18 files changed, 588 insertions(+), 117 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 66a0c3825..84beaa32b 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -36,7 +36,13 @@ func UserRegister(c *gin.Context) { //copier.Copy(req.UserInfo, ¶ms) req.OperationID = params.OperationID log.NewInfo(req.OperationID, "UserRegister args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewAuthClient(etcdConn) reply, err := client.UserRegister(context.Background(), req) if err != nil { @@ -84,7 +90,13 @@ func UserToken(c *gin.Context) { } req := &rpc.UserTokenReq{Platform: params.Platform, FromUserID: params.UserID, OperationID: params.OperationID} log.NewInfo(req.OperationID, "UserToken args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewAuthClient(etcdConn) reply, err := client.UserToken(context.Background(), req) if err != nil { @@ -148,7 +160,13 @@ func ForceLogout(c *gin.Context) { } log.NewInfo(req.OperationID, "ForceLogout args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewAuthClient(etcdConn) reply, err := client.ForceLogout(context.Background(), req) if err != nil { diff --git a/internal/api/chat/del_msg.go b/internal/api/chat/del_msg.go index bad553938..cb13f3dca 100644 --- a/internal/api/chat/del_msg.go +++ b/internal/api/chat/del_msg.go @@ -30,7 +30,13 @@ func DelMsg(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, &req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) } - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID) + if grpcConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } msgClient := rpc.NewChatClient(grpcConn) respPb, err := msgClient.DelMsgList(context.Background(), &reqPb) if err != nil { @@ -67,7 +73,13 @@ func ClearMsg(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + " getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewChatClient(etcdConn) RpcResp, err := client.ClearMsg(context.Background(), req) if err != nil { diff --git a/internal/api/chat/get_max_min_seq.go b/internal/api/chat/get_max_min_seq.go index 5cca7c775..410a6ffb0 100644 --- a/internal/api/chat/get_max_min_seq.go +++ b/internal/api/chat/get_max_min_seq.go @@ -35,7 +35,14 @@ func GetSeq(c *gin.Context) { pbData := sdk_ws.GetMaxAndMinSeqReq{} pbData.UserID = params.SendID pbData.OperationID = params.OperationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, pbData.OperationID) + if grpcConn == nil { + errMsg := pbData.OperationID + " getcdv3.GetConn == nil" + log.NewError(pbData.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.GetMaxAndMinSeq(context.Background(), &pbData) if err != nil { diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go index 2e1709847..b60b89ed4 100644 --- a/internal/api/conversation/conversation.go +++ b/internal/api/conversation/conversation.go @@ -32,7 +32,13 @@ func SetConversation(c *gin.Context) { if err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -63,7 +69,13 @@ func ModifyConversationField(c *gin.Context) { if err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbConversation.NewConversationClient(etcdConn) respPb, err := client.ModifyConversationField(context.Background(), &reqPb) if err != nil { @@ -92,7 +104,13 @@ func BatchSetConversations(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.BatchSetConversations(context.Background(), &reqPb) if err != nil { @@ -124,7 +142,13 @@ func GetAllConversations(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.GetAllConversations(context.Background(), &reqPb) if err != nil { @@ -156,7 +180,13 @@ func GetConversation(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.GetConversation(context.Background(), &reqPb) if err != nil { @@ -188,7 +218,13 @@ func GetConversations(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.GetConversations(context.Background(), &reqPb) if err != nil { @@ -220,7 +256,13 @@ func SetRecvMsgOpt(c *gin.Context) { if err := utils.CopyStructFields(&reqPb, req); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetRecvMsgOpt(context.Background(), &reqPb) if err != nil { diff --git a/internal/api/friend/friend.go b/internal/api/friend/friend.go index 58cf37f7f..e756983a9 100644 --- a/internal/api/friend/friend.go +++ b/internal/api/friend/friend.go @@ -36,7 +36,7 @@ func AddBlack(c *gin.Context) { } log.NewInfo(params.OperationID, "AddBlacklist args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.AddBlacklist(context.Background(), req) if err != nil { @@ -69,8 +69,14 @@ func ImportFriend(c *gin.Context) { } log.NewInfo(req.OperationID, "ImportFriend args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.ImportFriend(context.Background(), req) if err != nil { @@ -114,7 +120,13 @@ func AddFriend(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "AddFriend args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.AddFriend(context.Background(), req) if err != nil { @@ -153,7 +165,14 @@ func AddFriendResponse(c *gin.Context) { utils.CopyStructFields(req, ¶ms) log.NewInfo(req.CommID.OperationID, "AddFriendResponse args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.AddFriendResponse(context.Background(), req) if err != nil { @@ -189,7 +208,13 @@ func DeleteFriend(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "DeleteFriend args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.DeleteFriend(context.Background(), req) if err != nil { @@ -225,7 +250,13 @@ func GetBlacklist(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetBlacklist args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetBlacklist(context.Background(), req) if err != nil { @@ -268,7 +299,13 @@ func SetFriendRemark(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "SetFriendComment args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.SetFriendRemark(context.Background(), req) if err != nil { @@ -303,7 +340,14 @@ func RemoveBlack(c *gin.Context) { } log.NewInfo(req.CommID.OperationID, "RemoveBlacklist args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.RemoveBlacklist(context.Background(), req) if err != nil { @@ -338,7 +382,13 @@ func IsFriend(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "IsFriend args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.IsFriend(context.Background(), req) if err != nil { @@ -375,7 +425,13 @@ func GetFriendList(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetFriendList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetFriendList(context.Background(), req) if err != nil { @@ -413,7 +469,13 @@ func GetFriendApplyList(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetFriendApplyList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetFriendApplyList(context.Background(), req) @@ -451,7 +513,13 @@ func GetSelfFriendApplyList(c *gin.Context) { log.NewInfo(req.CommID.OperationID, "GetSelfApplyList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewFriendClient(etcdConn) RpcResp, err := client.GetSelfApplyList(context.Background(), req) if err != nil { diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 529e7494c..d9b1bf9ff 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -43,7 +43,13 @@ func KickGroupMember(c *gin.Context) { log.NewInfo(req.OperationID, "KickGroupMember args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.KickGroupMember(context.Background(), req) if err != nil { @@ -88,7 +94,13 @@ func GetGroupMembersInfo(c *gin.Context) { log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupMembersInfo(context.Background(), req) @@ -126,7 +138,13 @@ func GetGroupMemberList(c *gin.Context) { log.NewInfo(req.OperationID, "GetGroupMemberList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupMemberList(context.Background(), req) @@ -165,7 +183,13 @@ func GetGroupAllMemberList(c *gin.Context) { log.NewInfo(req.OperationID, "GetGroupAllMember args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupAllMember(context.Background(), req) if err != nil { @@ -202,7 +226,13 @@ func GetJoinedGroupList(c *gin.Context) { log.NewInfo(req.OperationID, "GetJoinedGroupList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetJoinedGroupList(context.Background(), req) if err != nil { @@ -239,7 +269,13 @@ func InviteUserToGroup(c *gin.Context) { log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.InviteUserToGroup(context.Background(), req) if err != nil { @@ -291,7 +327,13 @@ func CreateGroup(c *gin.Context) { log.NewInfo(req.OperationID, "CreateGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.CreateGroup(context.Background(), req) if err != nil { @@ -328,7 +370,13 @@ func GetRecvGroupApplicationList(c *gin.Context) { //} log.NewInfo(req.OperationID, "GetGroupApplicationList args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.GetGroupApplicationList(context.Background(), req) if err != nil { @@ -359,7 +407,13 @@ func GetUserReqGroupApplicationList(c *gin.Context) { // return //} log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetUserReqApplicationList(context.Background(), req) if err != nil { @@ -395,7 +449,13 @@ func GetGroupsInfo(c *gin.Context) { } log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.GetGroupsInfo(context.Background(), req) if err != nil { @@ -433,7 +493,13 @@ func ApplicationGroupResponse(c *gin.Context) { log.NewInfo(req.OperationID, "ApplicationGroupResponse args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.GroupApplicationResponse(context.Background(), req) if err != nil { @@ -468,7 +534,13 @@ func JoinGroup(c *gin.Context) { } log.NewInfo(req.OperationID, "JoinGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.JoinGroup(context.Background(), req) @@ -504,7 +576,13 @@ func QuitGroup(c *gin.Context) { log.NewInfo(req.OperationID, "QuitGroup args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.QuitGroup(context.Background(), req) if err != nil { @@ -540,7 +618,13 @@ func SetGroupInfo(c *gin.Context) { log.NewInfo(req.OperationID, "SetGroupInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) RpcResp, err := client.SetGroupInfo(context.Background(), req) if err != nil { @@ -575,7 +659,13 @@ func TransferGroupOwner(c *gin.Context) { log.NewInfo(req.OperationID, "TransferGroupOwner args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.TransferGroupOwner(context.Background(), req) if err != nil { @@ -611,7 +701,13 @@ func DismissGroup(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.DismissGroup(context.Background(), req) if err != nil { @@ -647,7 +743,13 @@ func MuteGroupMember(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.MuteGroupMember(context.Background(), req) if err != nil { @@ -683,7 +785,13 @@ func CancelMuteGroupMember(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.CancelMuteGroupMember(context.Background(), req) if err != nil { @@ -719,7 +827,13 @@ func MuteGroup(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.MuteGroup(context.Background(), req) if err != nil { @@ -755,7 +869,13 @@ func CancelMuteGroup(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.CancelMuteGroup(context.Background(), req) if err != nil { @@ -793,7 +913,13 @@ func SetGroupMemberNickname(c *gin.Context) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) reply, err := client.SetGroupMemberNickname(context.Background(), req) if err != nil { @@ -846,7 +972,13 @@ func SetGroupMemberInfo(c *gin.Context) { reqPb.RoleLevel = &wrappers.Int32Value{Value: *req.RoleLevel} } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) respPb, err := client.SetGroupMemberInfo(context.Background(), reqPb) if err != nil { diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index c3b177dae..b5c123700 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -31,7 +31,13 @@ func GetJoinedSuperGroupList(c *gin.Context) { return } reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID, OpUserID: opUserID, UserID: req.FromUserID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb) if err != nil { @@ -61,7 +67,13 @@ func GetSuperGroupsInfo(c *gin.Context) { return } reqPb := rpc.GetSuperGroupsInfoReq{OperationID: req.OperationID, OpUserID: opUserID, GroupIDList: req.GroupIDList} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewGroupClient(etcdConn) rpcResp, err := client.GetSuperGroupsInfo(context.Background(), &reqPb) if err != nil { diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 5ed04bf7e..6c9cd5ece 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -138,7 +138,7 @@ func ManagementSendMsg(c *gin.Context) { log.Error(c.PostForm("operationID"), "data args validate err", err.Error()) return } - log.NewInfo("", data, params) + log.NewInfo(params.OperationID, data, params) token := c.Request.Header.Get("token") claims, err := token_verify.ParseToken(token, params.OperationID) if err != nil { @@ -169,12 +169,18 @@ func ManagementSendMsg(c *gin.Context) { log.NewInfo(params.OperationID, "Ws call success to ManagementSendMsgReq", params) pbData := newUserSendMsgReq(¶ms) - log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) + log.Info(params.OperationID, "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, params.OperationID) + if etcdConn == nil { + errMsg := params.OperationID + "getcdv3.GetConn == nil" + log.NewError(params.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbChat.NewChatClient(etcdConn) - log.Info("", "", "api ManagementSendMsg call, api call rpc...") + log.Info(params.OperationID, "", "api ManagementSendMsg call, api call rpc...") RpcResp, err := client.SendMsg(context.Background(), pbData) if err != nil { @@ -182,7 +188,7 @@ func ManagementSendMsg(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"}) return } - log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String()) + log.Info(params.OperationID, "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String()) resp := api.ManagementSendMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, ResultList: server_api_params.UserSendMsgResp{ServerMsgID: RpcResp.ServerMsgID, ClientMsgID: RpcResp.ClientMsgID, SendTime: RpcResp.SendTime}} log.Info(params.OperationID, "ManagementSendMsg return", resp) c.JSON(http.StatusOK, resp) @@ -239,7 +245,7 @@ func ManagementBatchSendMsg(c *gin.Context) { log.Error(c.PostForm("operationID"), "data args validate err", err.Error()) return } - log.NewInfo("", data, params) + log.NewInfo(params.OperationID, data, params) token := c.Request.Header.Get("token") claims, err := token_verify.ParseToken(token, params.OperationID) if err != nil { @@ -256,8 +262,14 @@ func ManagementBatchSendMsg(c *gin.Context) { for _, recvID := range params.RecvIDList { pbData := newUserSendMsgReq(¶ms.ManagementSendMsgReq) pbData.MsgData.RecvID = recvID - log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + log.Info(params.OperationID, "", "api ManagementSendMsg call start..., ", pbData.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, params.OperationID) + if etcdConn == nil { + errMsg := params.OperationID + "getcdv3.GetConn == nil" + log.NewError(params.OperationID, errMsg) + resp.Data.FailedIDList = append(resp.Data.FailedIDList, recvID) + continue + } client := pbChat.NewChatClient(etcdConn) rpcResp, err := client.SendMsg(context.Background(), pbData) if err != nil { diff --git a/internal/api/manage/management_user.go b/internal/api/manage/management_user.go index 6fc9d161d..62d2d6651 100644 --- a/internal/api/manage/management_user.go +++ b/internal/api/manage/management_user.go @@ -42,7 +42,13 @@ func DeleteUser(c *gin.Context) { } log.NewInfo(params.OperationID, "DeleteUser args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.DeleteUsers(context.Background(), req) @@ -78,7 +84,13 @@ func GetAllUsersUid(c *gin.Context) { } log.NewInfo(params.OperationID, "GetAllUsersUid args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetAllUserID(context.Background(), req) if err != nil { @@ -114,7 +126,13 @@ func AccountCheck(c *gin.Context) { } log.NewInfo(params.OperationID, "AccountCheck args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.AccountCheck(context.Background(), req) diff --git a/internal/api/office/tag.go b/internal/api/office/tag.go index 02278f60e..9617d381d 100644 --- a/internal/api/office/tag.go +++ b/internal/api/office/tag.go @@ -42,7 +42,13 @@ func GetUserTags(c *gin.Context) { reqPb.UserID = userID reqPb.OperationID = req.OperationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserTags(context.Background(), &reqPb) if err != nil { @@ -89,7 +95,13 @@ func CreateTag(c *gin.Context) { } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.CreateTag(context.Background(), &reqPb) if err != nil { @@ -131,7 +143,13 @@ func DeleteTag(c *gin.Context) { } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.DeleteTag(context.Background(), &reqPb) if err != nil { @@ -173,7 +191,13 @@ func SetTag(c *gin.Context) { } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.SetTag(context.Background(), &reqPb) if err != nil { @@ -215,7 +239,13 @@ func SendMsg2Tag(c *gin.Context) { } reqPb.SendID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.SendMsg2Tag(context.Background(), &reqPb) if err != nil { @@ -259,7 +289,13 @@ func GetTagSendLogs(c *gin.Context) { PageNumber: req.PageNumber, ShowNumber: req.ShowNumber, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) maxSizeOption := grpc.MaxCallRecvMsgSize(1024 * 1024 * 20) respPb, err := client.GetTagSendLogs(context.Background(), &reqPb, maxSizeOption) @@ -308,7 +344,13 @@ func GetUserTagByID(c *gin.Context) { reqPb.UserID = userID reqPb.OperationID = req.OperationID reqPb.TagID = req.TagID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserTagByID(context.Background(), &reqPb) if err != nil { diff --git a/internal/cms_api/message_cms/message.go b/internal/cms_api/message_cms/message.go index 0a56bb99a..bd5949771 100644 --- a/internal/cms_api/message_cms/message.go +++ b/internal/cms_api/message_cms/message.go @@ -10,6 +10,7 @@ import ( pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "net/http" "strings" "Open_IM/pkg/common/constant" @@ -21,7 +22,14 @@ func BroadcastMessage(c *gin.Context) { var ( reqPb pbMessage.BoradcastMessageReq ) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) _, err := client.BoradcastMessage(context.Background(), &reqPb) if err != nil { @@ -36,7 +44,14 @@ func MassSendMassage(c *gin.Context) { var ( reqPb pbMessage.MassSendMessageReq ) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) _, err := client.MassSendMessage(context.Background(), &reqPb) if err != nil { @@ -51,7 +66,14 @@ func WithdrawMessage(c *gin.Context) { var ( reqPb pbMessage.WithdrawMessageReq ) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) _, err := client.WithdrawMessage(context.Background(), &reqPb) if err != nil { @@ -78,8 +100,14 @@ func GetChatLogs(c *gin.Context) { ShowNumber: int32(req.ShowNumber), } utils.CopyStructFields(&reqPb, &req) - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbMessage.NewMessageCMSClient(etcdConn) respPb, err := client.GetChatLogs(context.Background(), &reqPb) if err != nil { @@ -106,6 +134,6 @@ func GetChatLogs(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.ChatLogsNum = int(respPb.ChatLogsNum) - log.NewInfo("", utils.GetSelfFuncName(), "resp", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } diff --git a/internal/cms_api/statistics/statistics.go b/internal/cms_api/statistics/statistics.go index 89fb6056b..b33bdee12 100644 --- a/internal/cms_api/statistics/statistics.go +++ b/internal/cms_api/statistics/statistics.go @@ -10,6 +10,7 @@ import ( pb "Open_IM/pkg/proto/statistics" "Open_IM/pkg/utils" "context" + "net/http" "strings" "github.com/gin-gonic/gin" @@ -27,9 +28,16 @@ func GetMessagesStatistics(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetMessageStatistics(context.Background(), &reqPb) if err != nil { @@ -58,7 +66,7 @@ func GetMessagesStatistics(c *gin.Context) { MessageNum: int(v.Num), }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -74,13 +82,20 @@ func GetUserStatistics(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetUserStatistics(context.Background(), &reqPb) if err != nil { - log.NewError("0", utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error()) + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } @@ -115,7 +130,7 @@ func GetUserStatistics(c *gin.Context) { TotalUserNum: int(v.Num), }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -131,9 +146,16 @@ func GetGroupStatistics(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetGroupStatistics(context.Background(), &reqPb) if err != nil { @@ -165,7 +187,7 @@ func GetGroupStatistics(c *gin.Context) { }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -181,9 +203,16 @@ func GetActiveUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetActiveUser(context.Background(), &reqPb) if err != nil { @@ -192,7 +221,7 @@ func GetActiveUser(c *gin.Context) { return } utils.CopyStructFields(&resp.ActiveUserList, respPb.Users) - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -208,13 +237,20 @@ func GetActiveGroup(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.StatisticsReq, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetActiveGroup(context.Background(), &reqPb) if err != nil { - log.NewError("0", utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error()) + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } @@ -229,6 +265,6 @@ func GetActiveGroup(c *gin.Context) { MessageNum: int(group.MessageNum), }) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } diff --git a/internal/msg_gateway/gate/batch_push.go b/internal/msg_gateway/gate/batch_push.go index 6640fa485..76055d23b 100644 --- a/internal/msg_gateway/gate/batch_push.go +++ b/internal/msg_gateway/gate/batch_push.go @@ -89,7 +89,13 @@ func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, u rpcReq.SeqList = seqList rpcReq.UserID = userID rpcReq.OperationID = operationID - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, rpcReq.OperationID) + if grpcConn == nil { + errMsg := "getcdv3.GetConn == nil" + log.NewError(rpcReq.OperationID, errMsg) + return nil + } + msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) if err != nil { diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 95b6fd85c..2ece3bd94 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -68,7 +68,15 @@ func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { rpcReq.UserID = m.SendID rpcReq.OperationID = m.OperationID log.Debug(m.OperationID, "Ws call success to getMaxAndMinSeq", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.GetMaxAndMinSeqReq).GroupIDList) - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, rpcReq.OperationID) + if grpcConn == nil { + errMsg := rpcReq.OperationID + "getcdv3.GetConn == nil" + nReply.ErrCode = 500 + nReply.ErrMsg = errMsg + log.NewError(rpcReq.OperationID, errMsg) + ws.getSeqResp(conn, m, nReply) + return + } msgClient := pbChat.NewChatClient(grpcConn) rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) if err != nil { @@ -115,7 +123,15 @@ func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { rpcReq.OperationID = m.OperationID rpcReq.GroupSeqList = data.(sdk_ws.PullMessageBySeqListReq).GroupSeqList log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList) - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, m.OperationID) + if grpcConn == nil { + errMsg := rpcReq.OperationID + "getcdv3.GetConn == nil" + nReply.ErrCode = 500 + nReply.ErrMsg = errMsg + log.NewError(rpcReq.OperationID, errMsg) + ws.pullMsgBySeqListResp(conn, m, nReply) + return + } msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) if err != nil { @@ -166,7 +182,15 @@ func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { MsgData: &data, } log.NewInfo(m.OperationID, "Ws call success to sendMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, data) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, m.OperationID) + if etcdConn == nil { + errMsg := m.OperationID + "getcdv3.GetConn == nil" + nReply.ErrCode = 500 + nReply.ErrMsg = errMsg + log.NewError(m.OperationID, errMsg) + ws.sendMsgResp(conn, m, nReply) + return + } client := pbChat.NewChatClient(etcdConn) reply, err := client.SendMsg(context.Background(), &pbData) if err != nil { @@ -209,7 +233,13 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg, m.OperationID) if isPass { signalResp := pbRtc.SignalResp{} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRealTimeCommName, m.OperationID) + if etcdConn == nil { + errMsg := m.OperationID + "getcdv3.GetConn == nil" + log.NewError(m.OperationID, errMsg) + ws.sendSignalMsgResp(conn, 204, errMsg, m, &signalResp) + return + } rtcClient := pbRtc.NewRtcServiceClient(etcdConn) req := &pbRtc.SignalMessageAssembleReq{ SignalReq: pData.(*pbRtc.SignalReq), @@ -233,7 +263,13 @@ func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { } log.NewInfo(m.OperationID, utils.GetSelfFuncName(), "pbData: ", pbData) log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, msgData) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, m.OperationID) + if etcdConn == nil { + errMsg := m.OperationID + "getcdv3.GetConn == nil" + log.NewError(m.OperationID, errMsg) + ws.sendSignalMsgResp(conn, 200, errMsg, m, &signalResp) + return + } client := pbChat.NewChatClient(etcdConn) reply, err := client.SendMsg(context.Background(), &pbData) if err != nil { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index afacf097c..c5e85b4e4 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -538,7 +538,7 @@ func sendMessageToPush(message *pbMsg.MsgDataToMQ, pushToUserID string) { log.Info(message.OperationID, "msg_transfer send message to push", "message", message.String()) rpcPushMsg := pbPush.PushMsgReq{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID} mqPushMsg := pbMsg.PushMsgDataToMQ{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID} - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName, message.OperationID) if grpcConn == nil { log.Error(rpcPushMsg.OperationID, "rpc dial failed", "push data", rpcPushMsg.String()) pid, offset, err := producer.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID, rpcPushMsg.OperationID) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index bfe458dce..0d7a2fc82 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -397,7 +397,13 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } + client := pbFriend.NewFriendClient(etcdConn) newReq := &pbFriend.GetFriendListReq{ CommID: &pbFriend.CommID{OperationID: req.OperationID, FromUserID: req.UserInfo.UserID, OpUserID: req.OpUserID}, diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index 52c1253e1..08a3c23f8 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -56,6 +56,7 @@ var ( ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} ErrMessageHasReadDisable = ErrInfo{ErrCode: 811, ErrMsg: "message has read disable"} + ErrInternal = ErrInfo{ErrCode: 812, ErrMsg: "internal error"} ) var ( diff --git a/pkg/grpc-etcdv3/getcdv3/resolver.go b/pkg/grpc-etcdv3/getcdv3/resolver.go index 5d7f9e828..b72df5fc9 100644 --- a/pkg/grpc-etcdv3/getcdv3/resolver.go +++ b/pkg/grpc-etcdv3/getcdv3/resolver.go @@ -2,6 +2,7 @@ package getcdv3 import ( "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "context" "fmt" "go.etcd.io/etcd/api/v3/mvccpb" @@ -32,12 +33,13 @@ var ( rwNameResolverMutex sync.RWMutex ) -func NewResolver(schema, etcdAddr, serviceName string) (*Resolver, error) { +func NewResolver(schema, etcdAddr, serviceName string, operationID string) (*Resolver, error) { etcdCli, err := clientv3.New(clientv3.Config{ Endpoints: strings.Split(etcdAddr, ","), }) if err != nil { - return nil, err + log.Error(operationID, "etcd client v3 failed") + return nil, utils.Wrap(err, "") } var r Resolver @@ -51,18 +53,11 @@ func NewResolver(schema, etcdAddr, serviceName string) (*Resolver, error) { conn, err := grpc.DialContext(ctx, GetPrefix(schema, serviceName), grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name)), grpc.WithInsecure()) - log.Debug("", "etcd key ", GetPrefix(schema, serviceName)) - - //conn, err := grpc.Dial( - // GetPrefix(schema, serviceName), - // grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name)), - // grpc.WithInsecure(), - // grpc.WithTimeout(time.Duration(5)*time.Second), - //) + log.Debug(operationID, "etcd key ", GetPrefix(schema, serviceName)) if err == nil { r.grpcClientConn = conn } - return &r, err + return &r, utils.Wrap(err, "") } func (r1 *Resolver) ResolveNow(rn resolver.ResolveNowOptions) { @@ -71,12 +66,12 @@ func (r1 *Resolver) ResolveNow(rn resolver.ResolveNowOptions) { func (r1 *Resolver) Close() { } -func GetConn(schema, etcdaddr, serviceName string) *grpc.ClientConn { +func GetConn(schema, etcdaddr, serviceName string, operationID string) *grpc.ClientConn { rwNameResolverMutex.RLock() r, ok := nameResolver[schema+serviceName] rwNameResolverMutex.RUnlock() if ok { - log.Debug("", "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) + log.Debug(operationID, "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) return r.grpcClientConn } @@ -84,18 +79,18 @@ func GetConn(schema, etcdaddr, serviceName string) *grpc.ClientConn { r, ok = nameResolver[schema+serviceName] if ok { rwNameResolverMutex.Unlock() - log.Debug("", "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) + log.Debug(operationID, "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) return r.grpcClientConn } - r, err := NewResolver(schema, etcdaddr, serviceName) + r, err := NewResolver(schema, etcdaddr, serviceName, operationID) if err != nil { - log.Error("", "etcd failed ", schema, etcdaddr, serviceName) + log.Error(operationID, "etcd failed ", schema, etcdaddr, serviceName, err.Error()) rwNameResolverMutex.Unlock() return nil } - log.Debug("", "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) + log.Debug(operationID, "etcd key ", schema+serviceName, "value ", *r.grpcClientConn, *r) nameResolver[schema+serviceName] = r rwNameResolverMutex.Unlock() return r.grpcClientConn @@ -220,7 +215,7 @@ func GetConn4Unique(schema, etcdaddr, servicename string) []*grpc.ClientConn { allConn := make([]*grpc.ClientConn, 0) for _, v := range allService { - r := GetConn(schema, etcdaddr, v) + r := GetConn(schema, etcdaddr, v, "0") allConn = append(allConn, r) } @@ -233,7 +228,7 @@ var ( ) func GetconnFactory(schema, etcdaddr, servicename string) (*grpc.ClientConn, error) { - c := GetConn(schema, etcdaddr, servicename) + c := GetConn(schema, etcdaddr, servicename, "0") if c != nil { return c, nil } else { From 02c594d4ece2a193c2011b3c3fbd2373e7a3d1db Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:26:03 +0800 Subject: [PATCH 211/256] Handling exception: getcdv3.GetConn == nil --- internal/rpc/msg/send_msg.go | 44 +++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 6b6f33198..c20407604 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -74,7 +74,13 @@ func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) } log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, data.OperationID) + if etcdConn == nil { + errMsg := data.OperationID + "getcdv3.GetConn == nil" + log.NewError(data.OperationID, errMsg) + return true, 0, "" + } + cacheClient := cacheRpc.NewCacheClient(etcdConn) cacheResp, err := cacheClient.GetBlackIDListFromCache(context.Background(), reqGetBlackIDListFromCache) if err != nil { @@ -91,7 +97,12 @@ func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) if config.Config.MessageVerify.FriendVerify { reqGetFriendIDListFromCache := &cacheRpc.GetFriendIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, data.OperationID) + if etcdConn == nil { + errMsg := data.OperationID + "getcdv3.GetConn == nil" + log.NewError(data.OperationID, errMsg) + return true, 0, "" + } cacheClient := cacheRpc.NewCacheClient(etcdConn) cacheResp, err := cacheClient.GetFriendIDListFromCache(context.Background(), reqGetFriendIDListFromCache) if err != nil { @@ -243,7 +254,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S return returnMsg(&replay, pb, int32(callbackResp.ErrCode), callbackResp.ErrMsg, "", 0) } getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pb.OperationID, GroupID: pb.MsgData.GroupID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, msgToMQSingle.OperationID) + if etcdConn == nil { + errMsg := msgToMQSingle.OperationID + "getcdv3.GetConn == nil" + log.NewError(msgToMQSingle.OperationID, errMsg) + return returnMsg(&replay, pb, 201, errMsg, "", 0) + } client := pbCache.NewCacheClient(etcdConn) cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) if err != nil { @@ -351,7 +367,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S conversationReq.UserIDList = pb.MsgData.AtUserIDList conversation.GroupAtType = constant.AtMe } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, pb.OperationID) + if etcdConn == nil { + errMsg := pb.OperationID + "getcdv3.GetConn == nil" + log.NewError(pb.OperationID, errMsg) + return + } client := pbConversation.NewConversationClient(etcdConn) conversationReply, err := client.ModifyConversationField(context.Background(), &conversationReq) if err != nil { @@ -362,7 +383,12 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S if tag { conversationReq.UserIDList = utils.DifferenceString(atUserID, memberUserIDList) conversation.GroupAtType = constant.AtAll - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, pb.OperationID) + if etcdConn == nil { + errMsg := pb.OperationID + "getcdv3.GetConn == nil" + log.NewError(pb.OperationID, errMsg) + return + } client := pbConversation.NewConversationClient(etcdConn) conversationReply, err := client.ModifyConversationField(context.Background(), &conversationReq) if err != nil { @@ -794,7 +820,13 @@ func Notification(n *NotificationMsg) { offlineInfo.Ex = ex msg.OfflinePushInfo = &offlineInfo req.MsgData = &msg - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return + } + client := pbChat.NewChatClient(etcdConn) reply, err := client.SendMsg(context.Background(), &req) if err != nil { From 90442e3e39fee450ea06b3cabd116cd6ce417eeb Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:27:57 +0800 Subject: [PATCH 212/256] Handling exception: getcdv3.GetConn == nil --- internal/rpc/msg/tag_send_msg.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/tag_send_msg.go b/internal/rpc/msg/tag_send_msg.go index a79a90ec6..7354961db 100644 --- a/internal/rpc/msg/tag_send_msg.go +++ b/internal/rpc/msg/tag_send_msg.go @@ -33,7 +33,13 @@ func TagSendMessage(operationID string, user *db.User, recvID, content string, s msgData.SenderPlatformID = senderPlatformID req.MsgData = &msgData req.OperationID = operationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, operationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return + } + client := pbChat.NewChatClient(etcdConn) respPb, err := client.SendMsg(context.Background(), &req) if err != nil { From 56cf46a3a4611ecbfd0b61eca0dbe450d7eccf22 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:31:41 +0800 Subject: [PATCH 213/256] Handling exception: getcdv3.GetConn == nil --- internal/api/chat/pull_msg.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/api/chat/pull_msg.go b/internal/api/chat/pull_msg.go index 787ae7141..3e1a2314f 100644 --- a/internal/api/chat/pull_msg.go +++ b/internal/api/chat/pull_msg.go @@ -51,7 +51,13 @@ func PullMsgBySeqList(c *gin.Context) { pbData.OperationID = params.OperationID pbData.SeqList = params.SeqList - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, pbData.OperationID) + if grpcConn == nil { + errMsg := pbData.OperationID + "getcdv3.GetConn == nil" + log.NewError(pbData.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } msgClient := pbChat.NewChatClient(grpcConn) reply, err := msgClient.PullMessageBySeqList(context.Background(), &pbData) if err != nil { From eab9e4ab9290431db23a874629fdd58ce8859a16 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:33:52 +0800 Subject: [PATCH 214/256] Handling exception: getcdv3.GetConn == nil --- internal/api/office/work_moments.go | 74 +++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/internal/api/office/work_moments.go b/internal/api/office/work_moments.go index 82716a4f8..ae4863b75 100644 --- a/internal/api/office/work_moments.go +++ b/internal/api/office/work_moments.go @@ -44,7 +44,14 @@ func CreateOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.WorkMoment.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.CreateOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -89,7 +96,14 @@ func DeleteOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.DeleteOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -133,7 +147,13 @@ func LikeOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.LikeOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -177,7 +197,13 @@ func CommentOneWorkMoment(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.CommentOneWorkMoment(context.Background(), &reqPb) if err != nil { @@ -219,7 +245,13 @@ func DeleteComment(c *gin.Context) { return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.DeleteComment(context.Background(), &reqPb) if err != nil { @@ -262,7 +294,13 @@ func GetWorkMomentByID(c *gin.Context) { reqPb.OperationID = req.OperationID reqPb.OpUserID = userID reqPb.WorkMomentID = req.WorkMomentID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetWorkMomentByID(context.Background(), &reqPb) if err != nil { @@ -314,7 +352,13 @@ func GetUserWorkMoments(c *gin.Context) { } reqPb.OpUserID = opUserID reqPb.UserID = req.UserID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserWorkMoments(context.Background(), &reqPb) if err != nil { @@ -411,7 +455,13 @@ func GetUserFriendWorkMoments(c *gin.Context) { ShowNumber: req.ShowNumber, } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.GetUserFriendWorkMoments(context.Background(), &reqPb) if err != nil { @@ -506,7 +556,13 @@ func SetUserWorkMomentsLevel(c *gin.Context) { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } reqPb.UserID = userID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbOffice.NewOfficeServiceClient(etcdConn) respPb, err := client.SetUserWorkMomentsLevel(context.Background(), &reqPb) if err != nil { From 50df9bdf4e528d922a84dcdbf27a3b472e3e0fcd Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:35:24 +0800 Subject: [PATCH 215/256] Handling exception: getcdv3.GetConn == nil --- internal/api/user/user.go | 48 ++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 9f9e5d70a..3a760d4ec 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -38,7 +38,13 @@ func GetUsersInfoFromCache(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetUserInfo(context.Background(), req) if err != nil { @@ -80,7 +86,13 @@ func GetFriendIDListFromCache(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := cacheRpc.NewCacheClient(etcdConn) respPb, err := client.GetFriendIDListFromCache(context.Background(), &reqPb) if err != nil { @@ -116,7 +128,13 @@ func GetBlackIDListFromCache(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) return } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := cacheRpc.NewCacheClient(etcdConn) respPb, err := client.GetBlackIDListFromCache(context.Background(), &reqPb) if err != nil { @@ -151,7 +169,13 @@ func GetUsersInfo(c *gin.Context) { log.NewInfo(params.OperationID, "GetUserInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetUserInfo(context.Background(), req) if err != nil { @@ -194,7 +218,13 @@ func UpdateUserInfo(c *gin.Context) { if params.GlobalRecvMsgOpt != nil { req.GlobalRecvMsgOpt.Value = *params.GlobalRecvMsgOpt } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.UpdateUserInfo(context.Background(), req) if err != nil { @@ -231,7 +261,13 @@ func GetSelfUserInfo(c *gin.Context) { req.UserIDList = append(req.UserIDList, req.OpUserID) log.NewInfo(params.OperationID, "GetUserInfo args ", req.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewUserClient(etcdConn) RpcResp, err := client.GetUserInfo(context.Background(), req) if err != nil { From 066a7041d8d7b7399c7af690ec4a6e7fa900a0fe Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:36:59 +0800 Subject: [PATCH 216/256] Handling exception: getcdv3.GetConn == nil --- internal/push/logic/push_to_client.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index f82c484bb..7f94e7870 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -147,7 +147,13 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) { isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush) log.Debug(pushMsg.OperationID, "Get super group msg from msg_transfer And push msg", pushMsg.String()) getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: pushMsg.OperationID, GroupID: pushMsg.MsgData.GroupID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, pushMsg.OperationID) + if etcdConn == nil { + errMsg := pushMsg.OperationID + "getcdv3.GetConn == nil" + log.NewError(pushMsg.OperationID, errMsg) + return + } + client := pbCache.NewCacheClient(etcdConn) cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) if err != nil { From 8d3d41831d11c120dfeabd21e3533c1c020876ff Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:39:31 +0800 Subject: [PATCH 217/256] Handling exception: getcdv3.GetConn == nil --- internal/demo/register/onboarding_process.go | 28 +++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 42e579d70..a4da17259 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -50,7 +50,12 @@ func createOrganizationUser(operationID, userID, userName string) error { log.NewInfo(operationID, utils.GetSelfFuncName(), userID) }() log.NewInfo(operationID, utils.GetSelfFuncName(), "start createOrganizationUser") - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return errors.New(errMsg) + } client := organizationRpc.NewOrganizationClient(etcdConn) req := &organizationRpc.CreateOrganizationUserReq{ OrganizationUser: &commonPb.OrganizationUser{ @@ -85,7 +90,12 @@ func joinTestDepartment(operationID, userID, departmentID string) error { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID) }() - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return errors.New(errMsg) + } client := organizationRpc.NewOrganizationClient(etcdConn) req := &organizationRpc.CreateDepartmentMemberReq{ DepartmentMember: &commonPb.DepartmentMember{ @@ -112,7 +122,12 @@ func GetDepartmentGroupIDList(operationID, departmentID string) ([]string, error defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), departmentID) }() - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return nil, errors.New(errMsg) + } client := organizationRpc.NewOrganizationClient(etcdConn) req := organizationRpc.GetDepartmentParentIDListReq{ DepartmentID: departmentID, @@ -146,7 +161,12 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { defer func() { log.NewInfo(operationID, utils.GetSelfFuncName(), userID, groupIDList) }() - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetConn == nil" + log.NewError(operationID, errMsg) + return + } client := groupRpc.NewGroupClient(etcdConn) for _, groupID := range groupIDList { req := &groupRpc.InviteUserToGroupReq{ From b3dcff2d76dc857ad489c37d36fbcf2204528d70 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 14:45:39 +0800 Subject: [PATCH 218/256] redis interface --- config/config.yaml | 1 + pkg/common/config/config.go | 1 + pkg/common/db/model.go | 44 ++++++++++++++++++++++++------------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 85c5bc9f1..4d9569d07 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -39,6 +39,7 @@ redis: dbMaxActive: 0 dbIdleTimeout: 120 dbPassWord: openIM #redis密码 建议修改 + enableCluster: false kafka: ws2mschat: diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 0618ca7d7..185236744 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -102,6 +102,7 @@ type config struct { DBMaxActive int `yaml:"dbMaxActive"` DBIdleTimeout int `yaml:"dbIdleTimeout"` DBPassWord string `yaml:"dbPassWord"` + EnableCluster bool `yaml:"enableCluster"` } RpcPort struct { OpenImUserPort []int `yaml:"openImUserPort"` diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index a6ed0408a..895bea53a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,14 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.Client + rdb go_redis.UniversalClient +} + +type RedisClient struct { + client *go_redis.Client + cluster *go_redis.ClusterClient + go_redis.UniversalClient + enableCluster bool } func key(dbAddress, dbName string) string { @@ -112,22 +119,29 @@ func init() { // ) // }, //} - DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, - Password: config.Config.Redis.DBPassWord, // no password set - DB: 0, // use default DB - PoolSize: 100, // 连接池大小 - }) - //DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - // Addrs: []string{config.Config.Redis.DBAddress}, - // PoolSize: 50, - //Password: config.Config.Redis.DBPassWord, - //}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - _, err = DB.rdb.Ping(ctx).Result() - if err != nil { - panic(err.Error()) + if config.Config.Redis.EnableCluster { + DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ + Addrs: []string{config.Config.Redis.DBAddress}, + PoolSize: 50, + Password: config.Config.Redis.DBPassWord, + }) + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } + } else { + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 + }) + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } } } From 57d96b85f1edffa702c776c963e0f4f8f496d32b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 14:47:39 +0800 Subject: [PATCH 219/256] add global recv opt --- pkg/common/db/model.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 895bea53a..bc8af133d 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -125,7 +125,6 @@ func init() { DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ Addrs: []string{config.Config.Redis.DBAddress}, PoolSize: 50, - Password: config.Config.Redis.DBPassWord, }) _, err = DB.rdb.Ping(ctx).Result() if err != nil { From 89aef130a555733b2eb6f6da515ce64225525fca Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:51:36 +0800 Subject: [PATCH 220/256] Handling exception: getcdv3.GetConn == nil --- internal/rpc/group/group.go | 121 +++++++++++++++++++++++++++++++----- 1 file changed, 104 insertions(+), 17 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 79c186013..147e06b63 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -187,7 +187,12 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR GroupID: groupId, OperationID: req.OperationID, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.CreateGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -332,7 +337,12 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite c.IsNotInGroup = false c.Ex = v.Ex reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -349,7 +359,12 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite c.GroupID = req.GroupID c.IsNotInGroup = false reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -371,7 +386,12 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite GroupID: req.GroupID, OperationID: req.OperationID, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -550,7 +570,14 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou c.GroupID = req.GroupID c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + resp.ErrCode = constant.ErrInternal.ErrCode + resp.ErrMsg = errMsg + return &resp, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -574,7 +601,12 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou GroupID: req.GroupID, OperationID: req.OperationID, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.ReduceGroupMemberFromCache(context.Background(), reduceGroupMemberFromCacheReq) if err != nil { @@ -731,7 +763,12 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G c.Ex = conversation.Ex } reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -740,7 +777,12 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String()) } addGroupMemberToCacheReq := &pbCache.AddGroupMemberToCacheReq{OperationID: req.OperationID, GroupID: req.GroupID, UserIDList: []string{req.FromUserID}} - etcdCacheConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdCacheConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } cacheClient := pbCache.NewCacheClient(etcdCacheConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -834,7 +876,12 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) c.GroupID = req.GroupID c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -848,7 +895,12 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) GroupID: req.GroupID, OperationID: req.OperationID, } - etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } cacheClient := pbCache.NewCacheClient(etcdConnCache) cacheResp, err := cacheClient.ReduceGroupMemberFromCache(context.Background(), reduceGroupMemberFromCacheReq) if err != nil { @@ -936,7 +988,12 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf if req.GroupInfo.Notification != "" { //get group member user id getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: req.OperationID, GroupID: req.GroupInfo.GroupID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, http.WrapError(constant.ErrInternal) + } client := pbCache.NewCacheClient(etcdConn) cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq) if err != nil { @@ -960,7 +1017,12 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf conversationReq.FieldType = constant.FieldGroupAtType conversation.GroupAtType = constant.GroupNotification conversationReq.UserIDList = cacheResp.UserIDList - nEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName) + nEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, http.WrapError(constant.ErrInternal) + } nClient := pbConversation.NewConversationClient(nEtcdConn) conversationReply, err := nClient.ModifyConversationField(context.Background(), &conversationReq) if err != nil { @@ -1156,7 +1218,12 @@ func (s *groupServer) OperateUserRole(_ context.Context, req *pbGroup.OperateUse log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMaster failed", err.Error()) return resp, http.WrapError(constant.ErrDB) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } client := pbGroup.NewGroupClient(etcdConn) var reqPb pbGroup.TransferGroupOwnerReq reqPb.OperationID = req.OperationID @@ -1237,7 +1304,12 @@ func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.Remo c.GroupID = req.GroupId c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { @@ -1252,7 +1324,12 @@ func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.Remo GroupID: req.GroupId, OperationID: req.OperationID, } - etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConnCache := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConnCache == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } cacheClient := pbCache.NewCacheClient(etcdConnCache) cacheResp, err := cacheClient.ReduceGroupMemberFromCache(context.Background(), reduceGroupMemberFromCacheReq) if err != nil { @@ -1308,7 +1385,12 @@ func (s *groupServer) AddGroupMembersCMS(_ context.Context, req *pbGroup.AddGrou GroupID: req.GroupId, OperationID: req.OperationId, } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationId) + if etcdConn == nil { + errMsg := req.OperationId + "getcdv3.GetConn == nil" + log.NewError(req.OperationId, errMsg) + return resp, http.WrapError(constant.ErrInternal) + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddGroupMemberToCache(context.Background(), addGroupMemberToCacheReq) if err != nil { @@ -1393,7 +1475,12 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou c.GroupID = req.GroupID c.IsNotInGroup = true reqPb.Conversation = &c - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbUser.NewUserClient(etcdConn) respPb, err := client.SetConversation(context.Background(), &reqPb) if err != nil { From 98821c95b6ab25593071a6ee6151baa04d4e9d6f Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 14:55:38 +0800 Subject: [PATCH 221/256] Handling exception: getcdv3.GetConn == nil --- internal/rpc/friend/firend.go | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/internal/rpc/friend/firend.go b/internal/rpc/friend/firend.go index 4e3172b44..5c2c2a359 100644 --- a/internal/rpc/friend/firend.go +++ b/internal/rpc/friend/firend.go @@ -99,7 +99,12 @@ func (s *friendServer) AddBlacklist(ctx context.Context, req *pbFriend.AddBlackl } log.NewInfo(req.CommID.OperationID, "AddBlacklist rpc ok ", req.CommID.FromUserID, req.CommID.ToUserID) reqAddBlackUserToCache := &pbCache.AddBlackUserToCacheReq{UserID: req.CommID.FromUserID, BlackUserID: req.CommID.ToUserID, OperationID: req.CommID.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.AddBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.AddBlackUserToCache(context.Background(), reqAddBlackUserToCache) if err != nil { @@ -263,7 +268,12 @@ func (s *friendServer) AddFriendResponse(ctx context.Context, req *pbFriend.AddF } // cache rpc addFriendToCacheReq := &pbCache.AddFriendToCacheReq{OperationID: req.CommID.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbCache.NewCacheClient(etcdConn) addFriendToCacheReq.UserID = req.CommID.ToUserID addFriendToCacheReq.FriendID = req.CommID.FromUserID @@ -318,7 +328,12 @@ func (s *friendServer) DeleteFriend(ctx context.Context, req *pbFriend.DeleteFri } log.NewInfo(req.CommID.OperationID, "DeleteFriend rpc ok") reduceFriendFromCache := &pbCache.ReduceFriendFromCacheReq{OperationID: req.CommID.OperationID, UserID: req.CommID.FromUserID, FriendID: req.CommID.ToUserID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.DeleteFriendResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } client := pbCache.NewCacheClient(etcdConn) respPb, err := client.ReduceFriendFromCache(context.Background(), reduceFriendFromCache) if err != nil { @@ -399,7 +414,13 @@ func (s *friendServer) RemoveBlacklist(ctx context.Context, req *pbFriend.Remove } log.NewInfo(req.CommID.OperationID, "rpc RemoveBlacklist ok ") reqReduceBlackUserFromCache := &pbCache.ReduceBlackUserFromCacheReq{UserID: req.CommID.FromUserID, BlackUserID: req.CommID.ToUserID, OperationID: req.CommID.OperationID} - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.CommID.OperationID) + if etcdConn == nil { + errMsg := req.CommID.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.CommID.OperationID, errMsg) + return &pbFriend.RemoveBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil + } + cacheClient := pbCache.NewCacheClient(etcdConn) cacheResp, err := cacheClient.ReduceBlackUserFromCache(context.Background(), reqReduceBlackUserFromCache) if err != nil { From 966cb2491149598e9e6b200f5534e723a5d8be7f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 15:02:29 +0800 Subject: [PATCH 222/256] add global recv opt --- docker-compose.yaml | 2 +- script/path_info.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index e1d2a98b2..e75b022a4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_CREATE_TOPICS: "ws2ms_chat:2:1,ms2ps_chat:2:1,msg_to_mongo:2:1" + KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:2:1,msg_to_mongo:2:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" diff --git a/script/path_info.cfg b/script/path_info.cfg index 0a47f51fd..17382cbfd 100644 --- a/script/path_info.cfg +++ b/script/path_info.cfg @@ -16,7 +16,7 @@ push_source_root="../cmd/open_im_push/" msg_transfer_name="open_im_msg_transfer" msg_transfer_binary_root="../bin/" msg_transfer_source_root="../cmd/open_im_msg_transfer/" -msg_transfer_service_num=2 +msg_transfer_service_num=4 sdk_server_name="open_im_sdk_server" From 167ebd6975d8a9c3fee74cd9808fe502b264d9dd Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:09:37 +0800 Subject: [PATCH 223/256] Handling exception: getcdv3.GetConn == nil --- internal/api/organization/organization.go | 98 +++++++++++-- internal/cms_api/admin/admin.go | 10 +- internal/cms_api/group/group.go | 164 ++++++++++++++++++---- 3 files changed, 231 insertions(+), 41 deletions(-) diff --git a/internal/api/organization/organization.go b/internal/api/organization/organization.go index 9d134a253..5998fb0dd 100644 --- a/internal/api/organization/organization.go +++ b/internal/api/organization/organization.go @@ -36,7 +36,14 @@ func CreateDepartment(c *gin.Context) { } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.CreateDepartment(context.Background(), req) if err != nil { @@ -72,7 +79,14 @@ func UpdateDepartment(c *gin.Context) { } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.UpdateDepartment(context.Background(), req) if err != nil { @@ -106,7 +120,13 @@ func GetSubDepartment(c *gin.Context) { } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.GetSubDepartment(context.Background(), req) if err != nil { @@ -144,7 +164,13 @@ func DeleteDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.DeleteDepartment(context.Background(), req) if err != nil { @@ -180,7 +206,13 @@ func CreateOrganizationUser(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.CreateOrganizationUser(context.Background(), req) if err != nil { @@ -215,7 +247,13 @@ func UpdateOrganizationUser(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.UpdateOrganizationUser(context.Background(), req) if err != nil { @@ -251,7 +289,13 @@ func CreateDepartmentMember(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.CreateDepartmentMember(context.Background(), req) if err != nil { @@ -286,7 +330,13 @@ func GetUserInDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.GetUserInDepartment(context.Background(), req) if err != nil { @@ -322,7 +372,13 @@ func UpdateUserInDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.UpdateUserInDepartment(context.Background(), req) if err != nil { @@ -357,7 +413,13 @@ func DeleteOrganizationUser(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.DeleteOrganizationUser(context.Background(), req) if err != nil { @@ -392,7 +454,13 @@ func GetDepartmentMember(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.GetDepartmentMember(context.Background(), req) if err != nil { @@ -427,7 +495,13 @@ func DeleteUserInDepartment(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := rpc.NewOrganizationClient(etcdConn) RpcResp, err := client.DeleteUserInDepartment(context.Background(), req) if err != nil { diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index ff8882369..a741c8016 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -12,6 +12,7 @@ import ( "context" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" + "net/http" "strings" "github.com/gin-gonic/gin" @@ -68,7 +69,14 @@ func AdminLogin(c *gin.Context) { } reqPb.Secret = req.Secret reqPb.AdminID = req.AdminName - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAdminCMSName) + reqPb.OperationID = utils.OperationIDGenerator() + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAdminCMSName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbAdmin.NewAdminCMSClient(etcdConn) respPb, err := client.AdminLogin(context.Background(), &reqPb) if err != nil { diff --git a/internal/cms_api/group/group.go b/internal/cms_api/group/group.go index 69b9e32fc..5d0508910 100644 --- a/internal/cms_api/group/group.go +++ b/internal/cms_api/group/group.go @@ -10,6 +10,7 @@ import ( commonPb "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "net/http" "strings" pbGroup "Open_IM/pkg/proto/group" @@ -28,9 +29,16 @@ func GetGroupById(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroupById(context.Background(), &reqPb) if err != nil { @@ -60,10 +68,17 @@ func GetGroups(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.Pagination = &commonPb.RequestPagination{} utils.CopyStructFields(&reqPb.Pagination, req) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroups(context.Background(), &reqPb) if err != nil { @@ -101,11 +116,18 @@ func GetGroupByName(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupName = req.GroupName reqPb.Pagination = &commonPb.RequestPagination{} utils.CopyStructFields(&reqPb.Pagination, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroup(context.Background(), &reqPb) if err != nil { @@ -143,7 +165,8 @@ func CreateGroup(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupInfo = &commonPb.GroupInfo{} reqPb.GroupInfo.GroupName = req.GroupName reqPb.GroupInfo.CreatorUserID = req.GroupMasterId @@ -155,7 +178,13 @@ func CreateGroup(c *gin.Context) { RoleLevel: 1, }) } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.CreateGroup(context.Background(), &reqPb) if err != nil { @@ -176,10 +205,18 @@ func BanGroupChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupBanChat - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -201,10 +238,17 @@ func BanPrivateChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupBanPrivateChat - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -225,10 +269,17 @@ func OpenGroupChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupOk - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -249,10 +300,18 @@ func OpenPrivateChat(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.Status = constant.GroupOk - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateGroupStatus(context.Background(), &reqPb) if err != nil { @@ -274,14 +333,21 @@ func GetGroupMembers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.Pagination = &commonPb.RequestPagination{ PageNumber: int32(req.PageNumber), ShowNumber: int32(req.ShowNumber), } reqPb.GroupId = req.GroupId reqPb.UserName = req.UserName - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.GetGroupMembersCMS(context.Background(), &reqPb) if err != nil { @@ -317,10 +383,17 @@ func AddGroupMembers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } + reqPb.OperationId = utils.OperationIDGenerator() log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) reqPb.UserIds = req.Members reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationId) + if etcdConn == nil { + errMsg := reqPb.OperationId + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationId, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.AddGroupMembersCMS(context.Background(), &reqPb) if err != nil { @@ -345,10 +418,17 @@ func RemoveGroupMembers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.UserIds = req.Members reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) respPb, err := client.RemoveGroupMembersCMS(context.Background(), &reqPb) if err != nil { @@ -373,9 +453,16 @@ func DeleteGroup(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.DeleteGroup(context.Background(), &reqPb) if err != nil { @@ -397,11 +484,18 @@ func SetGroupMaster(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.UserId = req.UserId reqPb.RoleLevel = constant.GroupOwner - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateUserRole(context.Background(), &reqPb) if err != nil { @@ -423,11 +517,18 @@ func SetGroupOrdinaryUsers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.GroupId = req.GroupId reqPb.UserId = req.UserId reqPb.RoleLevel = constant.GroupOrdinaryUsers - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.OperateUserRole(context.Background(), &reqPb) if err != nil { @@ -444,7 +545,8 @@ func AlterGroupInfo(c *gin.Context) { _ cms_api_struct.SetGroupMasterResponse reqPb pbGroup.SetGroupInfoReq ) - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) if err := c.BindJSON(&req); err != nil { log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) @@ -459,7 +561,13 @@ func AlterGroupInfo(c *gin.Context) { FaceURL: req.ProfilePhoto, GroupType: int32(req.GroupType), } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbGroup.NewGroupClient(etcdConn) _, err := client.SetGroupInfo(context.Background(), &reqPb) if err != nil { From abb9ebaf76abcced023e7a68628280b879c102e1 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:10:15 +0800 Subject: [PATCH 224/256] Handling exception: getcdv3.GetConn == nil --- internal/cms_api/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/cms_api/group/group.go b/internal/cms_api/group/group.go index 5d0508910..8eb53a8bf 100644 --- a/internal/cms_api/group/group.go +++ b/internal/cms_api/group/group.go @@ -72,7 +72,7 @@ func GetGroups(c *gin.Context) { log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.Pagination = &commonPb.RequestPagination{} utils.CopyStructFields(&reqPb.Pagination, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID) if etcdConn == nil { errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" log.NewError(reqPb.OperationID, errMsg) From d058cacb38505ca88e2ffe58132f28b079db8179 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:19:39 +0800 Subject: [PATCH 225/256] Handling exception: getcdv3.GetConn == nil --- internal/api/chat/send_msg.go | 12 +- internal/cms_api/user/user.go | 142 +++++++++++++++++----- internal/rpc/organization/organization.go | 23 +++- 3 files changed, 139 insertions(+), 38 deletions(-) diff --git a/internal/api/chat/send_msg.go b/internal/api/chat/send_msg.go index b75cd0ddd..af5bf5d7b 100644 --- a/internal/api/chat/send_msg.go +++ b/internal/api/chat/send_msg.go @@ -69,9 +69,15 @@ func SendMsg(c *gin.Context) { token := c.Request.Header.Get("token") log.NewInfo(params.OperationID, "api call success to sendMsgReq", params) pbData := newUserSendMsgReq(token, ¶ms) - log.Info("", "", "api SendMsg call start..., [data: %s]", pbData.String()) + log.Info(params.OperationID, "", "api SendMsg call start..., [data: %s]", pbData.String()) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, params.OperationID) + if etcdConn == nil { + errMsg := params.OperationID + "getcdv3.GetConn == nil" + log.NewError(params.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pbChat.NewChatClient(etcdConn) log.Info("", "", "api SendMsg call, api call rpc...") @@ -82,7 +88,7 @@ func SendMsg(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "SendMsg rpc failed, " + err.Error()}) return } - log.Info("", "", "api SendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String()) + log.Info(params.OperationID, "", "api SendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String()) c.JSON(http.StatusOK, gin.H{ "errCode": reply.ErrCode, diff --git a/internal/cms_api/user/user.go b/internal/cms_api/user/user.go index f8d96e35e..09513a98e 100644 --- a/internal/cms_api/user/user.go +++ b/internal/cms_api/user/user.go @@ -29,9 +29,17 @@ func GetUserById(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := pb.NewUserClient(etcdConn) respPb, err := client.GetUserById(context.Background(), &reqPb) if err != nil { @@ -44,7 +52,7 @@ func GetUserById(c *gin.Context) { return } utils.CopyStructFields(&resp, respPb.User) - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -54,7 +62,8 @@ func GetUsersByName(c *gin.Context) { resp cms_api_struct.GetUsersByNameResponse reqPb pb.GetUsersByNameReq ) - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) if err := c.ShouldBindQuery(&req); err != nil { log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) @@ -65,7 +74,13 @@ func GetUsersByName(c *gin.Context) { PageNumber: int32(req.PageNumber), ShowNumber: int32(req.ShowNumber), } - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetUsersByName(context.Background(), &reqPb) if err != nil { @@ -77,7 +92,7 @@ func GetUsersByName(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.UserNums = respPb.UserNums - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -93,9 +108,16 @@ func GetUsers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.Pagination, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetUsers(context.Background(), &reqPb) if err != nil { @@ -106,7 +128,7 @@ func GetUsers(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.UserNums = respPb.UserNums - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -122,15 +144,22 @@ func ResignUser(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": http.StatusBadRequest, "errMsg": err.Error()}) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.ResignUser(context.Background(), &reqPb) if err != nil { openIMHttp.RespHttp200(c, err, resp) } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -145,13 +174,20 @@ func AlterUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.AlterUser(context.Background(), &reqPb) if err != nil { - log.NewError("0", "microserver failed ", err.Error()) + log.NewError(reqPb.OperationID, "microserver failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) } openIMHttp.RespHttp200(c, constant.OK, nil) @@ -167,9 +203,16 @@ func AddUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.AddUser(context.Background(), &reqPb) if err != nil { @@ -191,9 +234,16 @@ func BlockUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) fmt.Println(reqPb) _, err := client.BlockUser(context.Background(), &reqPb) @@ -215,16 +265,23 @@ func UnblockUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb, &req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.UnBlockUser(context.Background(), &reqPb) if err != nil { openIMHttp.RespHttp200(c, err, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -241,10 +298,17 @@ func GetBlockUsers(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, resp) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) utils.CopyStructFields(&reqPb.Pagination, &req) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "blockUsers", reqPb.Pagination, req) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetBlockUsers(context.Background(), &reqPb) if err != nil { @@ -268,7 +332,7 @@ func GetBlockUsers(c *gin.Context) { resp.ShowNumber = int(respPb.Pagination.ShowNumber) resp.CurrentPage = int(respPb.Pagination.CurrentPage) resp.UserNums = respPb.UserNums - log.NewInfo("", utils.GetSelfFuncName(), "req: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -283,20 +347,27 @@ func GetBlockUserById(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.UserId = req.UserId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) respPb, err := client.GetBlockUserById(context.Background(), &reqPb) if err != nil { - log.NewError("0", "GetBlockUserById rpc failed ", err.Error()) + log.NewError(reqPb.OperationID, "GetBlockUserById rpc failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } resp.EndDisableTime = respPb.BlockUser.EndDisableTime resp.BeginDisableTime = respPb.BlockUser.BeginDisableTime utils.CopyStructFields(&resp, respPb.BlockUser.User) - log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp) + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) openIMHttp.RespHttp200(c, constant.OK, resp) } @@ -310,13 +381,20 @@ func DeleteUser(c *gin.Context) { openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } - log.NewInfo("", utils.GetSelfFuncName(), "req: ", req) + reqPb.OperationID = utils.OperationIDGenerator() + log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) reqPb.UserId = req.UserId - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID) + if etcdConn == nil { + errMsg := reqPb.OperationID + "getcdv3.GetConn == nil" + log.NewError(reqPb.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } client := pb.NewUserClient(etcdConn) _, err := client.DeleteUser(context.Background(), &reqPb) if err != nil { - log.NewError("0", "DeleteUser rpc failed ", err.Error()) + log.NewError(reqPb.OperationID, "DeleteUser rpc failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 8f07867e9..81659ef60 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -114,7 +114,14 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", *resp) chat.OrganizationNotificationToAll(req.OpUserID, req.OperationID) - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + resp.ErrCode = constant.ErrInternal.ErrCode + resp.ErrMsg = errMsg + return resp, nil + } client := groupRpc.NewGroupClient(etcdConn) createGroupReq := &groupRpc.CreateGroupReq{ InitMemberList: []*groupRpc.GroupAddMemberInfo{}, @@ -228,7 +235,12 @@ func (s *organizationServer) CreateOrganizationUser(ctx context.Context, req *rp utils.CopyStructFields(authReq.UserInfo, req.OrganizationUser) authReq.OperationID = req.OperationID if req.IsRegister { - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &rpc.CreateOrganizationUserResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbAuth.NewAuthClient(etcdConn) reply, err := client.UserRegister(context.Background(), authReq) if err != nil { @@ -269,7 +281,12 @@ func (s *organizationServer) UpdateOrganizationUser(ctx context.Context, req *rp authReq := &pbAuth.UserRegisterReq{UserInfo: &open_im_sdk.UserInfo{}} utils.CopyStructFields(authReq.UserInfo, req.OrganizationUser) authReq.OperationID = req.OperationID - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + return &rpc.UpdateOrganizationUserResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil + } client := pbAuth.NewAuthClient(etcdConn) reply, err := client.UserRegister(context.Background(), authReq) From 8c963c669b651ddb2a9877edcca5a4cf3c0883e2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 15:21:46 +0800 Subject: [PATCH 226/256] redis interface --- internal/rpc/msg/send_msg.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index c20407604..08d3006ca 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -72,6 +72,9 @@ func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) if utils.IsContain(data.MsgData.SendID, config.Config.Manager.AppManagerUid) { return true, 0, "" } + if data.MsgData.ContentType <= constant.FriendApplicationNotification && data.MsgData.ContentType >= constant.FriendApplicationApprovedNotification { + return true, 0, "" + } log.NewDebug(data.OperationID, config.Config.MessageVerify.FriendVerify) reqGetBlackIDListFromCache := &cacheRpc.GetBlackIDListFromCacheReq{UserID: data.MsgData.RecvID, OperationID: data.OperationID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, data.OperationID) From 24f2ffe82d6806f3e4470e6a99de3b5eea4a292c Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 15:21:53 +0800 Subject: [PATCH 227/256] Handling exception: getcdv3.GetConn == nil --- internal/rpc/office/office.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go index b75c97edd..71a6db68b 100644 --- a/internal/rpc/office/office.go +++ b/internal/rpc/office/office.go @@ -205,7 +205,15 @@ func (s *officeServer) SendMsg2Tag(_ context.Context, req *pbOffice.SendMsg2TagR } var groupUserIDList []string for _, groupID := range req.GroupList { - etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + resp.CommonResp.ErrCode = constant.ErrInternal.ErrCode + resp.CommonResp.ErrMsg = errMsg + return resp, nil + } + cacheClient := pbCache.NewCacheClient(etcdConn) req := pbCache.GetGroupMemberIDListFromCacheReq{ OperationID: req.OperationID, From e2f7dd67a20e17f7a31c22fbfac2322ea41b224b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 15:29:48 +0800 Subject: [PATCH 228/256] add global recv opt --- pkg/common/db/model.go | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index bc8af133d..b4b77ecc2 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb go_redis.UniversalClient + rdb *go_redis.ClusterClient } type RedisClient struct { @@ -130,18 +130,19 @@ func init() { if err != nil { panic(err.Error()) } - } else { - DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, - Password: config.Config.Redis.DBPassWord, // no password set - DB: 0, // use default DB - PoolSize: 100, // 连接池大小 - }) - _, err = DB.rdb.Ping(ctx).Result() - if err != nil { - panic(err.Error()) - } } + //} else { + // DB.rdb = go_redis.NewClient(&go_redis.Options{ + // Addr: config.Config.Redis.DBAddress, + // Password: config.Config.Redis.DBPassWord, // no password set + // DB: 0, // use default DB + // PoolSize: 100, // 连接池大小 + // }) + // _, err = DB.rdb.Ping(ctx).Result() + // if err != nil { + // panic(err.Error()) + // } + //} } func createMongoIndex(client *mongo.Client, collection string, isUnique bool, keys ...string) error { From 28721c7d20a562e2f4c74e6535b29e18201262e6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 15:34:58 +0800 Subject: [PATCH 229/256] add global recv opt --- pkg/common/db/model.go | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index b4b77ecc2..bc8af133d 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -28,7 +28,7 @@ type DataBases struct { mgoSession *mgo.Session //redisPool *redis.Pool mongoClient *mongo.Client - rdb *go_redis.ClusterClient + rdb go_redis.UniversalClient } type RedisClient struct { @@ -130,19 +130,18 @@ func init() { if err != nil { panic(err.Error()) } + } else { + DB.rdb = go_redis.NewClient(&go_redis.Options{ + Addr: config.Config.Redis.DBAddress, + Password: config.Config.Redis.DBPassWord, // no password set + DB: 0, // use default DB + PoolSize: 100, // 连接池大小 + }) + _, err = DB.rdb.Ping(ctx).Result() + if err != nil { + panic(err.Error()) + } } - //} else { - // DB.rdb = go_redis.NewClient(&go_redis.Options{ - // Addr: config.Config.Redis.DBAddress, - // Password: config.Config.Redis.DBPassWord, // no password set - // DB: 0, // use default DB - // PoolSize: 100, // 连接池大小 - // }) - // _, err = DB.rdb.Ping(ctx).Result() - // if err != nil { - // panic(err.Error()) - // } - //} } func createMongoIndex(client *mongo.Client, collection string, isUnique bool, keys ...string) error { From 19bbd9b5282b7bcc5f644b41f0495a328d0e52c7 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 16 Jun 2022 16:12:41 +0800 Subject: [PATCH 230/256] fix bug --- internal/api/user/user.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 3a760d4ec..52781ae8b 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -197,6 +197,8 @@ func GetUsersInfo(c *gin.Context) { func UpdateUserInfo(c *gin.Context) { params := api.UpdateSelfUserInfoReq{} + var t int32 + params.GlobalRecvMsgOpt = &t if err := c.BindJSON(¶ms); err != nil { log.NewError("0", "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) From 9503766a689f0bbedc32fd8633d26be624b85796 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 16:20:50 +0800 Subject: [PATCH 231/256] fix bug --- internal/api/user/user.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 52781ae8b..f3cc8bdf7 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -15,6 +15,7 @@ import ( "Open_IM/pkg/utils" "context" "github.com/gin-gonic/gin" + "github.com/golang/protobuf/ptypes/wrappers" "net/http" "strings" ) @@ -197,8 +198,6 @@ func GetUsersInfo(c *gin.Context) { func UpdateUserInfo(c *gin.Context) { params := api.UpdateSelfUserInfoReq{} - var t int32 - params.GlobalRecvMsgOpt = &t if err := c.BindJSON(¶ms); err != nil { log.NewError("0", "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) @@ -218,7 +217,7 @@ func UpdateUserInfo(c *gin.Context) { } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) if params.GlobalRecvMsgOpt != nil { - req.GlobalRecvMsgOpt.Value = *params.GlobalRecvMsgOpt + req.GlobalRecvMsgOpt = &wrappers.Int32Value{Value: *params.GlobalRecvMsgOpt} } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) if etcdConn == nil { From 4e11c7a9e27e4965c240215d3ec3d3a590ccc73c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 16:44:12 +0800 Subject: [PATCH 232/256] fix bug --- internal/rpc/user/user.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 7c274bddc..21883a8d7 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -385,7 +385,7 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI } m := make(map[string]interface{}, 1) if req.GlobalRecvMsgOpt != nil { - m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt + m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt.Value err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) From 5ea620a4cd830a52476abca201deb7788d4f5ec2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 16:49:21 +0800 Subject: [PATCH 233/256] fix bug --- internal/api/third/minio_storage_credential.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index f294d6ba3..542c99ba7 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -87,7 +87,7 @@ func MinioUploadFile(c *gin.Context) { log.Debug(req.OperationID, utils.GetSelfFuncName(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, newType, MinioClient.EndpointURL()) _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType}) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error") + log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error", err.Error()) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "upload file error" + err.Error()}) return } From 7ea7dffd4aa81be9ce96c4537826a37173a7ec07 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 17:57:44 +0800 Subject: [PATCH 234/256] fix bug --- internal/rpc/user/user.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 21883a8d7..b38dfa57d 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -385,6 +385,7 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI } m := make(map[string]interface{}, 1) if req.GlobalRecvMsgOpt != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.GlobalRecvMsgOpt, "set GlobalRecvMsgOpt") m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt.Value err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) if err != nil { From a50001364f1980fe67b8520f11e25847e1c896e5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 18:59:17 +0800 Subject: [PATCH 235/256] user proto modify --- pkg/proto/user/user.proto | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 2f591aed6..67b7e3da6 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -68,6 +68,14 @@ message UpdateUserInfoReq{ message UpdateUserInfoResp{ CommonResp commonResp = 1; } +message SetGlobalRecvMessageOptReq{ + string userID = 1; + string operationID = 2; + int32 opt = 3; +} +message SetGlobalRecvMessageOptResp{ + CommonResp commonResp = 1; +} message Conversation{ string OwnerUserID = 1; From 479679a1c6f58d3e31509c47ef2de944bcc2db6b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 19:02:08 +0800 Subject: [PATCH 236/256] user proto modify --- pkg/proto/user/user.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 67b7e3da6..3b14ad177 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -303,6 +303,7 @@ message DeleteUserResp { service user { rpc GetUserInfo(GetUserInfoReq) returns(GetUserInfoResp); rpc UpdateUserInfo(UpdateUserInfoReq) returns(UpdateUserInfoResp); + rpc SetGlobalRecvMessageOpt(SetGlobalRecvMessageOptReq) returns(SetGlobalRecvMessageOptResp); rpc DeleteUsers(DeleteUsersReq)returns(DeleteUsersResp); rpc GetAllUserID(GetAllUserIDReq)returns(GetAllUserIDResp); From a15e644a51fd6c4240a5006acd58295bb3384325 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 19:09:13 +0800 Subject: [PATCH 237/256] fix bug --- pkg/proto/user/user.pb.go | 489 ++++++++++++++++++++++++-------------- pkg/proto/user/user.proto | 2 - 2 files changed, 304 insertions(+), 187 deletions(-) diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index ec740001b..f833cefc7 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -7,7 +7,6 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import sdk_ws "Open_IM/pkg/proto/sdk_ws" -import wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" import ( context "golang.org/x/net/context" @@ -37,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{0} + return fileDescriptor_user_ffbbc34a94bb8978, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -84,7 +83,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{1} + return fileDescriptor_user_ffbbc34a94bb8978, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -137,7 +136,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{2} + return fileDescriptor_user_ffbbc34a94bb8978, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -183,7 +182,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{3} + return fileDescriptor_user_ffbbc34a94bb8978, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -229,7 +228,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{4} + return fileDescriptor_user_ffbbc34a94bb8978, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -276,7 +275,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{5} + return fileDescriptor_user_ffbbc34a94bb8978, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -329,7 +328,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{6} + return fileDescriptor_user_ffbbc34a94bb8978, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -375,7 +374,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{6, 0} + return fileDescriptor_user_ffbbc34a94bb8978, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -422,7 +421,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{7} + return fileDescriptor_user_ffbbc34a94bb8978, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -475,7 +474,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{8} + return fileDescriptor_user_ffbbc34a94bb8978, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -510,20 +509,19 @@ func (m *GetUserInfoResp) GetUserInfoList() []*sdk_ws.UserInfo { } type UpdateUserInfoReq struct { - UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` - OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` - OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` - GlobalRecvMsgOpt *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UserInfo *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"` + OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{9} + return fileDescriptor_user_ffbbc34a94bb8978, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -564,13 +562,6 @@ func (m *UpdateUserInfoReq) GetOperationID() string { return "" } -func (m *UpdateUserInfoReq) GetGlobalRecvMsgOpt() *wrapperspb.Int32Value { - if m != nil { - return m.GlobalRecvMsgOpt - } - return nil -} - type UpdateUserInfoResp struct { CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -582,7 +573,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{10} + return fileDescriptor_user_ffbbc34a94bb8978, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -609,6 +600,98 @@ func (m *UpdateUserInfoResp) GetCommonResp() *CommonResp { return nil } +type SetGlobalRecvMessageOptReq struct { + UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` + OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` + Opt int32 `protobuf:"varint,3,opt,name=opt" json:"opt,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetGlobalRecvMessageOptReq) Reset() { *m = SetGlobalRecvMessageOptReq{} } +func (m *SetGlobalRecvMessageOptReq) String() string { return proto.CompactTextString(m) } +func (*SetGlobalRecvMessageOptReq) ProtoMessage() {} +func (*SetGlobalRecvMessageOptReq) Descriptor() ([]byte, []int) { + return fileDescriptor_user_ffbbc34a94bb8978, []int{11} +} +func (m *SetGlobalRecvMessageOptReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGlobalRecvMessageOptReq.Unmarshal(m, b) +} +func (m *SetGlobalRecvMessageOptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGlobalRecvMessageOptReq.Marshal(b, m, deterministic) +} +func (dst *SetGlobalRecvMessageOptReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGlobalRecvMessageOptReq.Merge(dst, src) +} +func (m *SetGlobalRecvMessageOptReq) XXX_Size() int { + return xxx_messageInfo_SetGlobalRecvMessageOptReq.Size(m) +} +func (m *SetGlobalRecvMessageOptReq) XXX_DiscardUnknown() { + xxx_messageInfo_SetGlobalRecvMessageOptReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGlobalRecvMessageOptReq proto.InternalMessageInfo + +func (m *SetGlobalRecvMessageOptReq) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *SetGlobalRecvMessageOptReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *SetGlobalRecvMessageOptReq) GetOpt() int32 { + if m != nil { + return m.Opt + } + return 0 +} + +type SetGlobalRecvMessageOptResp struct { + CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetGlobalRecvMessageOptResp) Reset() { *m = SetGlobalRecvMessageOptResp{} } +func (m *SetGlobalRecvMessageOptResp) String() string { return proto.CompactTextString(m) } +func (*SetGlobalRecvMessageOptResp) ProtoMessage() {} +func (*SetGlobalRecvMessageOptResp) Descriptor() ([]byte, []int) { + return fileDescriptor_user_ffbbc34a94bb8978, []int{12} +} +func (m *SetGlobalRecvMessageOptResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGlobalRecvMessageOptResp.Unmarshal(m, b) +} +func (m *SetGlobalRecvMessageOptResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGlobalRecvMessageOptResp.Marshal(b, m, deterministic) +} +func (dst *SetGlobalRecvMessageOptResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGlobalRecvMessageOptResp.Merge(dst, src) +} +func (m *SetGlobalRecvMessageOptResp) XXX_Size() int { + return xxx_messageInfo_SetGlobalRecvMessageOptResp.Size(m) +} +func (m *SetGlobalRecvMessageOptResp) XXX_DiscardUnknown() { + xxx_messageInfo_SetGlobalRecvMessageOptResp.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGlobalRecvMessageOptResp proto.InternalMessageInfo + +func (m *SetGlobalRecvMessageOptResp) GetCommonResp() *CommonResp { + if m != nil { + return m.CommonResp + } + return nil +} + type Conversation struct { OwnerUserID string `protobuf:"bytes,1,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"` ConversationID string `protobuf:"bytes,2,opt,name=ConversationID" json:"ConversationID,omitempty"` @@ -633,7 +716,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{11} + return fileDescriptor_user_ffbbc34a94bb8978, []int{13} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -764,7 +847,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{12} + return fileDescriptor_user_ffbbc34a94bb8978, []int{14} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -816,7 +899,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{13} + return fileDescriptor_user_ffbbc34a94bb8978, []int{15} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -858,7 +941,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{14} + return fileDescriptor_user_ffbbc34a94bb8978, []int{16} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -924,7 +1007,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{15} + return fileDescriptor_user_ffbbc34a94bb8978, []int{17} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -964,7 +1047,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{16} + return fileDescriptor_user_ffbbc34a94bb8978, []int{18} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1017,7 +1100,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{17} + return fileDescriptor_user_ffbbc34a94bb8978, []int{19} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1064,7 +1147,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{18} + return fileDescriptor_user_ffbbc34a94bb8978, []int{20} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1117,7 +1200,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{19} + return fileDescriptor_user_ffbbc34a94bb8978, []int{21} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1163,7 +1246,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{20} + return fileDescriptor_user_ffbbc34a94bb8978, []int{22} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1209,7 +1292,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{21} + return fileDescriptor_user_ffbbc34a94bb8978, []int{23} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1257,7 +1340,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{22} + return fileDescriptor_user_ffbbc34a94bb8978, []int{24} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1318,7 +1401,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{23} + return fileDescriptor_user_ffbbc34a94bb8978, []int{25} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1371,7 +1454,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{24} + return fileDescriptor_user_ffbbc34a94bb8978, []int{26} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1416,7 +1499,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{25} + return fileDescriptor_user_ffbbc34a94bb8978, []int{27} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1455,7 +1538,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{26} + return fileDescriptor_user_ffbbc34a94bb8978, []int{28} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1504,7 +1587,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{27} + return fileDescriptor_user_ffbbc34a94bb8978, []int{29} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1571,7 +1654,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{28} + return fileDescriptor_user_ffbbc34a94bb8978, []int{30} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1618,7 +1701,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{29} + return fileDescriptor_user_ffbbc34a94bb8978, []int{31} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1672,7 +1755,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{30} + return fileDescriptor_user_ffbbc34a94bb8978, []int{32} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1729,7 +1812,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{31} + return fileDescriptor_user_ffbbc34a94bb8978, []int{33} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1802,7 +1885,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{32} + return fileDescriptor_user_ffbbc34a94bb8978, []int{34} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1842,7 +1925,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{33} + return fileDescriptor_user_ffbbc34a94bb8978, []int{35} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1897,7 +1980,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{34} + return fileDescriptor_user_ffbbc34a94bb8978, []int{36} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -1960,7 +2043,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{35} + return fileDescriptor_user_ffbbc34a94bb8978, []int{37} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2026,7 +2109,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{36} + return fileDescriptor_user_ffbbc34a94bb8978, []int{38} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2067,7 +2150,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{37} + return fileDescriptor_user_ffbbc34a94bb8978, []int{39} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2126,7 +2209,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{38} + return fileDescriptor_user_ffbbc34a94bb8978, []int{40} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2166,7 +2249,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{39} + return fileDescriptor_user_ffbbc34a94bb8978, []int{41} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2218,7 +2301,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{40} + return fileDescriptor_user_ffbbc34a94bb8978, []int{42} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2258,7 +2341,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{41} + return fileDescriptor_user_ffbbc34a94bb8978, []int{43} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2312,7 +2395,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{42} + return fileDescriptor_user_ffbbc34a94bb8978, []int{44} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2367,7 +2450,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{43} + return fileDescriptor_user_ffbbc34a94bb8978, []int{45} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2427,7 +2510,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{44} + return fileDescriptor_user_ffbbc34a94bb8978, []int{46} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2472,7 +2555,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{45} + return fileDescriptor_user_ffbbc34a94bb8978, []int{47} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2512,7 +2595,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{46} + return fileDescriptor_user_ffbbc34a94bb8978, []int{48} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2564,7 +2647,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_94f030505f068262, []int{47} + return fileDescriptor_user_ffbbc34a94bb8978, []int{49} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -2604,6 +2687,8 @@ func init() { proto.RegisterType((*GetUserInfoResp)(nil), "user.GetUserInfoResp") proto.RegisterType((*UpdateUserInfoReq)(nil), "user.UpdateUserInfoReq") proto.RegisterType((*UpdateUserInfoResp)(nil), "user.UpdateUserInfoResp") + proto.RegisterType((*SetGlobalRecvMessageOptReq)(nil), "user.SetGlobalRecvMessageOptReq") + proto.RegisterType((*SetGlobalRecvMessageOptResp)(nil), "user.SetGlobalRecvMessageOptResp") proto.RegisterType((*Conversation)(nil), "user.Conversation") proto.RegisterType((*SetConversationReq)(nil), "user.SetConversationReq") proto.RegisterType((*SetConversationResp)(nil), "user.SetConversationResp") @@ -2656,6 +2741,7 @@ const _ = grpc.SupportPackageIsVersion4 type UserClient interface { GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*UpdateUserInfoResp, error) + SetGlobalRecvMessageOpt(ctx context.Context, in *SetGlobalRecvMessageOptReq, opts ...grpc.CallOption) (*SetGlobalRecvMessageOptResp, error) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error) GetAllUserID(ctx context.Context, in *GetAllUserIDReq, opts ...grpc.CallOption) (*GetAllUserIDResp, error) AccountCheck(ctx context.Context, in *AccountCheckReq, opts ...grpc.CallOption) (*AccountCheckResp, error) @@ -2704,6 +2790,15 @@ func (c *userClient) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, return out, nil } +func (c *userClient) SetGlobalRecvMessageOpt(ctx context.Context, in *SetGlobalRecvMessageOptReq, opts ...grpc.CallOption) (*SetGlobalRecvMessageOptResp, error) { + out := new(SetGlobalRecvMessageOptResp) + err := grpc.Invoke(ctx, "/user.user/SetGlobalRecvMessageOpt", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *userClient) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error) { out := new(DeleteUsersResp) err := grpc.Invoke(ctx, "/user.user/DeleteUsers", in, out, c.cc, opts...) @@ -2889,6 +2984,7 @@ func (c *userClient) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ... type UserServer interface { GetUserInfo(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*UpdateUserInfoResp, error) + SetGlobalRecvMessageOpt(context.Context, *SetGlobalRecvMessageOptReq) (*SetGlobalRecvMessageOptResp, error) DeleteUsers(context.Context, *DeleteUsersReq) (*DeleteUsersResp, error) GetAllUserID(context.Context, *GetAllUserIDReq) (*GetAllUserIDResp, error) AccountCheck(context.Context, *AccountCheckReq) (*AccountCheckResp, error) @@ -2951,6 +3047,24 @@ func _User_UpdateUserInfo_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _User_SetGlobalRecvMessageOpt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetGlobalRecvMessageOptReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServer).SetGlobalRecvMessageOpt(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/user.user/SetGlobalRecvMessageOpt", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServer).SetGlobalRecvMessageOpt(ctx, req.(*SetGlobalRecvMessageOptReq)) + } + return interceptor(ctx, in, info, handler) +} + func _User_DeleteUsers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeleteUsersReq) if err := dec(in); err != nil { @@ -3323,6 +3437,10 @@ var _User_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateUserInfo", Handler: _User_UpdateUserInfo_Handler, }, + { + MethodName: "SetGlobalRecvMessageOpt", + Handler: _User_SetGlobalRecvMessageOpt_Handler, + }, { MethodName: "DeleteUsers", Handler: _User_DeleteUsers_Handler, @@ -3408,128 +3526,129 @@ var _User_serviceDesc = grpc.ServiceDesc{ Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_94f030505f068262) } +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_ffbbc34a94bb8978) } -var fileDescriptor_user_94f030505f068262 = []byte{ - // 1906 bytes of a gzipped FileDescriptorProto +var fileDescriptor_user_ffbbc34a94bb8978 = []byte{ + // 1922 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, - 0x15, 0x57, 0xdb, 0xce, 0x24, 0x79, 0x8e, 0x1d, 0xa7, 0x26, 0x3b, 0xe9, 0x6d, 0x60, 0x08, 0xad, - 0x65, 0x37, 0x1a, 0x09, 0x07, 0x66, 0x11, 0x83, 0x16, 0xc1, 0x6e, 0xec, 0x64, 0x2c, 0x23, 0x26, - 0xb1, 0xda, 0x13, 0x84, 0x10, 0x52, 0xd4, 0xb1, 0x2b, 0x4e, 0x2b, 0x76, 0x77, 0x6f, 0x57, 0x3b, - 0x33, 0xe1, 0xb2, 0x88, 0x8f, 0x1b, 0x17, 0x4e, 0xbb, 0x70, 0xe0, 0xef, 0xe0, 0x0e, 0x27, 0xae, - 0x9c, 0xe0, 0xc2, 0xbf, 0x82, 0xea, 0xa3, 0xbb, 0xab, 0xaa, 0xdb, 0x89, 0xe9, 0x44, 0x73, 0x49, - 0x5c, 0xaf, 0xbe, 0x7e, 0xef, 0xbd, 0xdf, 0x7b, 0xf5, 0xaa, 0x1a, 0x36, 0xe7, 0x04, 0x47, 0xfb, - 0xf4, 0x4f, 0x3b, 0x8c, 0x82, 0x38, 0x40, 0x35, 0xfa, 0xdb, 0xfa, 0xd6, 0x49, 0x88, 0xfd, 0xb3, - 0xfe, 0xab, 0xfd, 0xf0, 0x6a, 0xb2, 0xcf, 0x3a, 0xf6, 0xc9, 0xf8, 0xea, 0xec, 0x0d, 0xd9, 0x7f, - 0x43, 0xf8, 0x40, 0xeb, 0xa3, 0xc5, 0x43, 0x22, 0x37, 0x0c, 0x71, 0x24, 0x06, 0xda, 0x3f, 0x01, - 0xe8, 0x06, 0xb3, 0x59, 0xe0, 0x3b, 0x98, 0x84, 0xc8, 0x84, 0x55, 0x1c, 0x45, 0xdd, 0x60, 0x8c, - 0x4d, 0x63, 0xd7, 0xd8, 0x5b, 0x71, 0x92, 0x26, 0x7a, 0x02, 0x8f, 0x70, 0x14, 0xbd, 0x22, 0x13, - 0xb3, 0xb2, 0x6b, 0xec, 0xad, 0x3b, 0xa2, 0x65, 0xff, 0x1a, 0x9a, 0x87, 0x78, 0x8a, 0x63, 0x7c, - 0x4a, 0x70, 0x44, 0x1c, 0xfc, 0x39, 0x7a, 0x06, 0xad, 0x4c, 0xd2, 0x3f, 0xfc, 0x99, 0x47, 0x62, - 0xb3, 0xb2, 0x5b, 0xdd, 0x5b, 0x77, 0x72, 0x72, 0x64, 0xc1, 0xda, 0x49, 0xc8, 0xdb, 0x66, 0x95, - 0xad, 0x9b, 0xb6, 0xd1, 0x2e, 0xd4, 0x4f, 0x42, 0x1c, 0xb9, 0xb1, 0x17, 0xf8, 0xfd, 0x43, 0xb3, - 0xc6, 0xba, 0x65, 0x91, 0x1d, 0xc0, 0xa6, 0xb2, 0x37, 0x09, 0xd1, 0x77, 0x65, 0x75, 0x98, 0x0e, - 0xf5, 0xe7, 0xad, 0x36, 0xb3, 0x60, 0x26, 0x77, 0x64, 0x95, 0x9f, 0x41, 0xeb, 0xa5, 0xeb, 0x4d, - 0xf1, 0x38, 0x0f, 0x57, 0x97, 0xdb, 0x27, 0xb0, 0xd9, 0xc3, 0xf1, 0xc1, 0x74, 0xca, 0x65, 0x54, - 0x5b, 0x0b, 0xd6, 0x82, 0x44, 0x03, 0x83, 0x6b, 0x10, 0x48, 0x1a, 0x04, 0x92, 0x06, 0xdc, 0x70, - 0xb2, 0xc8, 0x1e, 0x43, 0x4b, 0x5d, 0xb0, 0x94, 0x0a, 0x4f, 0x01, 0x72, 0xe0, 0x25, 0x89, 0x7d, - 0x03, 0x9b, 0x07, 0xa3, 0x51, 0x30, 0xf7, 0xe3, 0xee, 0x25, 0x1e, 0x5d, 0x51, 0xd8, 0x7b, 0xb0, - 0xc9, 0x7e, 0x4b, 0xf3, 0x0c, 0x36, 0x4f, 0x17, 0x2b, 0x2e, 0xaa, 0xdc, 0xee, 0xa2, 0x6a, 0xde, - 0x45, 0xff, 0x35, 0xa0, 0xa5, 0xee, 0xcd, 0x35, 0x1c, 0x2d, 0xa1, 0x61, 0x36, 0x06, 0xf5, 0x00, - 0x1c, 0x4c, 0xe6, 0xd3, 0x38, 0xd5, 0xb0, 0xfe, 0xfc, 0x23, 0x3e, 0x43, 0x5f, 0xbd, 0x3d, 0xf4, - 0xfc, 0xc9, 0x94, 0x51, 0x62, 0x18, 0xbb, 0xf1, 0x9c, 0x38, 0xd2, 0x54, 0x6b, 0x00, 0x2d, 0xbd, - 0x9f, 0x52, 0x7b, 0x2e, 0x3b, 0x50, 0xb4, 0xd0, 0x07, 0xd0, 0x70, 0xf9, 0xe2, 0x7c, 0xa0, 0x50, - 0x5f, 0x15, 0xda, 0x3e, 0x34, 0x7b, 0x38, 0x66, 0x06, 0xf1, 0x2f, 0x02, 0x6a, 0xdb, 0xa7, 0x00, - 0x73, 0xdd, 0xac, 0x92, 0xe4, 0x9e, 0x16, 0xfd, 0xbd, 0xc1, 0x48, 0x98, 0x6d, 0x58, 0xca, 0xa0, - 0x9f, 0xc2, 0x46, 0xb2, 0x02, 0x43, 0x59, 0x65, 0x26, 0xfd, 0x5a, 0x9b, 0xe0, 0xe8, 0x1a, 0x47, - 0x67, 0x6e, 0xe8, 0x9d, 0x85, 0x6e, 0xe4, 0xce, 0x48, 0x3b, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xcb, - 0x80, 0xad, 0xd3, 0x70, 0xec, 0x8a, 0x70, 0x16, 0xaa, 0xbf, 0x80, 0xb5, 0xa4, 0x29, 0x60, 0xdc, - 0xba, 0x64, 0x3a, 0xf8, 0x2e, 0x9b, 0x04, 0x79, 0x9b, 0x48, 0x22, 0xd4, 0x83, 0xd6, 0x64, 0x1a, - 0x9c, 0xbb, 0x53, 0x07, 0x8f, 0xae, 0x5f, 0x91, 0xc9, 0x49, 0x18, 0xb3, 0x7c, 0x41, 0xb7, 0x9f, - 0x04, 0xc1, 0x64, 0x8a, 0x79, 0xb6, 0x3b, 0x9f, 0x5f, 0xb4, 0xfb, 0x7e, 0xfc, 0xf1, 0xf3, 0x9f, - 0xbb, 0xd3, 0x39, 0x76, 0x72, 0x93, 0xec, 0x97, 0x80, 0x74, 0xa5, 0xca, 0x98, 0xd7, 0xfe, 0x4f, - 0x15, 0x36, 0xba, 0x81, 0x7f, 0x8d, 0x23, 0xc2, 0x30, 0x32, 0xbf, 0xbe, 0xf1, 0x71, 0xa4, 0x64, - 0x0a, 0x59, 0x84, 0x3e, 0x84, 0xa6, 0x3c, 0x23, 0xb5, 0x83, 0x26, 0xa5, 0xec, 0x92, 0xb4, 0xac, - 0xb2, 0x2c, 0x2d, 0x49, 0x68, 0x3e, 0x93, 0x67, 0xbc, 0xbe, 0x09, 0x31, 0xb3, 0xc5, 0x8a, 0x93, - 0x93, 0x53, 0xe6, 0x0b, 0x40, 0x2b, 0x9c, 0xf9, 0x02, 0x8b, 0x09, 0xab, 0xbd, 0x28, 0x98, 0x87, - 0xfd, 0x43, 0xf3, 0x11, 0xeb, 0x48, 0x9a, 0x54, 0x8f, 0x53, 0x3f, 0xc2, 0xee, 0xb8, 0x4b, 0x43, - 0xc0, 0x5c, 0x65, 0x0b, 0xcb, 0x22, 0x1a, 0x35, 0x87, 0x91, 0x7b, 0x11, 0xbf, 0xc6, 0x6f, 0xe3, - 0xd7, 0xde, 0x0c, 0x9b, 0x6b, 0xbb, 0xc6, 0x5e, 0xd5, 0x51, 0x85, 0xd4, 0xdf, 0x7d, 0x32, 0xf0, - 0x7c, 0x1f, 0x8f, 0xcd, 0xf5, 0x5d, 0x63, 0x6f, 0xcd, 0x49, 0xdb, 0xc8, 0x86, 0x8d, 0x83, 0x38, - 0x76, 0x47, 0x97, 0x78, 0xcc, 0x88, 0x04, 0x0c, 0x82, 0x22, 0xa3, 0xbb, 0xf4, 0xc9, 0x20, 0xf2, - 0xae, 0xdd, 0x18, 0x77, 0x2f, 0xdd, 0xd8, 0xac, 0xb3, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, - 0xc4, 0xcc, 0x0c, 0x1b, 0x1c, 0xad, 0x24, 0xa2, 0x7b, 0xf5, 0xc9, 0x71, 0x10, 0xf7, 0x7d, 0x26, - 0x35, 0x1b, 0x6c, 0x19, 0x45, 0x86, 0x9a, 0x50, 0x39, 0x7a, 0x6b, 0x36, 0x19, 0x8a, 0xca, 0xd1, - 0x5b, 0xfb, 0x2f, 0x06, 0xa0, 0x21, 0x8e, 0x65, 0x6b, 0x52, 0xee, 0xff, 0x40, 0x75, 0xb9, 0xe0, - 0x09, 0x4a, 0x78, 0x22, 0x0d, 0x56, 0xa9, 0xf1, 0x0c, 0x5a, 0x7e, 0x10, 0x7b, 0x17, 0xde, 0x28, - 0x73, 0x58, 0x85, 0x3b, 0x4c, 0x97, 0x2f, 0x91, 0x1e, 0x7a, 0xf0, 0x38, 0x87, 0xad, 0x14, 0x85, - 0xff, 0x69, 0x40, 0x6b, 0x88, 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, - 0xcb, 0x59, 0x65, 0x25, 0x6f, 0x95, 0x23, 0xd8, 0xd2, 0x74, 0x29, 0x65, 0x93, 0xdf, 0x18, 0x80, - 0x7a, 0x79, 0xcf, 0xe7, 0x75, 0x36, 0x0a, 0x75, 0xd6, 0xac, 0x57, 0xc9, 0x5b, 0xef, 0x6e, 0xff, - 0x7e, 0x01, 0x8f, 0x7b, 0x0f, 0xe1, 0xdf, 0x1c, 0x5d, 0x2b, 0xcb, 0xd1, 0xd5, 0xfe, 0x9d, 0x91, - 0x43, 0x40, 0x96, 0xa3, 0x06, 0xad, 0x39, 0x14, 0x83, 0x10, 0x51, 0xab, 0xe8, 0xe2, 0x25, 0xcc, - 0xf0, 0x5b, 0x03, 0xb6, 0xf3, 0x28, 0x4a, 0x19, 0xe2, 0x87, 0xd0, 0x50, 0x96, 0x11, 0xe5, 0x45, - 0x91, 0x25, 0xd4, 0x81, 0xf6, 0xaf, 0xe0, 0x09, 0xaf, 0xde, 0x4a, 0x18, 0x43, 0x53, 0xb1, 0x92, - 0x57, 0xf1, 0x0f, 0x06, 0xec, 0x14, 0x2e, 0xff, 0x8e, 0xb5, 0xfc, 0x87, 0x01, 0x66, 0xc7, 0x8d, - 0x47, 0x97, 0xc3, 0x02, 0xaf, 0xe7, 0x96, 0x35, 0x96, 0x5c, 0x76, 0x89, 0x60, 0x28, 0x4a, 0x01, - 0xd5, 0xe5, 0x52, 0x40, 0xad, 0x28, 0x70, 0xde, 0x5f, 0xa0, 0x45, 0x29, 0x7b, 0x9a, 0xb0, 0x3a, - 0x9c, 0x8f, 0x46, 0x98, 0x24, 0x24, 0x4e, 0x9a, 0xf4, 0x50, 0xe5, 0x17, 0x07, 0x56, 0x54, 0xad, - 0x3b, 0xa2, 0x65, 0xf7, 0xa1, 0xe1, 0x60, 0xe2, 0x4d, 0x7c, 0xaa, 0x1e, 0xb5, 0x5d, 0x72, 0xfa, - 0x8e, 0x93, 0xba, 0x93, 0xb7, 0x96, 0xa0, 0x46, 0x07, 0x9a, 0xf2, 0x52, 0xa5, 0x72, 0xd9, 0x4f, - 0xd3, 0xba, 0xb5, 0x73, 0xd3, 0x1f, 0xdf, 0x0f, 0xcf, 0x57, 0x06, 0xd4, 0xe8, 0x60, 0x7a, 0x9c, - 0x0e, 0xa2, 0xe0, 0xc2, 0x9b, 0xe2, 0xc1, 0x65, 0x10, 0x07, 0x62, 0x21, 0x45, 0x46, 0x8f, 0xfe, - 0x63, 0x6f, 0x74, 0xe5, 0xbb, 0x33, 0x9c, 0x94, 0x7a, 0x49, 0x5b, 0x82, 0x50, 0x55, 0x20, 0x3c, - 0x05, 0xe8, 0x46, 0xd8, 0x8d, 0x31, 0xab, 0x28, 0xb8, 0x77, 0x25, 0x09, 0xf5, 0x46, 0x9f, 0x74, - 0xa6, 0xc1, 0xe8, 0x8a, 0x65, 0xff, 0x35, 0x27, 0x69, 0xda, 0xa3, 0xb4, 0x5a, 0xe6, 0x6a, 0x96, - 0xbc, 0x60, 0xb1, 0x8b, 0xb7, 0xc8, 0x91, 0xc0, 0xc7, 0x32, 0xdb, 0x33, 0xb9, 0xfd, 0xa5, 0x01, - 0x5b, 0x62, 0x17, 0xd2, 0xb9, 0x39, 0x76, 0x67, 0x58, 0x5c, 0x0d, 0xa9, 0x84, 0x36, 0x93, 0xab, - 0x61, 0xd2, 0x46, 0x87, 0x00, 0x03, 0x77, 0xe2, 0xf9, 0x72, 0xee, 0xfd, 0xa0, 0xa0, 0x54, 0x76, - 0xf0, 0xe7, 0x73, 0x4c, 0xe2, 0x6c, 0xac, 0x23, 0xcd, 0x5b, 0x22, 0x4f, 0xfe, 0x99, 0x9f, 0x58, - 0x0a, 0x32, 0x12, 0xa2, 0x5d, 0x58, 0xa1, 0xc0, 0x93, 0x70, 0x95, 0x35, 0xe2, 0x1d, 0xe8, 0xa8, - 0x00, 0xe0, 0xb7, 0x0b, 0x01, 0x92, 0x30, 0xf0, 0x09, 0x5e, 0x80, 0x30, 0xb1, 0xc1, 0x7c, 0x46, - 0x44, 0xec, 0xa6, 0x6d, 0xfb, 0x6f, 0x06, 0x6c, 0x1c, 0x4c, 0x63, 0x1e, 0xef, 0xf7, 0x22, 0x20, - 0x1d, 0x31, 0xb8, 0x0c, 0x7c, 0x7c, 0x3c, 0x9f, 0x9d, 0xe3, 0x88, 0xed, 0x54, 0x75, 0x64, 0x91, - 0xc2, 0xba, 0x9a, 0xc6, 0xba, 0x6d, 0x58, 0x39, 0x9a, 0xb9, 0xde, 0x54, 0x54, 0x0e, 0xbc, 0x21, - 0x5d, 0x49, 0xc6, 0xa2, 0x0a, 0x4e, 0xdb, 0xf6, 0x01, 0x34, 0x24, 0xe4, 0x65, 0x38, 0x65, 0xff, - 0xc9, 0x80, 0x7a, 0xe2, 0x99, 0xe4, 0xc8, 0x90, 0x94, 0x34, 0xf2, 0x4a, 0x3e, 0x0c, 0x67, 0x64, - 0x56, 0x56, 0x55, 0x56, 0xda, 0x7f, 0x37, 0x60, 0x23, 0xc3, 0x74, 0xcf, 0x50, 0xa9, 0x16, 0x85, - 0x8a, 0xc6, 0xab, 0xea, 0x43, 0xf0, 0xaa, 0xa6, 0xf1, 0xea, 0x2b, 0x03, 0xe0, 0x60, 0x3c, 0x4e, - 0x58, 0x75, 0xb7, 0x61, 0x35, 0xf6, 0x08, 0x7e, 0xc9, 0xec, 0x59, 0x94, 0x97, 0x10, 0xd4, 0x24, - 0x46, 0xb1, 0xdf, 0x0a, 0x6f, 0x56, 0x34, 0xde, 0x7c, 0x0a, 0xf5, 0x14, 0x59, 0x29, 0xd6, 0xfc, - 0xd1, 0x80, 0x0d, 0x96, 0xd8, 0xee, 0x8a, 0x99, 0x0f, 0xa1, 0x79, 0xe4, 0x8f, 0x0f, 0x3d, 0xe2, - 0x9e, 0x4f, 0x79, 0xd6, 0x14, 0x75, 0xb8, 0x2a, 0xbd, 0x3b, 0x85, 0x28, 0xfa, 0xd4, 0xf2, 0x71, - 0x20, 0xa1, 0x29, 0xa5, 0xd1, 0x05, 0x34, 0x4f, 0xfd, 0xa5, 0x54, 0xba, 0x3b, 0x0d, 0xc8, 0x50, - 0xab, 0x1a, 0xd4, 0x2e, 0x6c, 0x2a, 0xfb, 0x94, 0x02, 0xfb, 0x57, 0x83, 0x3d, 0xd8, 0xa5, 0xcb, - 0xb0, 0xc8, 0x55, 0xe3, 0xd2, 0x78, 0x98, 0x5c, 0x5e, 0xa0, 0x9d, 0x2d, 0xb9, 0xfe, 0x78, 0x3e, - 0x13, 0xf9, 0x54, 0x91, 0xd9, 0x5f, 0xc0, 0x7a, 0xda, 0xa6, 0xb1, 0x48, 0xff, 0x0b, 0x48, 0x4a, - 0x2c, 0xb2, 0xfe, 0x67, 0xd0, 0xea, 0xe0, 0x89, 0xe7, 0xe7, 0x59, 0x92, 0x93, 0x17, 0xf0, 0xa9, - 0x5a, 0xc4, 0x27, 0xfb, 0xdf, 0xfc, 0x28, 0x94, 0x2d, 0x54, 0x2a, 0x8f, 0xec, 0x03, 0x64, 0x6b, - 0x88, 0x6c, 0xb2, 0xc9, 0x67, 0x64, 0x4e, 0x94, 0x86, 0xbc, 0x8b, 0xc4, 0x32, 0x60, 0x37, 0x9f, - 0x74, 0xcf, 0xa4, 0x6e, 0xda, 0x81, 0x55, 0xda, 0x3c, 0xf3, 0xfe, 0xff, 0xc2, 0xe9, 0x88, 0xdd, - 0x62, 0xb4, 0x15, 0x49, 0x88, 0xbe, 0x23, 0xb9, 0x51, 0x64, 0xfa, 0x9c, 0xf2, 0xd9, 0x08, 0xfb, - 0x02, 0x1a, 0xd9, 0x43, 0xf8, 0xfd, 0x20, 0xdd, 0x1a, 0x43, 0x1d, 0xf9, 0xb1, 0xbf, 0x9c, 0x63, - 0x9f, 0x7f, 0x59, 0xe7, 0x27, 0x04, 0xfa, 0x24, 0x3d, 0xff, 0xd8, 0x8b, 0xce, 0x36, 0x9f, 0xa5, - 0xbe, 0xa5, 0x5a, 0xef, 0x15, 0x48, 0x49, 0x88, 0xba, 0xd0, 0x54, 0xdf, 0xe9, 0xd0, 0x8e, 0x60, - 0xb7, 0xfe, 0x24, 0x69, 0x99, 0xc5, 0x1d, 0x24, 0xa4, 0x00, 0xa4, 0xcf, 0x07, 0x09, 0x00, 0xf5, - 0x6b, 0x46, 0x02, 0x40, 0xff, 0xce, 0xf0, 0x63, 0x76, 0x50, 0xa6, 0x0f, 0xf7, 0x28, 0xc3, 0x29, - 0x7f, 0x1d, 0xb0, 0x9e, 0x14, 0x89, 0xf9, 0x74, 0xf9, 0xdd, 0x3a, 0x99, 0xae, 0xbd, 0xd2, 0x27, - 0xd3, 0x73, 0x0f, 0xe8, 0x2f, 0x59, 0x51, 0xab, 0xbc, 0x22, 0x99, 0xe9, 0x4e, 0xda, 0xeb, 0x84, - 0xf5, 0xfe, 0x82, 0x1e, 0x12, 0x22, 0x87, 0x11, 0x5a, 0xbf, 0x61, 0xa2, 0xaf, 0xcb, 0xa8, 0xf5, - 0x2b, 0x9f, 0xf5, 0x8d, 0x5b, 0x7a, 0x49, 0x88, 0xfa, 0x2c, 0x43, 0xaa, 0x0b, 0x16, 0x43, 0x60, - 0xab, 0x59, 0x8b, 0xba, 0x48, 0x88, 0x7e, 0x01, 0xef, 0x15, 0x5e, 0xd9, 0xd0, 0x53, 0x11, 0x0b, - 0x0b, 0x6e, 0xa5, 0xd6, 0x37, 0x6f, 0xed, 0xe7, 0x06, 0x1c, 0x16, 0x1b, 0x70, 0xb8, 0xd0, 0x80, - 0x45, 0xcf, 0x6a, 0x9f, 0x41, 0x43, 0x79, 0x57, 0x42, 0x4f, 0xd2, 0xb1, 0xca, 0xc3, 0x99, 0xb5, - 0x53, 0x28, 0xe7, 0x24, 0x94, 0xee, 0x27, 0x5a, 0x14, 0x88, 0x0c, 0xa3, 0x45, 0x41, 0x9a, 0x25, - 0xba, 0xe9, 0x15, 0x4e, 0xd4, 0xf6, 0x49, 0x14, 0xe4, 0xee, 0x22, 0x96, 0x59, 0xdc, 0x41, 0x42, - 0xf4, 0x82, 0x7d, 0x5a, 0x11, 0x77, 0x49, 0xf4, 0x98, 0x8f, 0x53, 0x2e, 0xaa, 0xd6, 0x76, 0x5e, - 0x48, 0x42, 0xf4, 0x7d, 0x58, 0x4f, 0x6b, 0x60, 0x24, 0x2e, 0xfc, 0x72, 0x39, 0x6f, 0x3d, 0xce, - 0xc9, 0x48, 0x88, 0xbe, 0x07, 0x6b, 0x09, 0x08, 0xb4, 0xa5, 0x82, 0xa2, 0x73, 0x90, 0x2e, 0x22, - 0x21, 0x6a, 0xc3, 0xaa, 0x28, 0x9a, 0x90, 0x48, 0x2d, 0x59, 0x75, 0x67, 0x6d, 0x69, 0x12, 0x0e, - 0x2c, 0x3b, 0x03, 0x91, 0x9e, 0x36, 0x33, 0x60, 0x6a, 0x31, 0xf0, 0x09, 0xd4, 0xa5, 0xfa, 0x20, - 0x71, 0x84, 0x5a, 0x9a, 0x24, 0x8e, 0xd0, 0x0b, 0x89, 0xcf, 0xa0, 0xa1, 0x9c, 0x79, 0x28, 0x8b, - 0x7b, 0xa5, 0x54, 0xb0, 0x76, 0x0a, 0xe5, 0x69, 0xd4, 0x28, 0x07, 0x81, 0x14, 0x35, 0xfa, 0x91, - 0x23, 0x45, 0x4d, 0xfe, 0xec, 0x78, 0x01, 0x90, 0x65, 0xab, 0xc4, 0xa1, 0xca, 0xf1, 0x60, 0x6d, - 0xe7, 0x85, 0x24, 0xec, 0x34, 0x7e, 0x59, 0x6f, 0xb3, 0x8f, 0xcd, 0x3f, 0xa2, 0x7f, 0xce, 0x1f, - 0xb1, 0x4f, 0x26, 0x1f, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x5b, 0xa4, 0x32, 0x85, 0x1e, + 0x15, 0x57, 0xfb, 0x63, 0x92, 0x3c, 0xc7, 0x8e, 0x53, 0x93, 0x9d, 0xf4, 0xf6, 0xc2, 0xe0, 0x6d, + 0x2d, 0x4b, 0x34, 0x12, 0x09, 0x0c, 0x88, 0x41, 0x8b, 0x60, 0x37, 0x76, 0x32, 0x96, 0x11, 0x93, + 0x58, 0xed, 0x19, 0x09, 0x21, 0x44, 0xd4, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0xf6, + 0x7c, 0x70, 0x59, 0xc4, 0xc7, 0x05, 0x71, 0xe1, 0xc4, 0xc2, 0x81, 0xbf, 0x83, 0x3b, 0x9c, 0xf8, + 0x0f, 0xe0, 0xc2, 0x9f, 0xc1, 0x15, 0xd5, 0x47, 0x77, 0x57, 0x55, 0xb7, 0x63, 0xd3, 0x89, 0xe6, + 0x92, 0xb8, 0x5e, 0x7d, 0xfd, 0xde, 0x7b, 0xbf, 0xf7, 0xea, 0x55, 0x35, 0xec, 0x2c, 0x08, 0x8e, + 0x8e, 0xe8, 0x9f, 0xc3, 0x30, 0x0a, 0xe2, 0x00, 0xd5, 0xe8, 0x6f, 0xeb, 0xc3, 0xf3, 0x10, 0xfb, + 0x17, 0x83, 0x67, 0x47, 0xe1, 0xf5, 0xf4, 0x88, 0x75, 0x1c, 0x91, 0xc9, 0xf5, 0xc5, 0x6b, 0x72, + 0xf4, 0x9a, 0xf0, 0x81, 0xf6, 0x8f, 0x00, 0x7a, 0xc1, 0x7c, 0x1e, 0xf8, 0x0e, 0x26, 0x21, 0x32, + 0x61, 0x03, 0x47, 0x51, 0x2f, 0x98, 0x60, 0xd3, 0xe8, 0x18, 0x07, 0x75, 0x27, 0x69, 0xa2, 0x07, + 0x70, 0x0f, 0x47, 0xd1, 0x33, 0x32, 0x35, 0x2b, 0x1d, 0xe3, 0x60, 0xcb, 0x11, 0x2d, 0xfb, 0x97, + 0xd0, 0x3a, 0xc1, 0x33, 0x1c, 0xe3, 0x17, 0x04, 0x47, 0xc4, 0xc1, 0x9f, 0xa3, 0x47, 0xd0, 0xce, + 0x24, 0x83, 0x93, 0x9f, 0x78, 0x24, 0x36, 0x2b, 0x9d, 0xea, 0xc1, 0x96, 0x93, 0x93, 0x23, 0x0b, + 0x36, 0xcf, 0x43, 0xde, 0x36, 0xab, 0x6c, 0xdd, 0xb4, 0x8d, 0x3a, 0xd0, 0x38, 0x0f, 0x71, 0xe4, + 0xc6, 0x5e, 0xe0, 0x0f, 0x4e, 0xcc, 0x1a, 0xeb, 0x96, 0x45, 0x76, 0x00, 0x3b, 0xca, 0xde, 0x24, + 0x44, 0xdf, 0x92, 0xd5, 0x61, 0x3a, 0x34, 0x1e, 0xb7, 0x0f, 0x99, 0x61, 0x32, 0xb9, 0x23, 0xab, + 0xfc, 0x08, 0xda, 0x4f, 0x5d, 0x6f, 0x86, 0x27, 0x79, 0xb8, 0xba, 0xdc, 0x3e, 0x87, 0x9d, 0x3e, + 0x8e, 0x8f, 0x67, 0x33, 0x2e, 0xa3, 0xda, 0x5a, 0xb0, 0x19, 0x24, 0x1a, 0x18, 0x5c, 0x83, 0x40, + 0xd2, 0x20, 0x90, 0x34, 0xe0, 0x86, 0x93, 0x45, 0xf6, 0x04, 0xda, 0xea, 0x82, 0xa5, 0x54, 0x78, + 0x08, 0x90, 0x03, 0x2f, 0x49, 0xec, 0xb7, 0xb0, 0x73, 0x3c, 0x1e, 0x07, 0x0b, 0x3f, 0xee, 0x5d, + 0xe1, 0xf1, 0x35, 0x85, 0x7d, 0x00, 0x3b, 0xec, 0xb7, 0x34, 0xcf, 0x60, 0xf3, 0x74, 0xb1, 0xe2, + 0xa2, 0xca, 0xcd, 0x2e, 0xaa, 0xe6, 0x5d, 0xf4, 0x1f, 0x03, 0xda, 0xea, 0xde, 0x5c, 0xc3, 0xf1, + 0x1a, 0x1a, 0x66, 0x63, 0x50, 0x1f, 0xc0, 0xc1, 0x64, 0x31, 0x8b, 0x53, 0x0d, 0x1b, 0x8f, 0xbf, + 0xc1, 0x67, 0xe8, 0xab, 0x1f, 0x8e, 0x3c, 0x7f, 0x3a, 0x63, 0x94, 0x18, 0xc5, 0x6e, 0xbc, 0x20, + 0x8e, 0x34, 0xd5, 0x1a, 0x42, 0x5b, 0xef, 0xa7, 0xd4, 0x5e, 0xc8, 0x0e, 0x14, 0x2d, 0xf4, 0x11, + 0x34, 0x5d, 0xbe, 0x38, 0x1f, 0x28, 0xd4, 0x57, 0x85, 0xb6, 0x0f, 0xad, 0x3e, 0x8e, 0x99, 0x41, + 0xfc, 0xcb, 0x80, 0xda, 0xf6, 0x21, 0xc0, 0x42, 0x37, 0xab, 0x24, 0xb9, 0xa5, 0x45, 0x7f, 0x6b, + 0x30, 0x12, 0x66, 0x1b, 0x96, 0x32, 0xe8, 0xa7, 0xb0, 0x9d, 0xac, 0xc0, 0x50, 0x56, 0x99, 0x49, + 0x3f, 0x38, 0x24, 0x38, 0x7a, 0x85, 0xa3, 0x0b, 0x37, 0xf4, 0x2e, 0x42, 0x37, 0x72, 0xe7, 0xe4, + 0x30, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xde, 0x80, 0xdd, 0x17, 0xe1, 0xc4, 0x15, 0xe1, 0x2c, 0x54, + 0x7f, 0x02, 0x9b, 0x49, 0x53, 0xc0, 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x2a, 0x9b, 0x04, 0x79, 0x9b, + 0xc8, 0x61, 0xf4, 0x14, 0x90, 0x8e, 0xa5, 0x8c, 0x55, 0xec, 0x2b, 0xb0, 0x46, 0x38, 0xee, 0xcf, + 0x82, 0x97, 0xee, 0xcc, 0xc1, 0xe3, 0x57, 0xcf, 0x30, 0x21, 0xee, 0x14, 0x9f, 0x87, 0x31, 0x55, + 0x6e, 0x19, 0x4f, 0x56, 0x86, 0x39, 0x6a, 0x43, 0x35, 0x08, 0x63, 0x86, 0xbc, 0xee, 0xd0, 0x9f, + 0xf6, 0x39, 0x7c, 0xb0, 0x74, 0xa7, 0x52, 0xd0, 0xff, 0x5d, 0x85, 0xed, 0x5e, 0xe0, 0xbf, 0xc2, + 0x11, 0x61, 0xbb, 0x32, 0x26, 0xbd, 0xf6, 0x71, 0xa4, 0xe4, 0x26, 0x59, 0x84, 0x3e, 0x86, 0x96, + 0x3c, 0x23, 0x85, 0xae, 0x49, 0x29, 0x9f, 0x19, 0x44, 0x32, 0x3d, 0x4f, 0x95, 0x90, 0x24, 0x34, + 0x83, 0xca, 0x33, 0x9e, 0xbf, 0x0d, 0x31, 0xcb, 0xd6, 0x75, 0x27, 0x27, 0xa7, 0x36, 0x14, 0x80, + 0xea, 0xdc, 0x86, 0x02, 0x8b, 0x09, 0x1b, 0xfd, 0x28, 0x58, 0x84, 0x83, 0x13, 0xf3, 0x1e, 0xeb, + 0x48, 0x9a, 0x54, 0x8f, 0x17, 0x7e, 0x84, 0xdd, 0x49, 0x8f, 0x06, 0x9d, 0xb9, 0xc1, 0x16, 0x96, + 0x45, 0x34, 0x4e, 0x4f, 0x22, 0xf7, 0x32, 0x7e, 0x8e, 0xdf, 0xc4, 0xcf, 0xbd, 0x39, 0x36, 0x37, + 0x3b, 0xc6, 0x41, 0xd5, 0x51, 0x85, 0x94, 0x61, 0x03, 0x32, 0xf4, 0x7c, 0x1f, 0x4f, 0xcc, 0xad, + 0x8e, 0x71, 0xb0, 0xe9, 0xa4, 0x6d, 0x64, 0xc3, 0xf6, 0x71, 0x1c, 0xbb, 0xe3, 0x2b, 0x3c, 0x61, + 0xd4, 0x05, 0x06, 0x41, 0x91, 0xd1, 0x5d, 0x06, 0x64, 0x18, 0x79, 0xaf, 0xdc, 0x18, 0xf7, 0xae, + 0xdc, 0xd8, 0x6c, 0xb0, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, 0xc7, 0xcc, 0x0c, 0xdb, 0x1c, + 0xad, 0x24, 0xa2, 0x7b, 0x0d, 0xc8, 0x59, 0x10, 0x0f, 0x7c, 0x26, 0x35, 0x9b, 0x6c, 0x19, 0x45, + 0x86, 0x5a, 0x50, 0x39, 0x7d, 0x63, 0xb6, 0x18, 0x8a, 0xca, 0xe9, 0x1b, 0xfb, 0x2f, 0x06, 0xa0, + 0x11, 0x8e, 0x65, 0x6b, 0x52, 0x42, 0x7e, 0x4f, 0x75, 0xb9, 0xe0, 0x09, 0x4a, 0x78, 0x22, 0x0d, + 0x56, 0xa9, 0xf1, 0x08, 0xda, 0x7e, 0x10, 0x7b, 0x97, 0xde, 0x38, 0x73, 0x58, 0x85, 0x3b, 0x4c, + 0x97, 0xaf, 0x91, 0x90, 0xfa, 0x70, 0x3f, 0x87, 0xad, 0x14, 0x85, 0xff, 0x69, 0x40, 0x7b, 0x84, + 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, 0xeb, 0x59, 0xa5, 0x9e, 0xb7, + 0xca, 0x29, 0xec, 0x6a, 0xba, 0x94, 0xb2, 0xc9, 0xaf, 0x0c, 0x40, 0xfd, 0xbc, 0xe7, 0xf3, 0x3a, + 0x1b, 0x85, 0x3a, 0x6b, 0xd6, 0xab, 0xe4, 0xad, 0xb7, 0xda, 0xbf, 0x5f, 0xc0, 0xfd, 0xfe, 0x5d, + 0xf8, 0x37, 0x47, 0xd7, 0xca, 0x7a, 0x74, 0xb5, 0x7f, 0x63, 0xe4, 0x10, 0x90, 0xf5, 0xa8, 0x41, + 0xab, 0x1c, 0xc5, 0x20, 0x44, 0x54, 0x47, 0xba, 0x78, 0x0d, 0x33, 0xfc, 0xda, 0x80, 0xbd, 0x3c, + 0x8a, 0x52, 0x86, 0xf8, 0x3e, 0x34, 0x95, 0x65, 0x44, 0x41, 0x53, 0x64, 0x09, 0x75, 0xa0, 0xfd, + 0x73, 0x78, 0xc0, 0xeb, 0xc5, 0x12, 0xc6, 0xd0, 0x54, 0xac, 0xe4, 0x55, 0xfc, 0x9d, 0x01, 0xfb, + 0x85, 0xcb, 0xbf, 0x63, 0x2d, 0xff, 0x61, 0x80, 0xd9, 0x75, 0xe3, 0xf1, 0xd5, 0xa8, 0xc0, 0xeb, + 0xb9, 0x65, 0x8d, 0x35, 0x97, 0x5d, 0x23, 0x18, 0x8a, 0x52, 0x40, 0x75, 0xbd, 0x14, 0x50, 0x2b, + 0x0a, 0x9c, 0xf7, 0x97, 0x68, 0x51, 0xca, 0x9e, 0x26, 0x6c, 0x8c, 0x16, 0xe3, 0x31, 0x26, 0x09, + 0x89, 0x93, 0x26, 0x3d, 0x54, 0xf9, 0x55, 0x85, 0x95, 0x71, 0x5b, 0x8e, 0x68, 0xd9, 0x03, 0x68, + 0x3a, 0x98, 0x78, 0x53, 0x9f, 0xaa, 0x27, 0x2a, 0x18, 0xa6, 0xe9, 0x24, 0xa9, 0x60, 0x78, 0x6b, + 0x0d, 0x6a, 0x74, 0xa1, 0x25, 0x2f, 0x55, 0x2a, 0x97, 0xfd, 0x38, 0xad, 0x94, 0xbb, 0x6f, 0x07, + 0x93, 0xdb, 0xe1, 0xf9, 0xd2, 0x80, 0x1a, 0x1d, 0x4c, 0x8f, 0xd3, 0x61, 0x14, 0x5c, 0x7a, 0x33, + 0x3c, 0xbc, 0x0a, 0xe2, 0x40, 0x2c, 0xa4, 0xc8, 0xe8, 0xd1, 0x7f, 0xe6, 0x8d, 0xaf, 0x7d, 0x77, + 0x8e, 0x93, 0xe2, 0x32, 0x69, 0x4b, 0x10, 0xaa, 0x0a, 0x84, 0x87, 0x00, 0xbd, 0x08, 0xbb, 0x31, + 0x66, 0x15, 0x05, 0xf7, 0xae, 0x24, 0xa1, 0xde, 0x18, 0x90, 0xee, 0x2c, 0x18, 0x5f, 0xb3, 0xec, + 0xbf, 0xe9, 0x24, 0x4d, 0x7b, 0x9c, 0xd6, 0xe7, 0x5c, 0xcd, 0x92, 0x57, 0x3a, 0x76, 0x83, 0x17, + 0x39, 0x12, 0xf8, 0x58, 0x66, 0x7b, 0x26, 0xb7, 0xff, 0x64, 0xc0, 0xae, 0xd8, 0x85, 0x74, 0xdf, + 0x9e, 0xb9, 0x73, 0x2c, 0x2e, 0xa3, 0x54, 0x42, 0x9b, 0xc9, 0x65, 0x34, 0x69, 0xa3, 0x13, 0x80, + 0xa1, 0x3b, 0xf5, 0x7c, 0x39, 0xf7, 0x7e, 0x54, 0x50, 0x9c, 0x3b, 0xf8, 0xf3, 0x05, 0x26, 0x71, + 0x36, 0xd6, 0x91, 0xe6, 0xad, 0x91, 0x27, 0xff, 0xcc, 0x4f, 0x2c, 0x05, 0x19, 0x09, 0x51, 0x07, + 0xea, 0x14, 0x78, 0x12, 0xae, 0xb2, 0x46, 0xbc, 0x03, 0x9d, 0x16, 0x00, 0xfc, 0x7a, 0x21, 0x40, + 0x12, 0x06, 0x3e, 0xc1, 0x4b, 0x10, 0x26, 0x36, 0x58, 0xcc, 0x89, 0x88, 0xdd, 0xb4, 0x6d, 0xff, + 0xcd, 0x80, 0xed, 0xe3, 0x59, 0xcc, 0xe3, 0xfd, 0x56, 0x04, 0xa4, 0x23, 0x86, 0x57, 0x81, 0x8f, + 0xcf, 0x16, 0xf3, 0x97, 0x38, 0x62, 0x3b, 0x55, 0x1d, 0x59, 0xa4, 0xb0, 0xae, 0xa6, 0xb1, 0x6e, + 0x0f, 0xea, 0xa7, 0x73, 0xd7, 0x9b, 0x89, 0xca, 0x81, 0x37, 0xa4, 0x4b, 0xd0, 0x44, 0x54, 0xc1, + 0x69, 0xdb, 0x3e, 0x86, 0xa6, 0x84, 0xbc, 0x0c, 0xa7, 0xec, 0x3f, 0x1a, 0xd0, 0x48, 0x3c, 0x93, + 0x1c, 0x19, 0x92, 0x92, 0x46, 0x5e, 0xc9, 0xbb, 0xe1, 0x8c, 0xcc, 0xca, 0xaa, 0xca, 0x4a, 0xfb, + 0xef, 0x06, 0x6c, 0x67, 0x98, 0x6e, 0x19, 0x2a, 0xd5, 0xa2, 0x50, 0xd1, 0x78, 0x55, 0xbd, 0x0b, + 0x5e, 0xd5, 0x34, 0x5e, 0x7d, 0x69, 0x00, 0x1c, 0x4f, 0x26, 0x09, 0xab, 0x56, 0x1b, 0x56, 0x63, + 0x8f, 0xe0, 0x97, 0xcc, 0x9e, 0x65, 0x79, 0x09, 0x41, 0x4d, 0x62, 0x14, 0xfb, 0xad, 0xf0, 0xa6, + 0xae, 0xf1, 0xe6, 0x53, 0x68, 0xa4, 0xc8, 0x4a, 0xb1, 0xe6, 0x0f, 0x06, 0x6c, 0xb3, 0xc4, 0xb6, + 0x2a, 0x66, 0x3e, 0x86, 0xd6, 0xa9, 0x3f, 0x39, 0xf1, 0x88, 0xfb, 0x72, 0xc6, 0xb3, 0xa6, 0xa8, + 0xc3, 0x55, 0xe9, 0xea, 0x14, 0xa2, 0xe8, 0x53, 0xcb, 0xc7, 0x81, 0x84, 0xa6, 0x94, 0x46, 0x97, + 0xd0, 0x7a, 0xe1, 0xaf, 0xa5, 0xd2, 0xea, 0x34, 0x20, 0x43, 0xad, 0x6a, 0x50, 0x7b, 0xb0, 0xa3, + 0xec, 0x53, 0x0a, 0xec, 0x5f, 0x0d, 0xf6, 0x44, 0x98, 0x2e, 0xc3, 0x22, 0x57, 0x8d, 0x4b, 0xe3, + 0x6e, 0x72, 0x79, 0x81, 0x76, 0xb6, 0xe4, 0xfa, 0xb3, 0xc5, 0x5c, 0xe4, 0x53, 0x45, 0x66, 0x7f, + 0x01, 0x5b, 0x69, 0x9b, 0xc6, 0x22, 0xfd, 0x2f, 0x20, 0x29, 0xb1, 0xc8, 0xfa, 0x1f, 0x41, 0xbb, + 0x8b, 0xa7, 0x9e, 0x9f, 0x67, 0x49, 0x4e, 0x5e, 0xc0, 0xa7, 0x6a, 0x11, 0x9f, 0xec, 0x7f, 0xf1, + 0xa3, 0x50, 0xb6, 0x50, 0xa9, 0x3c, 0x72, 0x04, 0x90, 0xad, 0x21, 0xb2, 0xc9, 0x0e, 0x9f, 0x91, + 0x39, 0x51, 0x1a, 0xf2, 0x2e, 0x12, 0xcb, 0x90, 0xdd, 0x7c, 0xd2, 0x3d, 0x93, 0xba, 0x69, 0x1f, + 0x36, 0x68, 0xf3, 0xc2, 0xfb, 0xff, 0x0b, 0xa7, 0x53, 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, + 0xa6, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, 0xec, 0x4b, 0x68, 0x66, 0x4f, 0xef, 0xb7, + 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe5, 0xcf, 0x0b, 0xe5, 0x1c, 0xfb, 0xf8, 0xbf, 0x0d, 0x7e, 0x42, + 0xa0, 0x4f, 0xd2, 0xf3, 0x8f, 0xbd, 0xe8, 0xec, 0xf1, 0x59, 0xea, 0xeb, 0xad, 0xf5, 0x5e, 0x81, + 0x94, 0x84, 0xa8, 0x07, 0x2d, 0xf5, 0x89, 0x11, 0xed, 0x0b, 0x76, 0xeb, 0x8f, 0xa0, 0x96, 0x59, + 0xdc, 0x41, 0x42, 0xf4, 0x0b, 0xd8, 0x5f, 0xf2, 0xea, 0x87, 0x3a, 0x7c, 0xd2, 0xf2, 0xe7, 0x47, + 0xeb, 0xc3, 0x15, 0x23, 0x48, 0x48, 0x15, 0x94, 0x3e, 0x88, 0x24, 0x0a, 0xaa, 0xdf, 0x67, 0x12, + 0x05, 0xf5, 0x2f, 0x27, 0x3f, 0x64, 0x07, 0x71, 0xfa, 0x29, 0x02, 0x65, 0x76, 0x90, 0xbf, 0x77, + 0x58, 0x0f, 0x8a, 0xc4, 0x7c, 0xba, 0xfc, 0x12, 0x9f, 0x4c, 0xd7, 0xbe, 0x3b, 0x24, 0xd3, 0x73, + 0x9f, 0x04, 0x9e, 0xb2, 0xa2, 0x59, 0x79, 0xa5, 0x32, 0xd3, 0x9d, 0xb4, 0xd7, 0x0f, 0xeb, 0xfd, + 0x25, 0x3d, 0x24, 0x44, 0x0e, 0x0b, 0x18, 0xfd, 0x06, 0x8b, 0xbe, 0x22, 0xa3, 0xd6, 0xaf, 0x94, + 0xd6, 0x57, 0x6f, 0xe8, 0x25, 0x21, 0x1a, 0xb0, 0x0c, 0xac, 0x2e, 0x58, 0x0c, 0x81, 0xad, 0x66, + 0x2d, 0xeb, 0x22, 0x21, 0xfa, 0x29, 0xbc, 0x57, 0x78, 0x25, 0x44, 0x0f, 0x45, 0xac, 0x2d, 0xb9, + 0xf5, 0x5a, 0x5f, 0xbb, 0xb1, 0x9f, 0x1b, 0x70, 0x54, 0x6c, 0xc0, 0xd1, 0x52, 0x03, 0x16, 0x3d, + 0xdb, 0x7d, 0x06, 0x4d, 0xe5, 0xdd, 0x0a, 0x3d, 0x48, 0xc7, 0x2a, 0x0f, 0x73, 0xd6, 0x7e, 0xa1, + 0x9c, 0x93, 0x50, 0xba, 0xff, 0x68, 0x51, 0x26, 0x32, 0x98, 0x16, 0x65, 0x69, 0x16, 0xea, 0xa5, + 0x57, 0x44, 0x71, 0x77, 0x48, 0xa2, 0x2c, 0x77, 0xd7, 0xb1, 0xcc, 0xe2, 0x0e, 0x12, 0xa2, 0x27, + 0xec, 0x63, 0x91, 0xb8, 0xab, 0xa2, 0xfb, 0x7c, 0x9c, 0x72, 0x11, 0xb6, 0xf6, 0xf2, 0x42, 0x12, + 0xa2, 0xef, 0xc2, 0x56, 0x5a, 0x63, 0x23, 0xf1, 0xa0, 0x20, 0x5f, 0x17, 0xac, 0xfb, 0x39, 0x19, + 0x09, 0xd1, 0xb7, 0x61, 0x33, 0x01, 0x81, 0x76, 0x55, 0x50, 0x74, 0x0e, 0xd2, 0x45, 0x24, 0x44, + 0x87, 0xb0, 0x21, 0x8a, 0x32, 0x24, 0x52, 0x57, 0x56, 0x3d, 0x5a, 0xbb, 0x9a, 0x84, 0x03, 0xcb, + 0xce, 0x58, 0xa4, 0xa7, 0xe5, 0x0c, 0x98, 0x5a, 0x6c, 0x7c, 0x02, 0x0d, 0xa9, 0xfe, 0x48, 0x1c, + 0xa1, 0x96, 0x3e, 0x89, 0x23, 0xf4, 0x42, 0xe5, 0x33, 0x68, 0x2a, 0x67, 0x2a, 0xca, 0xe2, 0x5e, + 0x29, 0x45, 0xac, 0xfd, 0x42, 0x79, 0x1a, 0x35, 0xca, 0x41, 0x23, 0x45, 0x8d, 0x7e, 0xa4, 0x49, + 0x51, 0x93, 0x3f, 0x9b, 0x9e, 0x00, 0x64, 0xd9, 0x2a, 0x71, 0xa8, 0x72, 0xfc, 0x58, 0x7b, 0x79, + 0x21, 0x09, 0xbb, 0xcd, 0x9f, 0x35, 0x0e, 0xd9, 0x57, 0xf1, 0x1f, 0xd0, 0x3f, 0x2f, 0xef, 0xb1, + 0x4f, 0xde, 0xdf, 0xf9, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x77, 0x7a, 0xcc, 0x2e, 0x1f, 0x00, 0x00, } diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 3b14ad177..8cbe2f708 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -1,6 +1,5 @@ syntax = "proto3"; import "Open_IM/pkg/proto/sdk_ws/ws.proto"; -import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; option go_package = "./user;user"; package user; @@ -63,7 +62,6 @@ message UpdateUserInfoReq{ server_api_params.UserInfo UserInfo = 1; string OpUserID = 2; string operationID = 3; - google.protobuf.Int32Value globalRecvMsgOpt = 4; } message UpdateUserInfoResp{ CommonResp commonResp = 1; From e9ac9faa496eb9028847a7eb2fd5222c9066946a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 19:12:50 +0800 Subject: [PATCH 238/256] user proto modify --- pkg/proto/user/user.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 8cbe2f708..fa7025b28 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -69,7 +69,7 @@ message UpdateUserInfoResp{ message SetGlobalRecvMessageOptReq{ string userID = 1; string operationID = 2; - int32 opt = 3; + int32 globalRecvMsgOpt = 3; } message SetGlobalRecvMessageOptResp{ CommonResp commonResp = 1; From 7bbf2b200bbe2e5027dd1852fd2bfa7ce2d6bcc1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 19:18:17 +0800 Subject: [PATCH 239/256] fix bug --- pkg/proto/user/user.pb.go | 346 +++++++++++++++++++------------------- 1 file changed, 173 insertions(+), 173 deletions(-) diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index f833cefc7..41e69b7f9 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{0} + return fileDescriptor_user_f1112695e0d68005, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -83,7 +83,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{1} + return fileDescriptor_user_f1112695e0d68005, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -136,7 +136,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{2} + return fileDescriptor_user_f1112695e0d68005, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -182,7 +182,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{3} + return fileDescriptor_user_f1112695e0d68005, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -228,7 +228,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{4} + return fileDescriptor_user_f1112695e0d68005, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{5} + return fileDescriptor_user_f1112695e0d68005, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -328,7 +328,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{6} + return fileDescriptor_user_f1112695e0d68005, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -374,7 +374,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{6, 0} + return fileDescriptor_user_f1112695e0d68005, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -421,7 +421,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{7} + return fileDescriptor_user_f1112695e0d68005, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -474,7 +474,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{8} + return fileDescriptor_user_f1112695e0d68005, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -521,7 +521,7 @@ func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{9} + return fileDescriptor_user_f1112695e0d68005, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -573,7 +573,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{10} + return fileDescriptor_user_f1112695e0d68005, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -603,7 +603,7 @@ func (m *UpdateUserInfoResp) GetCommonResp() *CommonResp { type SetGlobalRecvMessageOptReq struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"` - Opt int32 `protobuf:"varint,3,opt,name=opt" json:"opt,omitempty"` + GlobalRecvMsgOpt int32 `protobuf:"varint,3,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -613,7 +613,7 @@ func (m *SetGlobalRecvMessageOptReq) Reset() { *m = SetGlobalRecvMessage func (m *SetGlobalRecvMessageOptReq) String() string { return proto.CompactTextString(m) } func (*SetGlobalRecvMessageOptReq) ProtoMessage() {} func (*SetGlobalRecvMessageOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{11} + return fileDescriptor_user_f1112695e0d68005, []int{11} } func (m *SetGlobalRecvMessageOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGlobalRecvMessageOptReq.Unmarshal(m, b) @@ -647,9 +647,9 @@ func (m *SetGlobalRecvMessageOptReq) GetOperationID() string { return "" } -func (m *SetGlobalRecvMessageOptReq) GetOpt() int32 { +func (m *SetGlobalRecvMessageOptReq) GetGlobalRecvMsgOpt() int32 { if m != nil { - return m.Opt + return m.GlobalRecvMsgOpt } return 0 } @@ -665,7 +665,7 @@ func (m *SetGlobalRecvMessageOptResp) Reset() { *m = SetGlobalRecvMessag func (m *SetGlobalRecvMessageOptResp) String() string { return proto.CompactTextString(m) } func (*SetGlobalRecvMessageOptResp) ProtoMessage() {} func (*SetGlobalRecvMessageOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{12} + return fileDescriptor_user_f1112695e0d68005, []int{12} } func (m *SetGlobalRecvMessageOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGlobalRecvMessageOptResp.Unmarshal(m, b) @@ -716,7 +716,7 @@ func (m *Conversation) Reset() { *m = Conversation{} } func (m *Conversation) String() string { return proto.CompactTextString(m) } func (*Conversation) ProtoMessage() {} func (*Conversation) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{13} + return fileDescriptor_user_f1112695e0d68005, []int{13} } func (m *Conversation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Conversation.Unmarshal(m, b) @@ -847,7 +847,7 @@ func (m *SetConversationReq) Reset() { *m = SetConversationReq{} } func (m *SetConversationReq) String() string { return proto.CompactTextString(m) } func (*SetConversationReq) ProtoMessage() {} func (*SetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{14} + return fileDescriptor_user_f1112695e0d68005, []int{14} } func (m *SetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationReq.Unmarshal(m, b) @@ -899,7 +899,7 @@ func (m *SetConversationResp) Reset() { *m = SetConversationResp{} } func (m *SetConversationResp) String() string { return proto.CompactTextString(m) } func (*SetConversationResp) ProtoMessage() {} func (*SetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{15} + return fileDescriptor_user_f1112695e0d68005, []int{15} } func (m *SetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetConversationResp.Unmarshal(m, b) @@ -941,7 +941,7 @@ func (m *SetRecvMsgOptReq) Reset() { *m = SetRecvMsgOptReq{} } func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptReq) ProtoMessage() {} func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{16} + return fileDescriptor_user_f1112695e0d68005, []int{16} } func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b) @@ -1007,7 +1007,7 @@ func (m *SetRecvMsgOptResp) Reset() { *m = SetRecvMsgOptResp{} } func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) } func (*SetRecvMsgOptResp) ProtoMessage() {} func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{17} + return fileDescriptor_user_f1112695e0d68005, []int{17} } func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b) @@ -1047,7 +1047,7 @@ func (m *GetConversationReq) Reset() { *m = GetConversationReq{} } func (m *GetConversationReq) String() string { return proto.CompactTextString(m) } func (*GetConversationReq) ProtoMessage() {} func (*GetConversationReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{18} + return fileDescriptor_user_f1112695e0d68005, []int{18} } func (m *GetConversationReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationReq.Unmarshal(m, b) @@ -1100,7 +1100,7 @@ func (m *GetConversationResp) Reset() { *m = GetConversationResp{} } func (m *GetConversationResp) String() string { return proto.CompactTextString(m) } func (*GetConversationResp) ProtoMessage() {} func (*GetConversationResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{19} + return fileDescriptor_user_f1112695e0d68005, []int{19} } func (m *GetConversationResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationResp.Unmarshal(m, b) @@ -1147,7 +1147,7 @@ func (m *GetConversationsReq) Reset() { *m = GetConversationsReq{} } func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetConversationsReq) ProtoMessage() {} func (*GetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{20} + return fileDescriptor_user_f1112695e0d68005, []int{20} } func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b) @@ -1200,7 +1200,7 @@ func (m *GetConversationsResp) Reset() { *m = GetConversationsResp{} } func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetConversationsResp) ProtoMessage() {} func (*GetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{21} + return fileDescriptor_user_f1112695e0d68005, []int{21} } func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b) @@ -1246,7 +1246,7 @@ func (m *GetAllConversationsReq) Reset() { *m = GetAllConversationsReq{} func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsReq) ProtoMessage() {} func (*GetAllConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{22} + return fileDescriptor_user_f1112695e0d68005, []int{22} } func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b) @@ -1292,7 +1292,7 @@ func (m *GetAllConversationsResp) Reset() { *m = GetAllConversationsResp func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationsResp) ProtoMessage() {} func (*GetAllConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{23} + return fileDescriptor_user_f1112695e0d68005, []int{23} } func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b) @@ -1340,7 +1340,7 @@ func (m *BatchSetConversationsReq) Reset() { *m = BatchSetConversationsR func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsReq) ProtoMessage() {} func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{24} + return fileDescriptor_user_f1112695e0d68005, []int{24} } func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b) @@ -1401,7 +1401,7 @@ func (m *BatchSetConversationsResp) Reset() { *m = BatchSetConversations func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) } func (*BatchSetConversationsResp) ProtoMessage() {} func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{25} + return fileDescriptor_user_f1112695e0d68005, []int{25} } func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b) @@ -1454,7 +1454,7 @@ func (m *ResignUserReq) Reset() { *m = ResignUserReq{} } func (m *ResignUserReq) String() string { return proto.CompactTextString(m) } func (*ResignUserReq) ProtoMessage() {} func (*ResignUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{26} + return fileDescriptor_user_f1112695e0d68005, []int{26} } func (m *ResignUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserReq.Unmarshal(m, b) @@ -1499,7 +1499,7 @@ func (m *ResignUserResp) Reset() { *m = ResignUserResp{} } func (m *ResignUserResp) String() string { return proto.CompactTextString(m) } func (*ResignUserResp) ProtoMessage() {} func (*ResignUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{27} + return fileDescriptor_user_f1112695e0d68005, []int{27} } func (m *ResignUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResignUserResp.Unmarshal(m, b) @@ -1538,7 +1538,7 @@ func (m *GetUserByIdReq) Reset() { *m = GetUserByIdReq{} } func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetUserByIdReq) ProtoMessage() {} func (*GetUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{28} + return fileDescriptor_user_f1112695e0d68005, []int{28} } func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b) @@ -1587,7 +1587,7 @@ func (m *User) Reset() { *m = User{} } func (m *User) String() string { return proto.CompactTextString(m) } func (*User) ProtoMessage() {} func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{29} + return fileDescriptor_user_f1112695e0d68005, []int{29} } func (m *User) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_User.Unmarshal(m, b) @@ -1654,7 +1654,7 @@ func (m *GetUserByIdResp) Reset() { *m = GetUserByIdResp{} } func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetUserByIdResp) ProtoMessage() {} func (*GetUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{30} + return fileDescriptor_user_f1112695e0d68005, []int{30} } func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b) @@ -1701,7 +1701,7 @@ func (m *GetUsersByNameReq) Reset() { *m = GetUsersByNameReq{} } func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameReq) ProtoMessage() {} func (*GetUsersByNameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{31} + return fileDescriptor_user_f1112695e0d68005, []int{31} } func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b) @@ -1755,7 +1755,7 @@ func (m *GetUsersByNameResp) Reset() { *m = GetUsersByNameResp{} } func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) } func (*GetUsersByNameResp) ProtoMessage() {} func (*GetUsersByNameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{32} + return fileDescriptor_user_f1112695e0d68005, []int{32} } func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b) @@ -1812,7 +1812,7 @@ func (m *AlterUserReq) Reset() { *m = AlterUserReq{} } func (m *AlterUserReq) String() string { return proto.CompactTextString(m) } func (*AlterUserReq) ProtoMessage() {} func (*AlterUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{33} + return fileDescriptor_user_f1112695e0d68005, []int{33} } func (m *AlterUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserReq.Unmarshal(m, b) @@ -1885,7 +1885,7 @@ func (m *AlterUserResp) Reset() { *m = AlterUserResp{} } func (m *AlterUserResp) String() string { return proto.CompactTextString(m) } func (*AlterUserResp) ProtoMessage() {} func (*AlterUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{34} + return fileDescriptor_user_f1112695e0d68005, []int{34} } func (m *AlterUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AlterUserResp.Unmarshal(m, b) @@ -1925,7 +1925,7 @@ func (m *GetUsersReq) Reset() { *m = GetUsersReq{} } func (m *GetUsersReq) String() string { return proto.CompactTextString(m) } func (*GetUsersReq) ProtoMessage() {} func (*GetUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{35} + return fileDescriptor_user_f1112695e0d68005, []int{35} } func (m *GetUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersReq.Unmarshal(m, b) @@ -1980,7 +1980,7 @@ func (m *GetUsersResp) Reset() { *m = GetUsersResp{} } func (m *GetUsersResp) String() string { return proto.CompactTextString(m) } func (*GetUsersResp) ProtoMessage() {} func (*GetUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{36} + return fileDescriptor_user_f1112695e0d68005, []int{36} } func (m *GetUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUsersResp.Unmarshal(m, b) @@ -2043,7 +2043,7 @@ func (m *AddUserReq) Reset() { *m = AddUserReq{} } func (m *AddUserReq) String() string { return proto.CompactTextString(m) } func (*AddUserReq) ProtoMessage() {} func (*AddUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{37} + return fileDescriptor_user_f1112695e0d68005, []int{37} } func (m *AddUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserReq.Unmarshal(m, b) @@ -2109,7 +2109,7 @@ func (m *AddUserResp) Reset() { *m = AddUserResp{} } func (m *AddUserResp) String() string { return proto.CompactTextString(m) } func (*AddUserResp) ProtoMessage() {} func (*AddUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{38} + return fileDescriptor_user_f1112695e0d68005, []int{38} } func (m *AddUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddUserResp.Unmarshal(m, b) @@ -2150,7 +2150,7 @@ func (m *BlockUserReq) Reset() { *m = BlockUserReq{} } func (m *BlockUserReq) String() string { return proto.CompactTextString(m) } func (*BlockUserReq) ProtoMessage() {} func (*BlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{39} + return fileDescriptor_user_f1112695e0d68005, []int{39} } func (m *BlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserReq.Unmarshal(m, b) @@ -2209,7 +2209,7 @@ func (m *BlockUserResp) Reset() { *m = BlockUserResp{} } func (m *BlockUserResp) String() string { return proto.CompactTextString(m) } func (*BlockUserResp) ProtoMessage() {} func (*BlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{40} + return fileDescriptor_user_f1112695e0d68005, []int{40} } func (m *BlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUserResp.Unmarshal(m, b) @@ -2249,7 +2249,7 @@ func (m *UnBlockUserReq) Reset() { *m = UnBlockUserReq{} } func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) } func (*UnBlockUserReq) ProtoMessage() {} func (*UnBlockUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{41} + return fileDescriptor_user_f1112695e0d68005, []int{41} } func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b) @@ -2301,7 +2301,7 @@ func (m *UnBlockUserResp) Reset() { *m = UnBlockUserResp{} } func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) } func (*UnBlockUserResp) ProtoMessage() {} func (*UnBlockUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{42} + return fileDescriptor_user_f1112695e0d68005, []int{42} } func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b) @@ -2341,7 +2341,7 @@ func (m *GetBlockUsersReq) Reset() { *m = GetBlockUsersReq{} } func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersReq) ProtoMessage() {} func (*GetBlockUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{43} + return fileDescriptor_user_f1112695e0d68005, []int{43} } func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b) @@ -2395,7 +2395,7 @@ func (m *BlockUser) Reset() { *m = BlockUser{} } func (m *BlockUser) String() string { return proto.CompactTextString(m) } func (*BlockUser) ProtoMessage() {} func (*BlockUser) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{44} + return fileDescriptor_user_f1112695e0d68005, []int{44} } func (m *BlockUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockUser.Unmarshal(m, b) @@ -2450,7 +2450,7 @@ func (m *GetBlockUsersResp) Reset() { *m = GetBlockUsersResp{} } func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUsersResp) ProtoMessage() {} func (*GetBlockUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{45} + return fileDescriptor_user_f1112695e0d68005, []int{45} } func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b) @@ -2510,7 +2510,7 @@ func (m *GetBlockUserByIdReq) Reset() { *m = GetBlockUserByIdReq{} } func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdReq) ProtoMessage() {} func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{46} + return fileDescriptor_user_f1112695e0d68005, []int{46} } func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b) @@ -2555,7 +2555,7 @@ func (m *GetBlockUserByIdResp) Reset() { *m = GetBlockUserByIdResp{} } func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) } func (*GetBlockUserByIdResp) ProtoMessage() {} func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{47} + return fileDescriptor_user_f1112695e0d68005, []int{47} } func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b) @@ -2595,7 +2595,7 @@ func (m *DeleteUserReq) Reset() { *m = DeleteUserReq{} } func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) } func (*DeleteUserReq) ProtoMessage() {} func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{48} + return fileDescriptor_user_f1112695e0d68005, []int{48} } func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b) @@ -2647,7 +2647,7 @@ func (m *DeleteUserResp) Reset() { *m = DeleteUserResp{} } func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) } func (*DeleteUserResp) ProtoMessage() {} func (*DeleteUserResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_ffbbc34a94bb8978, []int{49} + return fileDescriptor_user_f1112695e0d68005, []int{49} } func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b) @@ -3526,129 +3526,129 @@ var _User_serviceDesc = grpc.ServiceDesc{ Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_ffbbc34a94bb8978) } +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_f1112695e0d68005) } -var fileDescriptor_user_ffbbc34a94bb8978 = []byte{ - // 1922 bytes of a gzipped FileDescriptorProto +var fileDescriptor_user_f1112695e0d68005 = []byte{ + // 1923 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x23, 0x49, 0x15, 0x57, 0xfb, 0x63, 0x92, 0x3c, 0xc7, 0x8e, 0x53, 0x93, 0x9d, 0xf4, 0xf6, 0xc2, 0xe0, 0x6d, 0x2d, 0x4b, 0x34, 0x12, 0x09, 0x0c, 0x88, 0x41, 0x8b, 0x60, 0x37, 0x76, 0x32, 0x96, 0x11, 0x93, 0x58, 0xed, 0x19, 0x09, 0x21, 0x44, 0xd4, 0x63, 0x57, 0x9c, 0x56, 0xec, 0xee, 0xde, 0xae, 0xf6, - 0x7c, 0x70, 0x59, 0xc4, 0xc7, 0x05, 0x71, 0xe1, 0xc4, 0xc2, 0x81, 0xbf, 0x83, 0x3b, 0x9c, 0xf8, - 0x0f, 0xe0, 0xc2, 0x9f, 0xc1, 0x15, 0xd5, 0x47, 0x77, 0x57, 0x55, 0xb7, 0x63, 0xd3, 0x89, 0xe6, - 0x92, 0xb8, 0x5e, 0x7d, 0xfd, 0xde, 0x7b, 0xbf, 0xf7, 0xea, 0x55, 0x35, 0xec, 0x2c, 0x08, 0x8e, - 0x8e, 0xe8, 0x9f, 0xc3, 0x30, 0x0a, 0xe2, 0x00, 0xd5, 0xe8, 0x6f, 0xeb, 0xc3, 0xf3, 0x10, 0xfb, - 0x17, 0x83, 0x67, 0x47, 0xe1, 0xf5, 0xf4, 0x88, 0x75, 0x1c, 0x91, 0xc9, 0xf5, 0xc5, 0x6b, 0x72, - 0xf4, 0x9a, 0xf0, 0x81, 0xf6, 0x8f, 0x00, 0x7a, 0xc1, 0x7c, 0x1e, 0xf8, 0x0e, 0x26, 0x21, 0x32, - 0x61, 0x03, 0x47, 0x51, 0x2f, 0x98, 0x60, 0xd3, 0xe8, 0x18, 0x07, 0x75, 0x27, 0x69, 0xa2, 0x07, - 0x70, 0x0f, 0x47, 0xd1, 0x33, 0x32, 0x35, 0x2b, 0x1d, 0xe3, 0x60, 0xcb, 0x11, 0x2d, 0xfb, 0x97, - 0xd0, 0x3a, 0xc1, 0x33, 0x1c, 0xe3, 0x17, 0x04, 0x47, 0xc4, 0xc1, 0x9f, 0xa3, 0x47, 0xd0, 0xce, - 0x24, 0x83, 0x93, 0x9f, 0x78, 0x24, 0x36, 0x2b, 0x9d, 0xea, 0xc1, 0x96, 0x93, 0x93, 0x23, 0x0b, - 0x36, 0xcf, 0x43, 0xde, 0x36, 0xab, 0x6c, 0xdd, 0xb4, 0x8d, 0x3a, 0xd0, 0x38, 0x0f, 0x71, 0xe4, - 0xc6, 0x5e, 0xe0, 0x0f, 0x4e, 0xcc, 0x1a, 0xeb, 0x96, 0x45, 0x76, 0x00, 0x3b, 0xca, 0xde, 0x24, - 0x44, 0xdf, 0x92, 0xd5, 0x61, 0x3a, 0x34, 0x1e, 0xb7, 0x0f, 0x99, 0x61, 0x32, 0xb9, 0x23, 0xab, - 0xfc, 0x08, 0xda, 0x4f, 0x5d, 0x6f, 0x86, 0x27, 0x79, 0xb8, 0xba, 0xdc, 0x3e, 0x87, 0x9d, 0x3e, - 0x8e, 0x8f, 0x67, 0x33, 0x2e, 0xa3, 0xda, 0x5a, 0xb0, 0x19, 0x24, 0x1a, 0x18, 0x5c, 0x83, 0x40, - 0xd2, 0x20, 0x90, 0x34, 0xe0, 0x86, 0x93, 0x45, 0xf6, 0x04, 0xda, 0xea, 0x82, 0xa5, 0x54, 0x78, - 0x08, 0x90, 0x03, 0x2f, 0x49, 0xec, 0xb7, 0xb0, 0x73, 0x3c, 0x1e, 0x07, 0x0b, 0x3f, 0xee, 0x5d, - 0xe1, 0xf1, 0x35, 0x85, 0x7d, 0x00, 0x3b, 0xec, 0xb7, 0x34, 0xcf, 0x60, 0xf3, 0x74, 0xb1, 0xe2, - 0xa2, 0xca, 0xcd, 0x2e, 0xaa, 0xe6, 0x5d, 0xf4, 0x1f, 0x03, 0xda, 0xea, 0xde, 0x5c, 0xc3, 0xf1, - 0x1a, 0x1a, 0x66, 0x63, 0x50, 0x1f, 0xc0, 0xc1, 0x64, 0x31, 0x8b, 0x53, 0x0d, 0x1b, 0x8f, 0xbf, - 0xc1, 0x67, 0xe8, 0xab, 0x1f, 0x8e, 0x3c, 0x7f, 0x3a, 0x63, 0x94, 0x18, 0xc5, 0x6e, 0xbc, 0x20, + 0x7c, 0x70, 0x59, 0xb4, 0xc0, 0x05, 0x71, 0xe1, 0xc4, 0xc0, 0x81, 0xbf, 0x83, 0x3b, 0x9c, 0xf8, + 0x0f, 0xe0, 0xc2, 0x9f, 0xc1, 0x15, 0xd5, 0x47, 0x77, 0x57, 0x55, 0xb7, 0x63, 0x6f, 0x67, 0x34, + 0x97, 0xc4, 0xf5, 0xea, 0xa3, 0xdf, 0xef, 0xbd, 0xdf, 0x7b, 0xf5, 0xaa, 0x0a, 0x76, 0x16, 0x04, + 0x47, 0x47, 0xf4, 0xcf, 0x61, 0x18, 0x05, 0x71, 0x80, 0x6a, 0xf4, 0xb7, 0xf5, 0xe1, 0x79, 0x88, + 0xfd, 0x8b, 0xc1, 0x93, 0xa3, 0xf0, 0x7a, 0x7a, 0xc4, 0x3a, 0x8e, 0xc8, 0xe4, 0xfa, 0xe2, 0x25, + 0x39, 0x7a, 0x49, 0xf8, 0x40, 0xfb, 0x27, 0x00, 0xbd, 0x60, 0x3e, 0x0f, 0x7c, 0x07, 0x93, 0x10, + 0x99, 0xb0, 0x81, 0xa3, 0xa8, 0x17, 0x4c, 0xb0, 0x69, 0x74, 0x8c, 0x83, 0xba, 0x93, 0x34, 0xd1, + 0x3d, 0xb8, 0x83, 0xa3, 0xe8, 0x09, 0x99, 0x9a, 0x95, 0x8e, 0x71, 0xb0, 0xe5, 0x88, 0x96, 0xfd, + 0x6b, 0x68, 0x9d, 0xe0, 0x19, 0x8e, 0xf1, 0x33, 0x82, 0x23, 0xe2, 0xe0, 0xcf, 0xd1, 0x03, 0x68, + 0x67, 0x92, 0xc1, 0xc9, 0xcf, 0x3c, 0x12, 0x9b, 0x95, 0x4e, 0xf5, 0x60, 0xcb, 0xc9, 0xc9, 0x91, + 0x05, 0x9b, 0xe7, 0x21, 0x6f, 0x9b, 0x55, 0xb6, 0x6e, 0xda, 0x46, 0x1d, 0x68, 0x9c, 0x87, 0x38, + 0x72, 0x63, 0x2f, 0xf0, 0x07, 0x27, 0x66, 0x8d, 0x75, 0xcb, 0x22, 0x3b, 0x80, 0x1d, 0xe5, 0xdb, + 0x24, 0x44, 0xdf, 0x91, 0xe1, 0x30, 0x0c, 0x8d, 0x87, 0xed, 0x43, 0x66, 0x98, 0x4c, 0xee, 0xc8, + 0x90, 0x1f, 0x40, 0xfb, 0xb1, 0xeb, 0xcd, 0xf0, 0x24, 0xaf, 0xae, 0x2e, 0xb7, 0xcf, 0x61, 0xa7, + 0x8f, 0xe3, 0xe3, 0xd9, 0x8c, 0xcb, 0x28, 0x5a, 0x0b, 0x36, 0x83, 0x04, 0x81, 0xc1, 0x11, 0x04, + 0x12, 0x82, 0x40, 0x42, 0xc0, 0x0d, 0x27, 0x8b, 0xec, 0x09, 0xb4, 0xd5, 0x05, 0x4b, 0x41, 0xb8, + 0x0f, 0x90, 0x53, 0x5e, 0x92, 0xd8, 0xaf, 0x61, 0xe7, 0x78, 0x3c, 0x0e, 0x16, 0x7e, 0xdc, 0xbb, + 0xc2, 0xe3, 0x6b, 0xaa, 0xf6, 0x01, 0xec, 0xb0, 0xdf, 0xd2, 0x3c, 0x83, 0xcd, 0xd3, 0xc5, 0x8a, + 0x8b, 0x2a, 0x37, 0xbb, 0xa8, 0x9a, 0x77, 0xd1, 0x7f, 0x0d, 0x68, 0xab, 0xdf, 0xe6, 0x08, 0xc7, + 0x6b, 0x20, 0xcc, 0xc6, 0xa0, 0x3e, 0x80, 0x83, 0xc9, 0x62, 0x16, 0xa7, 0x08, 0x1b, 0x0f, 0xbf, + 0xc5, 0x67, 0xe8, 0xab, 0x1f, 0x8e, 0x3c, 0x7f, 0x3a, 0x63, 0x94, 0x18, 0xc5, 0x6e, 0xbc, 0x20, 0x8e, 0x34, 0xd5, 0x1a, 0x42, 0x5b, 0xef, 0xa7, 0xd4, 0x5e, 0xc8, 0x0e, 0x14, 0x2d, 0xf4, 0x11, - 0x34, 0x5d, 0xbe, 0x38, 0x1f, 0x28, 0xd4, 0x57, 0x85, 0xb6, 0x0f, 0xad, 0x3e, 0x8e, 0x99, 0x41, - 0xfc, 0xcb, 0x80, 0xda, 0xf6, 0x21, 0xc0, 0x42, 0x37, 0xab, 0x24, 0xb9, 0xa5, 0x45, 0x7f, 0x6b, - 0x30, 0x12, 0x66, 0x1b, 0x96, 0x32, 0xe8, 0xa7, 0xb0, 0x9d, 0xac, 0xc0, 0x50, 0x56, 0x99, 0x49, - 0x3f, 0x38, 0x24, 0x38, 0x7a, 0x85, 0xa3, 0x0b, 0x37, 0xf4, 0x2e, 0x42, 0x37, 0x72, 0xe7, 0xe4, - 0x30, 0xdd, 0x48, 0x99, 0x60, 0xff, 0xde, 0x80, 0xdd, 0x17, 0xe1, 0xc4, 0x15, 0xe1, 0x2c, 0x54, - 0x7f, 0x02, 0x9b, 0x49, 0x53, 0xc0, 0xb8, 0x71, 0xc9, 0x74, 0xf0, 0x2a, 0x9b, 0x04, 0x79, 0x9b, - 0xc8, 0x61, 0xf4, 0x14, 0x90, 0x8e, 0xa5, 0x8c, 0x55, 0xec, 0x2b, 0xb0, 0x46, 0x38, 0xee, 0xcf, - 0x82, 0x97, 0xee, 0xcc, 0xc1, 0xe3, 0x57, 0xcf, 0x30, 0x21, 0xee, 0x14, 0x9f, 0x87, 0x31, 0x55, - 0x6e, 0x19, 0x4f, 0x56, 0x86, 0x39, 0x6a, 0x43, 0x35, 0x08, 0x63, 0x86, 0xbc, 0xee, 0xd0, 0x9f, - 0xf6, 0x39, 0x7c, 0xb0, 0x74, 0xa7, 0x52, 0xd0, 0xff, 0x5d, 0x85, 0xed, 0x5e, 0xe0, 0xbf, 0xc2, - 0x11, 0x61, 0xbb, 0x32, 0x26, 0xbd, 0xf6, 0x71, 0xa4, 0xe4, 0x26, 0x59, 0x84, 0x3e, 0x86, 0x96, - 0x3c, 0x23, 0x85, 0xae, 0x49, 0x29, 0x9f, 0x19, 0x44, 0x32, 0x3d, 0x4f, 0x95, 0x90, 0x24, 0x34, - 0x83, 0xca, 0x33, 0x9e, 0xbf, 0x0d, 0x31, 0xcb, 0xd6, 0x75, 0x27, 0x27, 0xa7, 0x36, 0x14, 0x80, - 0xea, 0xdc, 0x86, 0x02, 0x8b, 0x09, 0x1b, 0xfd, 0x28, 0x58, 0x84, 0x83, 0x13, 0xf3, 0x1e, 0xeb, - 0x48, 0x9a, 0x54, 0x8f, 0x17, 0x7e, 0x84, 0xdd, 0x49, 0x8f, 0x06, 0x9d, 0xb9, 0xc1, 0x16, 0x96, - 0x45, 0x34, 0x4e, 0x4f, 0x22, 0xf7, 0x32, 0x7e, 0x8e, 0xdf, 0xc4, 0xcf, 0xbd, 0x39, 0x36, 0x37, - 0x3b, 0xc6, 0x41, 0xd5, 0x51, 0x85, 0x94, 0x61, 0x03, 0x32, 0xf4, 0x7c, 0x1f, 0x4f, 0xcc, 0xad, - 0x8e, 0x71, 0xb0, 0xe9, 0xa4, 0x6d, 0x64, 0xc3, 0xf6, 0x71, 0x1c, 0xbb, 0xe3, 0x2b, 0x3c, 0x61, - 0xd4, 0x05, 0x06, 0x41, 0x91, 0xd1, 0x5d, 0x06, 0x64, 0x18, 0x79, 0xaf, 0xdc, 0x18, 0xf7, 0xae, - 0xdc, 0xd8, 0x6c, 0xb0, 0x45, 0x54, 0x21, 0x45, 0xcb, 0x80, 0x1f, 0xc7, 0xcc, 0x0c, 0xdb, 0x1c, - 0xad, 0x24, 0xa2, 0x7b, 0x0d, 0xc8, 0x59, 0x10, 0x0f, 0x7c, 0x26, 0x35, 0x9b, 0x6c, 0x19, 0x45, - 0x86, 0x5a, 0x50, 0x39, 0x7d, 0x63, 0xb6, 0x18, 0x8a, 0xca, 0xe9, 0x1b, 0xfb, 0x2f, 0x06, 0xa0, - 0x11, 0x8e, 0x65, 0x6b, 0x52, 0x42, 0x7e, 0x4f, 0x75, 0xb9, 0xe0, 0x09, 0x4a, 0x78, 0x22, 0x0d, - 0x56, 0xa9, 0xf1, 0x08, 0xda, 0x7e, 0x10, 0x7b, 0x97, 0xde, 0x38, 0x73, 0x58, 0x85, 0x3b, 0x4c, - 0x97, 0xaf, 0x91, 0x90, 0xfa, 0x70, 0x3f, 0x87, 0xad, 0x14, 0x85, 0xff, 0x69, 0x40, 0x7b, 0x84, - 0xe3, 0x8c, 0x59, 0x54, 0xc7, 0x77, 0x4a, 0xe3, 0x9c, 0x55, 0x6a, 0xeb, 0x59, 0xa5, 0x9e, 0xb7, - 0xca, 0x29, 0xec, 0x6a, 0xba, 0x94, 0xb2, 0xc9, 0xaf, 0x0c, 0x40, 0xfd, 0xbc, 0xe7, 0xf3, 0x3a, - 0x1b, 0x85, 0x3a, 0x6b, 0xd6, 0xab, 0xe4, 0xad, 0xb7, 0xda, 0xbf, 0x5f, 0xc0, 0xfd, 0xfe, 0x5d, - 0xf8, 0x37, 0x47, 0xd7, 0xca, 0x7a, 0x74, 0xb5, 0x7f, 0x63, 0xe4, 0x10, 0x90, 0xf5, 0xa8, 0x41, - 0xab, 0x1c, 0xc5, 0x20, 0x44, 0x54, 0x47, 0xba, 0x78, 0x0d, 0x33, 0xfc, 0xda, 0x80, 0xbd, 0x3c, - 0x8a, 0x52, 0x86, 0xf8, 0x3e, 0x34, 0x95, 0x65, 0x44, 0x41, 0x53, 0x64, 0x09, 0x75, 0xa0, 0xfd, - 0x73, 0x78, 0xc0, 0xeb, 0xc5, 0x12, 0xc6, 0xd0, 0x54, 0xac, 0xe4, 0x55, 0xfc, 0x9d, 0x01, 0xfb, - 0x85, 0xcb, 0xbf, 0x63, 0x2d, 0xff, 0x61, 0x80, 0xd9, 0x75, 0xe3, 0xf1, 0xd5, 0xa8, 0xc0, 0xeb, - 0xb9, 0x65, 0x8d, 0x35, 0x97, 0x5d, 0x23, 0x18, 0x8a, 0x52, 0x40, 0x75, 0xbd, 0x14, 0x50, 0x2b, - 0x0a, 0x9c, 0xf7, 0x97, 0x68, 0x51, 0xca, 0x9e, 0x26, 0x6c, 0x8c, 0x16, 0xe3, 0x31, 0x26, 0x09, - 0x89, 0x93, 0x26, 0x3d, 0x54, 0xf9, 0x55, 0x85, 0x95, 0x71, 0x5b, 0x8e, 0x68, 0xd9, 0x03, 0x68, - 0x3a, 0x98, 0x78, 0x53, 0x9f, 0xaa, 0x27, 0x2a, 0x18, 0xa6, 0xe9, 0x24, 0xa9, 0x60, 0x78, 0x6b, - 0x0d, 0x6a, 0x74, 0xa1, 0x25, 0x2f, 0x55, 0x2a, 0x97, 0xfd, 0x38, 0xad, 0x94, 0xbb, 0x6f, 0x07, - 0x93, 0xdb, 0xe1, 0xf9, 0xd2, 0x80, 0x1a, 0x1d, 0x4c, 0x8f, 0xd3, 0x61, 0x14, 0x5c, 0x7a, 0x33, - 0x3c, 0xbc, 0x0a, 0xe2, 0x40, 0x2c, 0xa4, 0xc8, 0xe8, 0xd1, 0x7f, 0xe6, 0x8d, 0xaf, 0x7d, 0x77, - 0x8e, 0x93, 0xe2, 0x32, 0x69, 0x4b, 0x10, 0xaa, 0x0a, 0x84, 0x87, 0x00, 0xbd, 0x08, 0xbb, 0x31, - 0x66, 0x15, 0x05, 0xf7, 0xae, 0x24, 0xa1, 0xde, 0x18, 0x90, 0xee, 0x2c, 0x18, 0x5f, 0xb3, 0xec, - 0xbf, 0xe9, 0x24, 0x4d, 0x7b, 0x9c, 0xd6, 0xe7, 0x5c, 0xcd, 0x92, 0x57, 0x3a, 0x76, 0x83, 0x17, - 0x39, 0x12, 0xf8, 0x58, 0x66, 0x7b, 0x26, 0xb7, 0xff, 0x64, 0xc0, 0xae, 0xd8, 0x85, 0x74, 0xdf, - 0x9e, 0xb9, 0x73, 0x2c, 0x2e, 0xa3, 0x54, 0x42, 0x9b, 0xc9, 0x65, 0x34, 0x69, 0xa3, 0x13, 0x80, - 0xa1, 0x3b, 0xf5, 0x7c, 0x39, 0xf7, 0x7e, 0x54, 0x50, 0x9c, 0x3b, 0xf8, 0xf3, 0x05, 0x26, 0x71, - 0x36, 0xd6, 0x91, 0xe6, 0xad, 0x91, 0x27, 0xff, 0xcc, 0x4f, 0x2c, 0x05, 0x19, 0x09, 0x51, 0x07, - 0xea, 0x14, 0x78, 0x12, 0xae, 0xb2, 0x46, 0xbc, 0x03, 0x9d, 0x16, 0x00, 0xfc, 0x7a, 0x21, 0x40, - 0x12, 0x06, 0x3e, 0xc1, 0x4b, 0x10, 0x26, 0x36, 0x58, 0xcc, 0x89, 0x88, 0xdd, 0xb4, 0x6d, 0xff, - 0xcd, 0x80, 0xed, 0xe3, 0x59, 0xcc, 0xe3, 0xfd, 0x56, 0x04, 0xa4, 0x23, 0x86, 0x57, 0x81, 0x8f, - 0xcf, 0x16, 0xf3, 0x97, 0x38, 0x62, 0x3b, 0x55, 0x1d, 0x59, 0xa4, 0xb0, 0xae, 0xa6, 0xb1, 0x6e, - 0x0f, 0xea, 0xa7, 0x73, 0xd7, 0x9b, 0x89, 0xca, 0x81, 0x37, 0xa4, 0x4b, 0xd0, 0x44, 0x54, 0xc1, - 0x69, 0xdb, 0x3e, 0x86, 0xa6, 0x84, 0xbc, 0x0c, 0xa7, 0xec, 0x3f, 0x1a, 0xd0, 0x48, 0x3c, 0x93, - 0x1c, 0x19, 0x92, 0x92, 0x46, 0x5e, 0xc9, 0xbb, 0xe1, 0x8c, 0xcc, 0xca, 0xaa, 0xca, 0x4a, 0xfb, - 0xef, 0x06, 0x6c, 0x67, 0x98, 0x6e, 0x19, 0x2a, 0xd5, 0xa2, 0x50, 0xd1, 0x78, 0x55, 0xbd, 0x0b, - 0x5e, 0xd5, 0x34, 0x5e, 0x7d, 0x69, 0x00, 0x1c, 0x4f, 0x26, 0x09, 0xab, 0x56, 0x1b, 0x56, 0x63, - 0x8f, 0xe0, 0x97, 0xcc, 0x9e, 0x65, 0x79, 0x09, 0x41, 0x4d, 0x62, 0x14, 0xfb, 0xad, 0xf0, 0xa6, - 0xae, 0xf1, 0xe6, 0x53, 0x68, 0xa4, 0xc8, 0x4a, 0xb1, 0xe6, 0x0f, 0x06, 0x6c, 0xb3, 0xc4, 0xb6, - 0x2a, 0x66, 0x3e, 0x86, 0xd6, 0xa9, 0x3f, 0x39, 0xf1, 0x88, 0xfb, 0x72, 0xc6, 0xb3, 0xa6, 0xa8, - 0xc3, 0x55, 0xe9, 0xea, 0x14, 0xa2, 0xe8, 0x53, 0xcb, 0xc7, 0x81, 0x84, 0xa6, 0x94, 0x46, 0x97, - 0xd0, 0x7a, 0xe1, 0xaf, 0xa5, 0xd2, 0xea, 0x34, 0x20, 0x43, 0xad, 0x6a, 0x50, 0x7b, 0xb0, 0xa3, - 0xec, 0x53, 0x0a, 0xec, 0x5f, 0x0d, 0xf6, 0x44, 0x98, 0x2e, 0xc3, 0x22, 0x57, 0x8d, 0x4b, 0xe3, - 0x6e, 0x72, 0x79, 0x81, 0x76, 0xb6, 0xe4, 0xfa, 0xb3, 0xc5, 0x5c, 0xe4, 0x53, 0x45, 0x66, 0x7f, - 0x01, 0x5b, 0x69, 0x9b, 0xc6, 0x22, 0xfd, 0x2f, 0x20, 0x29, 0xb1, 0xc8, 0xfa, 0x1f, 0x41, 0xbb, - 0x8b, 0xa7, 0x9e, 0x9f, 0x67, 0x49, 0x4e, 0x5e, 0xc0, 0xa7, 0x6a, 0x11, 0x9f, 0xec, 0x7f, 0xf1, - 0xa3, 0x50, 0xb6, 0x50, 0xa9, 0x3c, 0x72, 0x04, 0x90, 0xad, 0x21, 0xb2, 0xc9, 0x0e, 0x9f, 0x91, - 0x39, 0x51, 0x1a, 0xf2, 0x2e, 0x12, 0xcb, 0x90, 0xdd, 0x7c, 0xd2, 0x3d, 0x93, 0xba, 0x69, 0x1f, - 0x36, 0x68, 0xf3, 0xc2, 0xfb, 0xff, 0x0b, 0xa7, 0x53, 0x76, 0x8b, 0xd1, 0x56, 0x24, 0x21, 0xfa, - 0xa6, 0xe4, 0x46, 0x91, 0xe9, 0x73, 0xca, 0x67, 0x23, 0xec, 0x4b, 0x68, 0x66, 0x4f, 0xef, 0xb7, - 0x83, 0x74, 0x63, 0x0c, 0x75, 0xe5, 0xcf, 0x0b, 0xe5, 0x1c, 0xfb, 0xf8, 0xbf, 0x0d, 0x7e, 0x42, - 0xa0, 0x4f, 0xd2, 0xf3, 0x8f, 0xbd, 0xe8, 0xec, 0xf1, 0x59, 0xea, 0xeb, 0xad, 0xf5, 0x5e, 0x81, - 0x94, 0x84, 0xa8, 0x07, 0x2d, 0xf5, 0x89, 0x11, 0xed, 0x0b, 0x76, 0xeb, 0x8f, 0xa0, 0x96, 0x59, - 0xdc, 0x41, 0x42, 0xf4, 0x0b, 0xd8, 0x5f, 0xf2, 0xea, 0x87, 0x3a, 0x7c, 0xd2, 0xf2, 0xe7, 0x47, - 0xeb, 0xc3, 0x15, 0x23, 0x48, 0x48, 0x15, 0x94, 0x3e, 0x88, 0x24, 0x0a, 0xaa, 0xdf, 0x67, 0x12, - 0x05, 0xf5, 0x2f, 0x27, 0x3f, 0x64, 0x07, 0x71, 0xfa, 0x29, 0x02, 0x65, 0x76, 0x90, 0xbf, 0x77, - 0x58, 0x0f, 0x8a, 0xc4, 0x7c, 0xba, 0xfc, 0x12, 0x9f, 0x4c, 0xd7, 0xbe, 0x3b, 0x24, 0xd3, 0x73, - 0x9f, 0x04, 0x9e, 0xb2, 0xa2, 0x59, 0x79, 0xa5, 0x32, 0xd3, 0x9d, 0xb4, 0xd7, 0x0f, 0xeb, 0xfd, - 0x25, 0x3d, 0x24, 0x44, 0x0e, 0x0b, 0x18, 0xfd, 0x06, 0x8b, 0xbe, 0x22, 0xa3, 0xd6, 0xaf, 0x94, - 0xd6, 0x57, 0x6f, 0xe8, 0x25, 0x21, 0x1a, 0xb0, 0x0c, 0xac, 0x2e, 0x58, 0x0c, 0x81, 0xad, 0x66, - 0x2d, 0xeb, 0x22, 0x21, 0xfa, 0x29, 0xbc, 0x57, 0x78, 0x25, 0x44, 0x0f, 0x45, 0xac, 0x2d, 0xb9, - 0xf5, 0x5a, 0x5f, 0xbb, 0xb1, 0x9f, 0x1b, 0x70, 0x54, 0x6c, 0xc0, 0xd1, 0x52, 0x03, 0x16, 0x3d, - 0xdb, 0x7d, 0x06, 0x4d, 0xe5, 0xdd, 0x0a, 0x3d, 0x48, 0xc7, 0x2a, 0x0f, 0x73, 0xd6, 0x7e, 0xa1, - 0x9c, 0x93, 0x50, 0xba, 0xff, 0x68, 0x51, 0x26, 0x32, 0x98, 0x16, 0x65, 0x69, 0x16, 0xea, 0xa5, - 0x57, 0x44, 0x71, 0x77, 0x48, 0xa2, 0x2c, 0x77, 0xd7, 0xb1, 0xcc, 0xe2, 0x0e, 0x12, 0xa2, 0x27, - 0xec, 0x63, 0x91, 0xb8, 0xab, 0xa2, 0xfb, 0x7c, 0x9c, 0x72, 0x11, 0xb6, 0xf6, 0xf2, 0x42, 0x12, - 0xa2, 0xef, 0xc2, 0x56, 0x5a, 0x63, 0x23, 0xf1, 0xa0, 0x20, 0x5f, 0x17, 0xac, 0xfb, 0x39, 0x19, - 0x09, 0xd1, 0xb7, 0x61, 0x33, 0x01, 0x81, 0x76, 0x55, 0x50, 0x74, 0x0e, 0xd2, 0x45, 0x24, 0x44, - 0x87, 0xb0, 0x21, 0x8a, 0x32, 0x24, 0x52, 0x57, 0x56, 0x3d, 0x5a, 0xbb, 0x9a, 0x84, 0x03, 0xcb, - 0xce, 0x58, 0xa4, 0xa7, 0xe5, 0x0c, 0x98, 0x5a, 0x6c, 0x7c, 0x02, 0x0d, 0xa9, 0xfe, 0x48, 0x1c, - 0xa1, 0x96, 0x3e, 0x89, 0x23, 0xf4, 0x42, 0xe5, 0x33, 0x68, 0x2a, 0x67, 0x2a, 0xca, 0xe2, 0x5e, - 0x29, 0x45, 0xac, 0xfd, 0x42, 0x79, 0x1a, 0x35, 0xca, 0x41, 0x23, 0x45, 0x8d, 0x7e, 0xa4, 0x49, - 0x51, 0x93, 0x3f, 0x9b, 0x9e, 0x00, 0x64, 0xd9, 0x2a, 0x71, 0xa8, 0x72, 0xfc, 0x58, 0x7b, 0x79, - 0x21, 0x09, 0xbb, 0xcd, 0x9f, 0x35, 0x0e, 0xd9, 0x57, 0xf1, 0x1f, 0xd0, 0x3f, 0x2f, 0xef, 0xb1, - 0x4f, 0xde, 0xdf, 0xf9, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x77, 0x7a, 0xcc, 0x2e, 0x1f, - 0x00, 0x00, + 0x34, 0x5d, 0xbe, 0x38, 0x1f, 0x28, 0xe0, 0xab, 0x42, 0xdb, 0x87, 0x56, 0x1f, 0xc7, 0xcc, 0x20, + 0xfe, 0x65, 0x40, 0x6d, 0x7b, 0x1f, 0x60, 0xa1, 0x9b, 0x55, 0x92, 0xdc, 0xd2, 0xa2, 0xbf, 0x33, + 0x18, 0x09, 0xb3, 0x0f, 0x96, 0x32, 0xe8, 0xa7, 0xb0, 0x9d, 0xac, 0xc0, 0xb4, 0xac, 0x32, 0x93, + 0x7e, 0x70, 0x48, 0x70, 0xf4, 0x02, 0x47, 0x17, 0x6e, 0xe8, 0x5d, 0x84, 0x6e, 0xe4, 0xce, 0xc9, + 0x61, 0xfa, 0x21, 0x65, 0x82, 0xfd, 0x07, 0x03, 0x76, 0x9f, 0x85, 0x13, 0x57, 0x84, 0xb3, 0x80, + 0xfe, 0x08, 0x36, 0x93, 0xa6, 0x50, 0xe3, 0xc6, 0x25, 0xd3, 0xc1, 0xab, 0x6c, 0x12, 0xe4, 0x6d, + 0x22, 0x87, 0xd1, 0x63, 0x40, 0xba, 0x2e, 0x65, 0xac, 0x62, 0x7f, 0x69, 0x80, 0x35, 0xc2, 0x71, + 0x7f, 0x16, 0x3c, 0x77, 0x67, 0x0e, 0x1e, 0xbf, 0x78, 0x82, 0x09, 0x71, 0xa7, 0xf8, 0x3c, 0x8c, + 0x29, 0xba, 0x65, 0x44, 0x59, 0x19, 0xe7, 0x34, 0xc9, 0x4c, 0xb3, 0x45, 0xc9, 0xf4, 0x3c, 0x8c, + 0x19, 0x8e, 0xba, 0x93, 0x93, 0xdb, 0xe7, 0xf0, 0xc1, 0x52, 0x1d, 0x4a, 0xa1, 0xfa, 0x4f, 0x15, + 0xb6, 0x7b, 0x81, 0xff, 0x02, 0x47, 0x84, 0xe9, 0xc3, 0x48, 0xf6, 0xd2, 0xc7, 0x91, 0x92, 0xb6, + 0x64, 0x11, 0xfa, 0x18, 0x5a, 0xf2, 0x8c, 0x14, 0x94, 0x26, 0xa5, 0x54, 0xcf, 0x21, 0x92, 0x24, + 0x14, 0xb7, 0x3c, 0xe3, 0xe9, 0xeb, 0x10, 0xb3, 0x44, 0x5e, 0x77, 0x72, 0x72, 0x6a, 0x5d, 0xa1, + 0x50, 0x9d, 0x5b, 0x57, 0xe8, 0x62, 0xc2, 0x46, 0x3f, 0x0a, 0x16, 0xe1, 0xe0, 0xc4, 0xbc, 0xc3, + 0x3a, 0x92, 0x26, 0xc5, 0xf1, 0xcc, 0x8f, 0xb0, 0x3b, 0xe9, 0xd1, 0x78, 0x34, 0x37, 0xd8, 0xc2, + 0xb2, 0x88, 0x86, 0xf0, 0x49, 0xe4, 0x5e, 0xc6, 0x4f, 0xf1, 0xab, 0xf8, 0xa9, 0x37, 0xc7, 0xe6, + 0x66, 0xc7, 0x38, 0xa8, 0x3a, 0xaa, 0x90, 0x92, 0x6f, 0x40, 0x86, 0x9e, 0xef, 0xe3, 0x89, 0xb9, + 0xd5, 0x31, 0x0e, 0x36, 0x9d, 0xb4, 0x8d, 0x6c, 0xd8, 0x3e, 0x8e, 0x63, 0x77, 0x7c, 0x85, 0x27, + 0x8c, 0xd5, 0xc0, 0x54, 0x50, 0x64, 0xf4, 0x2b, 0x03, 0x32, 0x8c, 0xbc, 0x17, 0x6e, 0x8c, 0x7b, + 0x57, 0x6e, 0x6c, 0x36, 0xd8, 0x22, 0xaa, 0x90, 0x6a, 0xcb, 0x14, 0x3f, 0x8e, 0x99, 0x19, 0xb6, + 0xb9, 0xb6, 0x92, 0x88, 0x7e, 0x6b, 0x40, 0xce, 0x82, 0x78, 0xe0, 0x33, 0xa9, 0xd9, 0x64, 0xcb, + 0x28, 0x32, 0xd4, 0x82, 0xca, 0xe9, 0x2b, 0xb3, 0xc5, 0xb4, 0xa8, 0x9c, 0xbe, 0xb2, 0xff, 0x6a, + 0x00, 0x1a, 0xe1, 0x58, 0xb6, 0x26, 0xa5, 0xea, 0x0f, 0x54, 0x97, 0x0b, 0x9e, 0xa0, 0x84, 0x27, + 0xd2, 0x60, 0x95, 0x1a, 0x0f, 0xa0, 0xed, 0x07, 0xb1, 0x77, 0xe9, 0x8d, 0x33, 0x87, 0x55, 0xb8, + 0xc3, 0x74, 0xf9, 0x1a, 0xb9, 0xaa, 0x0f, 0x77, 0x73, 0xba, 0x95, 0xa2, 0xf0, 0xbf, 0x0c, 0x68, + 0x8f, 0x70, 0x9c, 0x31, 0x8b, 0x62, 0x7c, 0xa7, 0x34, 0xce, 0x59, 0xa5, 0xb6, 0x9e, 0x55, 0xea, + 0x79, 0xab, 0x9c, 0xc2, 0xae, 0x86, 0xa5, 0x94, 0x4d, 0x7e, 0x63, 0x00, 0xea, 0xe7, 0x3d, 0x9f, + 0xc7, 0x6c, 0x14, 0x62, 0xd6, 0xac, 0x57, 0xc9, 0x5b, 0x6f, 0xb5, 0x7f, 0xbf, 0x80, 0xbb, 0xfd, + 0xb7, 0xe1, 0xdf, 0x1c, 0x5d, 0x2b, 0xeb, 0xd1, 0xd5, 0xfe, 0xad, 0x91, 0xd3, 0x80, 0xac, 0x47, + 0x0d, 0x5a, 0x00, 0x29, 0x06, 0x21, 0xa2, 0x70, 0xd2, 0xc5, 0x6b, 0x98, 0xe1, 0x4b, 0x03, 0xf6, + 0xf2, 0x5a, 0x94, 0x32, 0xc4, 0x0f, 0xa1, 0xa9, 0x2c, 0x23, 0x6a, 0x9d, 0x22, 0x4b, 0xa8, 0x03, + 0xed, 0x5f, 0xc2, 0x3d, 0x5e, 0x4a, 0x96, 0x30, 0x86, 0x06, 0xb1, 0x92, 0x87, 0xf8, 0x7b, 0x03, + 0xf6, 0x0b, 0x97, 0x7f, 0xc7, 0x28, 0xff, 0x69, 0x80, 0xd9, 0x75, 0xe3, 0xf1, 0xd5, 0xa8, 0xc0, + 0xeb, 0xb9, 0x65, 0x8d, 0x35, 0x97, 0x5d, 0x23, 0x18, 0x8a, 0x52, 0x40, 0x75, 0xbd, 0x14, 0x50, + 0x2b, 0x0a, 0x9c, 0xf7, 0x97, 0xa0, 0x28, 0x65, 0x4f, 0x13, 0x36, 0x46, 0x8b, 0xf1, 0x18, 0x93, + 0x84, 0xc4, 0x49, 0x93, 0x6e, 0xaa, 0xfc, 0x14, 0xc3, 0x2a, 0xbc, 0x2d, 0x47, 0xb4, 0xec, 0x01, + 0x34, 0x1d, 0x4c, 0xbc, 0xa9, 0x4f, 0xe1, 0x89, 0xda, 0x86, 0x21, 0x9d, 0x24, 0xb5, 0x0d, 0x6f, + 0xad, 0x41, 0x8d, 0x2e, 0xb4, 0xe4, 0xa5, 0x4a, 0xe5, 0xb2, 0x9f, 0xa6, 0x45, 0x74, 0xf7, 0xf5, + 0x60, 0x72, 0x3b, 0x7d, 0xde, 0x18, 0x50, 0xa3, 0x83, 0xe9, 0x76, 0x3a, 0x8c, 0x82, 0x4b, 0x6f, + 0x86, 0x87, 0x57, 0x41, 0x1c, 0x88, 0x85, 0x14, 0x19, 0xdd, 0xfa, 0xcf, 0xbc, 0xf1, 0xb5, 0xef, + 0xce, 0x71, 0x52, 0x77, 0x26, 0x6d, 0x49, 0x85, 0xaa, 0xa2, 0xc2, 0x7d, 0x80, 0x5e, 0x84, 0xdd, + 0x18, 0xb3, 0x8a, 0x82, 0x7b, 0x57, 0x92, 0x50, 0x6f, 0x0c, 0x48, 0x77, 0x16, 0x8c, 0xaf, 0x59, + 0xf6, 0xdf, 0x74, 0x92, 0xa6, 0x3d, 0x4e, 0x4b, 0x77, 0x0e, 0xb3, 0xe4, 0x69, 0x8f, 0x1d, 0xee, + 0x45, 0x8e, 0x04, 0x3e, 0x96, 0xd9, 0x9e, 0xc9, 0xed, 0x3f, 0x1b, 0xb0, 0x2b, 0xbe, 0x42, 0xba, + 0xaf, 0xcf, 0xdc, 0x39, 0x16, 0xe7, 0x54, 0x2a, 0xa1, 0xcd, 0xe4, 0x9c, 0x9a, 0xb4, 0xd1, 0x09, + 0xc0, 0xd0, 0x9d, 0x7a, 0xbe, 0x9c, 0x7b, 0x3f, 0x2a, 0xa8, 0xdb, 0x1d, 0xfc, 0xf9, 0x02, 0x93, + 0x38, 0x1b, 0xeb, 0x48, 0xf3, 0xd6, 0xc8, 0x93, 0x7f, 0xe1, 0x3b, 0x96, 0xa2, 0x19, 0x09, 0x51, + 0x07, 0xea, 0x54, 0xf1, 0x24, 0x5c, 0x65, 0x44, 0xbc, 0x03, 0x9d, 0x16, 0x28, 0xf8, 0xcd, 0x42, + 0x05, 0x49, 0x18, 0xf8, 0x04, 0x2f, 0xd1, 0x30, 0xb1, 0xc1, 0x62, 0x4e, 0x44, 0xec, 0xa6, 0x6d, + 0xfb, 0xef, 0x06, 0x6c, 0x1f, 0xcf, 0x62, 0x1e, 0xef, 0xb7, 0x22, 0x20, 0x1d, 0x31, 0xbc, 0x0a, + 0x7c, 0x7c, 0xb6, 0x98, 0x3f, 0xc7, 0x11, 0xfb, 0x52, 0xd5, 0x91, 0x45, 0x0a, 0xeb, 0x6a, 0x1a, + 0xeb, 0xf6, 0xa0, 0x7e, 0x3a, 0x77, 0xbd, 0x99, 0xa8, 0x1c, 0x78, 0x43, 0x3a, 0x1f, 0x4d, 0x44, + 0x15, 0x9c, 0xb6, 0xed, 0x63, 0x68, 0x4a, 0x9a, 0x97, 0xe1, 0x94, 0xfd, 0x27, 0x03, 0x1a, 0x89, + 0x67, 0x92, 0x2d, 0x43, 0x02, 0x69, 0xe4, 0x41, 0xbe, 0x1d, 0xce, 0xc8, 0xac, 0xac, 0xaa, 0xac, + 0xb4, 0xff, 0x61, 0xc0, 0x76, 0xa6, 0xd3, 0x2d, 0x43, 0xa5, 0x5a, 0x14, 0x2a, 0x1a, 0xaf, 0xaa, + 0x6f, 0x83, 0x57, 0x35, 0x8d, 0x57, 0x6f, 0x0c, 0x80, 0xe3, 0xc9, 0x24, 0x61, 0xd5, 0x6a, 0xc3, + 0x6a, 0xec, 0x11, 0xfc, 0x92, 0xd9, 0xb3, 0x2c, 0x2f, 0x21, 0xa8, 0x49, 0x8c, 0x62, 0xbf, 0x15, + 0xde, 0xd4, 0x35, 0xde, 0x7c, 0x0a, 0x8d, 0x54, 0xb3, 0x52, 0xac, 0xf9, 0xa3, 0x01, 0xdb, 0x2c, + 0xb1, 0xad, 0x8a, 0x99, 0x8f, 0xa1, 0x75, 0xea, 0x4f, 0x4e, 0x3c, 0xe2, 0x3e, 0x9f, 0xf1, 0xac, + 0x29, 0xea, 0x70, 0x55, 0xba, 0x3a, 0x85, 0x28, 0x78, 0x6a, 0xf9, 0x38, 0x90, 0xb4, 0x29, 0x85, + 0xe8, 0x12, 0x5a, 0xcf, 0xfc, 0xb5, 0x20, 0xad, 0x4e, 0x03, 0xb2, 0xaa, 0x55, 0x4d, 0xd5, 0x1e, + 0xec, 0x28, 0xdf, 0x29, 0xa5, 0xec, 0xdf, 0x0c, 0x76, 0x7b, 0x98, 0x2e, 0xc3, 0x22, 0x57, 0x8d, + 0x4b, 0xe3, 0xed, 0xe4, 0xf2, 0x02, 0x74, 0xb6, 0xe4, 0xfa, 0xb3, 0xc5, 0x5c, 0xe4, 0x53, 0x45, + 0x66, 0x7f, 0x01, 0x5b, 0x69, 0x9b, 0xc6, 0x22, 0xfd, 0x2f, 0x54, 0x52, 0x62, 0x91, 0xf5, 0x3f, + 0x80, 0x76, 0x17, 0x4f, 0x3d, 0x3f, 0xcf, 0x92, 0x9c, 0xbc, 0x80, 0x4f, 0xd5, 0x22, 0x3e, 0xd9, + 0xff, 0xe6, 0x5b, 0xa1, 0x6c, 0xa1, 0x52, 0x79, 0xe4, 0x08, 0x20, 0x5b, 0x43, 0x64, 0x93, 0x1d, + 0x3e, 0x23, 0x73, 0xa2, 0x34, 0xe4, 0x5d, 0x24, 0x96, 0x21, 0x3b, 0xf9, 0xa4, 0xdf, 0x4c, 0xea, + 0xa6, 0x7d, 0xd8, 0xa0, 0xcd, 0x0b, 0xef, 0xab, 0x17, 0x4e, 0xa7, 0xec, 0x14, 0xa3, 0xad, 0x48, + 0x42, 0xf4, 0x6d, 0xc9, 0x8d, 0x22, 0xd3, 0xe7, 0xc0, 0x67, 0x23, 0xec, 0x4b, 0x68, 0x66, 0xb7, + 0xf2, 0xb7, 0x53, 0xe9, 0xc6, 0x18, 0xea, 0xca, 0x2f, 0x0f, 0xe5, 0x1c, 0xfb, 0xf0, 0x7f, 0x0d, + 0xbe, 0x43, 0xa0, 0x4f, 0xd2, 0xfd, 0x8f, 0xdd, 0xe8, 0xec, 0xf1, 0x59, 0xea, 0xc5, 0xae, 0xf5, + 0x5e, 0x81, 0x94, 0x84, 0xa8, 0x07, 0x2d, 0xf5, 0xf6, 0x11, 0xed, 0x0b, 0x76, 0xeb, 0xf7, 0xa3, + 0x96, 0x59, 0xdc, 0x41, 0x42, 0xf4, 0x2b, 0xd8, 0x5f, 0x72, 0xeb, 0x87, 0x3a, 0x7c, 0xd2, 0xf2, + 0x8b, 0x49, 0xeb, 0xc3, 0x15, 0x23, 0x48, 0x48, 0x01, 0x4a, 0x6f, 0x25, 0x09, 0x40, 0xf5, 0xe9, + 0x26, 0x01, 0xa8, 0x3f, 0xaa, 0xfc, 0x98, 0x6d, 0xc4, 0xe9, 0x2b, 0x05, 0xca, 0xec, 0x20, 0x3f, + 0x85, 0x58, 0xf7, 0x8a, 0xc4, 0x7c, 0xba, 0x7c, 0x49, 0x9f, 0x4c, 0xd7, 0x9e, 0x24, 0x92, 0xe9, + 0xb9, 0xd7, 0x82, 0xc7, 0xac, 0x68, 0x56, 0x6e, 0xa9, 0xcc, 0xf4, 0x4b, 0xda, 0xed, 0x87, 0xf5, + 0xfe, 0x92, 0x1e, 0x12, 0x22, 0x87, 0x05, 0x8c, 0x7e, 0x82, 0x45, 0x5f, 0x93, 0xb5, 0xd6, 0x8f, + 0x94, 0xd6, 0xd7, 0x6f, 0xe8, 0x25, 0x21, 0x1a, 0xb0, 0x0c, 0xac, 0x2e, 0x58, 0xac, 0x02, 0x5b, + 0xcd, 0x5a, 0xd6, 0x45, 0x42, 0xf4, 0x73, 0x78, 0xaf, 0xf0, 0x48, 0x88, 0xee, 0x8b, 0x58, 0x5b, + 0x72, 0xea, 0xb5, 0xbe, 0x71, 0x63, 0x3f, 0x37, 0xe0, 0xa8, 0xd8, 0x80, 0xa3, 0xa5, 0x06, 0x2c, + 0xba, 0xb6, 0xfb, 0x0c, 0x9a, 0xca, 0xbd, 0x15, 0xba, 0x97, 0x8e, 0x55, 0x2e, 0xe6, 0xac, 0xfd, + 0x42, 0x39, 0x27, 0xa1, 0x74, 0xfe, 0xd1, 0xa2, 0x4c, 0x64, 0x30, 0x2d, 0xca, 0xd2, 0x2c, 0xd4, + 0x4b, 0x8f, 0x88, 0xe2, 0xec, 0x90, 0x44, 0x59, 0xee, 0xac, 0x63, 0x99, 0xc5, 0x1d, 0x24, 0x44, + 0x8f, 0xd8, 0x3b, 0x92, 0x38, 0xab, 0xa2, 0xbb, 0x7c, 0x9c, 0x72, 0x10, 0xb6, 0xf6, 0xf2, 0x42, + 0x12, 0xa2, 0xef, 0xc3, 0x56, 0x5a, 0x63, 0x23, 0x71, 0xa1, 0x20, 0x1f, 0x17, 0xac, 0xbb, 0x39, + 0x19, 0x09, 0xd1, 0x77, 0x61, 0x33, 0x51, 0x02, 0xed, 0xaa, 0x4a, 0xd1, 0x39, 0x48, 0x17, 0x91, + 0x10, 0x1d, 0xc2, 0x86, 0x28, 0xca, 0x90, 0x48, 0x5d, 0x59, 0xf5, 0x68, 0xed, 0x6a, 0x12, 0xae, + 0x58, 0xb6, 0xc7, 0x22, 0x3d, 0x2d, 0x67, 0x8a, 0xa9, 0xc5, 0xc6, 0x27, 0xd0, 0x90, 0xea, 0x8f, + 0xc4, 0x11, 0x6a, 0xe9, 0x93, 0x38, 0x42, 0x2f, 0x54, 0x3e, 0x83, 0xa6, 0xb2, 0xa7, 0xa2, 0x2c, + 0xee, 0x95, 0x52, 0xc4, 0xda, 0x2f, 0x94, 0xa7, 0x51, 0xa3, 0x6c, 0x34, 0x52, 0xd4, 0xe8, 0x5b, + 0x9a, 0x14, 0x35, 0xf9, 0xbd, 0xe9, 0x11, 0x40, 0x96, 0xad, 0x12, 0x87, 0x2a, 0xdb, 0x8f, 0xb5, + 0x97, 0x17, 0x92, 0xb0, 0xdb, 0xfc, 0x45, 0xe3, 0x90, 0x3d, 0x98, 0xff, 0x88, 0xfe, 0x79, 0x7e, + 0x87, 0xbd, 0x86, 0x7f, 0xef, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x32, 0x71, 0xc8, 0xa6, 0x49, + 0x1f, 0x00, 0x00, } From 20851f2a966859b45c12805c5e49181e1b0e93fb Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Jun 2022 19:26:09 +0800 Subject: [PATCH 240/256] fix bug --- internal/api/user/user.go | 4 ---- internal/rpc/user/user.go | 25 +++++-------------------- pkg/base_info/public_struct.go | 17 ++++++++--------- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/internal/api/user/user.go b/internal/api/user/user.go index f3cc8bdf7..af93416b4 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -15,7 +15,6 @@ import ( "Open_IM/pkg/utils" "context" "github.com/gin-gonic/gin" - "github.com/golang/protobuf/ptypes/wrappers" "net/http" "strings" ) @@ -216,9 +215,6 @@ func UpdateUserInfo(c *gin.Context) { return } log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String()) - if params.GlobalRecvMsgOpt != nil { - req.GlobalRecvMsgOpt = &wrappers.Int32Value{Value: *params.GlobalRecvMsgOpt} - } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) if etcdConn == nil { errMsg := req.OperationID + "getcdv3.GetConn == nil" diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index b38dfa57d..86bd07c5b 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -383,26 +383,11 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI if req.UserInfo.Birth != 0 { user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth)) } - m := make(map[string]interface{}, 1) - if req.GlobalRecvMsgOpt != nil { - log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.GlobalRecvMsgOpt, "set GlobalRecvMsgOpt") - m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt.Value - err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt.Value) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserGlobalMsgRecvOpt failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } - err = imdb.UpdateUserInfoByMap(user, m) - if err != nil { - log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } - } else { - err := imdb.UpdateUserInfo(user) - if err != nil { - log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) - return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil - } + + err := imdb.UpdateUserInfo(user) + if err != nil { + log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.OperationID) if etcdConn == nil { diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 89e2be936..2950dbea8 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -6,15 +6,14 @@ import ( ) type ApiUserInfo struct { - UserID string `json:"userID" binding:"required,min=1,max=64"` - Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` - FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` - Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` - PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` - Birth uint32 `json:"birth" binding:"omitempty"` - Email string `json:"email" binding:"omitempty,max=64"` - GlobalRecvMsgOpt *int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` - Ex string `json:"ex" binding:"omitempty,max=1024"` + UserID string `json:"userID" binding:"required,min=1,max=64"` + Nickname string `json:"nickname" binding:"omitempty,min=1,max=64"` + FaceURL string `json:"faceURL" binding:"omitempty,max=1024"` + Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"` + PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"` + Birth uint32 `json:"birth" binding:"omitempty"` + Email string `json:"email" binding:"omitempty,max=64"` + Ex string `json:"ex" binding:"omitempty,max=1024"` } //type Conversation struct { From 29dbb369613dd397ff8847e607bd4d9c44b0cf90 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 19:33:35 +0800 Subject: [PATCH 241/256] user proto modify --- cmd/open_im_api/main.go | 3 ++- internal/api/user/user.go | 38 ++++++++++++++++++++++++++++++++ internal/rpc/user/user.go | 21 ++++++++++++++++++ pkg/base_info/user_api_struct.go | 8 ++++++- script/start_all.sh | 2 +- 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index e8cf2e799..8b3818aa8 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -38,7 +38,8 @@ func main() { // user routing group, which handles user registration and login services userRouterGroup := r.Group("/user") { - userRouterGroup.POST("/update_user_info", user.UpdateUserInfo) //1 + userRouterGroup.POST("/update_user_info", user.UpdateUserInfo) //1 + userRouterGroup.POST("/set_global_msg_recv_opt", user.SetGlobalRecvMessageOpt) userRouterGroup.POST("/get_users_info", user.GetUsersInfo) //1 userRouterGroup.POST("/get_self_user_info", user.GetSelfUserInfo) //1 userRouterGroup.POST("/get_users_online_status", user.GetUsersOnlineStatus) //1 diff --git a/internal/api/user/user.go b/internal/api/user/user.go index af93416b4..ac40059d3 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -233,6 +233,44 @@ func UpdateUserInfo(c *gin.Context) { log.NewInfo(req.OperationID, "UpdateUserInfo api return ", resp) c.JSON(http.StatusOK, resp) } +func SetGlobalRecvMessageOpt(c *gin.Context) { + params := api.SetGlobalRecvMessageOptReq{} + if err := c.BindJSON(¶ms); err != nil { + log.NewError("0", "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + req := &rpc.SetGlobalRecvMessageOptReq{} + utils.CopyStructFields(req, ¶ms) + req.OperationID = params.OperationID + var ok bool + var errInfo string + ok, req.UserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + log.NewInfo(params.OperationID, "SetGlobalRecvMessageOpt args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID) + if etcdConn == nil { + errMsg := req.OperationID + "getcdv3.GetConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + client := rpc.NewUserClient(etcdConn) + RpcResp, err := client.SetGlobalRecvMessageOpt(context.Background(), req) + if err != nil { + log.NewError(req.OperationID, "SetGlobalRecvMessageOpt failed ", err.Error(), req.String()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"}) + return + } + resp := api.UpdateUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}} + log.NewInfo(req.OperationID, "SetGlobalRecvMessageOpt api return ", resp) + c.JSON(http.StatusOK, resp) +} func GetSelfUserInfo(c *gin.Context) { params := api.GetSelfUserInfoReq{} diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 86bd07c5b..fa733cbe4 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -433,7 +433,28 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI //} return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{}}, nil } +func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.SetGlobalRecvMessageOptReq) (*pbUser.SetGlobalRecvMessageOptResp, error) { + log.NewInfo(req.OperationID, "SetGlobalRecvMessageOpt args ", req.String()) + var user db.User + user.UserID = req.UserID + m := make(map[string]interface{}, 1) + + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.GlobalRecvMsgOpt, "set GlobalRecvMsgOpt") + m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt + err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetGlobalRecvMessageOpt failed ", err.Error(), user) + return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + err = imdb.UpdateUserInfoByMap(user, m) + if err != nil { + log.NewError(req.OperationID, "SetGlobalRecvMessageOpt failed ", err.Error(), user) + return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil + } + chat.UserInfoUpdatedNotification(req.OperationID, req.UserID, req.UserID) + return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{}}, nil +} func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string, operationID string, opUserID string) { joinedGroupIDList, err := imdb.GetJoinedGroupIDListByUserID(userID) if err != nil { diff --git a/pkg/base_info/user_api_struct.go b/pkg/base_info/user_api_struct.go index b517f24de..45c8cb22d 100644 --- a/pkg/base_info/user_api_struct.go +++ b/pkg/base_info/user_api_struct.go @@ -18,7 +18,13 @@ type UpdateSelfUserInfoReq struct { ApiUserInfo OperationID string `json:"operationID" binding:"required"` } - +type SetGlobalRecvMessageOptReq struct { + OperationID string `json:"operationID" binding:"required"` + GlobalRecvMsgOpt *int32 `json:"globalRecvMsgOpt" binding:"omitempty,oneof=0 1 2"` +} +type SetGlobalRecvMessageOptResp struct { + CommResp +} type UpdateUserInfoResp struct { CommResp } diff --git a/script/start_all.sh b/script/start_all.sh index bf7170d68..9fcbd1c6a 100644 --- a/script/start_all.sh +++ b/script/start_all.sh @@ -5,10 +5,10 @@ #fixme Put the shell script name here need_to_start_server_shell=( start_rpc_service.sh - msg_gateway_start.sh push_start.sh msg_transfer_start.sh sdk_svr_start.sh + msg_gateway_start.sh demo_svr_start.sh ) time=`date +"%Y-%m-%d %H:%M:%S"` From 903c39206ffb04731d24af52538cd56d71e35d9d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 20:35:27 +0800 Subject: [PATCH 242/256] msg transfer handle change --- config/config.yaml | 2 +- internal/msg_transfer/logic/init.go | 6 +- .../logic/online_history_msg_handler.go | 136 +++++++----------- .../logic/online_msg_to_mongo_handler.go | 79 ++++++++++ pkg/common/config/config.go | 8 +- 5 files changed, 139 insertions(+), 92 deletions(-) create mode 100644 internal/msg_transfer/logic/online_msg_to_mongo_handler.go diff --git a/config/config.yaml b/config/config.yaml index 4d9569d07..3143f3a0b 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -55,8 +55,8 @@ kafka: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" consumergroupid: + msgToRedis: redis msgToMongo: mongo - msgToMongoOffline: mongo_offline msgToMySql: mysql msgToPush: push diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 65457878c..177745c6f 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -4,7 +4,6 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/kafka" - "Open_IM/pkg/common/log" "Open_IM/pkg/statistics" "fmt" "sync" @@ -20,7 +19,8 @@ const ChannelNum = 100 var ( persistentCH PersistentConsumerHandler - historyCH OnlineHistoryConsumerHandler + historyCH OnlineHistoryRedisConsumerHandler + historyMongoCH OnlineHistoryMongoConsumerHandler producer *kafka.Producer producerToMongo *kafka.Producer cmdCh chan Cmd2Value @@ -39,7 +39,6 @@ func Init() { persistentCH.Init() historyCH.Init(cmdCh) onlineTopicStatus = OnlineTopicVacancy - log.Debug("come msg transfer ts", config.Config.Kafka.ConsumerGroupID.MsgToMongoOffline, config.Config.Kafka.Ws2mschatOffline.Topic) //offlineHistoryCH.Init(cmdCh) statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) @@ -54,6 +53,7 @@ func Run() { fmt.Println("not start mysql consumer") } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) + go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) } func SetOnlineTopicStatus(status int) { diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index a1544549d..908d28b27 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -9,10 +9,8 @@ import ( "Open_IM/pkg/grpc-etcdv3/getcdv3" pbMsg "Open_IM/pkg/proto/chat" pbPush "Open_IM/pkg/proto/push" - server_api_params "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" - "errors" "github.com/Shopify/sarama" "github.com/golang/protobuf/proto" "hash/crc32" @@ -36,28 +34,21 @@ type Cmd2Value struct { Cmd int Value interface{} } -type OnlineHistoryConsumerHandler struct { +type OnlineHistoryRedisConsumerHandler struct { msgHandle map[string]fcb historyConsumerGroup *kfk.MConsumerGroup - cmdCh chan Cmd2Value chArrays [ChannelNum]chan Cmd2Value - chMongoArrays [ChannelNum]chan Cmd2Value msgDistributionCh chan Cmd2Value } -func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { +func (och *OnlineHistoryRedisConsumerHandler) Init(cmdCh chan Cmd2Value) { och.msgHandle = make(map[string]fcb) och.msgDistributionCh = make(chan Cmd2Value) //no buffer channel go och.MessagesDistributionHandle() - och.cmdCh = cmdCh for i := 0; i < ChannelNum; i++ { och.chArrays[i] = make(chan Cmd2Value, 50) go och.Run(i) } - for i := 0; i < ChannelNum; i++ { - och.chMongoArrays[i] = make(chan Cmd2Value, 10000) - go och.MongoMessageRun(i) - } if config.Config.ReliableStorage { och.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = och.handleChatWs2Mongo } else { @@ -66,34 +57,10 @@ func (och *OnlineHistoryConsumerHandler) Init(cmdCh chan Cmd2Value) { } och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, - config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) - -} -func (och *OnlineHistoryConsumerHandler) TriggerCmd(status int) { - operationID := utils.OperationIDGenerator() - err := sendCmd(och.cmdCh, Cmd2Value{Cmd: status, Value: ""}, 1) - if err != nil { - log.Error(operationID, "TriggerCmd failed ", err.Error(), status) - return - } - log.Debug(operationID, "TriggerCmd success", status) + config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToRedis) } -func sendCmd(ch chan Cmd2Value, value Cmd2Value, timeout int64) error { - var flag = 0 - select { - case ch <- value: - flag = 1 - case <-time.After(time.Second * time.Duration(timeout)): - flag = 2 - } - if flag == 1 { - return nil - } else { - return errors.New("send cmd timeout") - } -} -func (och *OnlineHistoryConsumerHandler) Run(channelID int) { +func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { for { select { case cmd := <-och.chArrays[channelID]: @@ -154,7 +121,7 @@ func (och *OnlineHistoryConsumerHandler) Run(channelID int) { } } } -func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { +func (och *OnlineHistoryRedisConsumerHandler) SendMessageToMongoCH(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq uint64) { pid, offset, err := producerToMongo.SendMessage(&pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID) if err != nil { log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) @@ -167,47 +134,48 @@ func (och *OnlineHistoryConsumerHandler) SendMessageToMongoCH(aggregationID stri ////go func(cID uint32, userID string, messages []*pbMsg.MsgDataToMQ) { //och.chMongoArrays[channelID] <- Cmd2Value{Cmd: MongoMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: messages, triggerID: triggerID, lastSeq: lastSeq}} } -func (och *OnlineHistoryConsumerHandler) MongoMessageRun(channelID int) { - for { - select { - case cmd := <-och.chMongoArrays[channelID]: - switch cmd.Cmd { - case MongoMessages: - msgChannelValue := cmd.Value.(MsgChannelValue) - msgList := msgChannelValue.msgList - triggerID := msgChannelValue.triggerID - aggregationID := msgChannelValue.aggregationID - lastSeq := msgChannelValue.lastSeq - err := db.DB.BatchInsertChat2DB(aggregationID, msgList, triggerID, lastSeq) - if err != nil { - log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) - } - for _, v := range msgList { - if v.MsgData.ContentType == constant.DeleteMessageNotification { - tips := server_api_params.TipsComm{} - DeleteMessageTips := server_api_params.DeleteMessageTips{} - err := proto.Unmarshal(v.MsgData.Content, &tips) - if err != nil { - log.NewError(triggerID, "tips unmarshal err:", err.Error(), v.String()) - continue - } - err = proto.Unmarshal(tips.Detail, &DeleteMessageTips) - if err != nil { - log.NewError(triggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) - continue - } - if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { - log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) - } - } - } - } - } - } -} +//func (och *OnlineHistoryRedisConsumerHandler) MongoMessageRun(channelID int) { +// for { +// select { +// case cmd := <-och.chMongoArrays[channelID]: +// switch cmd.Cmd { +// case MongoMessages: +// msgChannelValue := cmd.Value.(MsgChannelValue) +// msgList := msgChannelValue.msgList +// triggerID := msgChannelValue.triggerID +// aggregationID := msgChannelValue.aggregationID +// lastSeq := msgChannelValue.lastSeq +// err := db.DB.BatchInsertChat2DB(aggregationID, msgList, triggerID, lastSeq) +// if err != nil { +// log.NewError(triggerID, "single data insert to mongo err", err.Error(), msgList) +// } +// for _, v := range msgList { +// if v.MsgData.ContentType == constant.DeleteMessageNotification { +// tips := server_api_params.TipsComm{} +// DeleteMessageTips := server_api_params.DeleteMessageTips{} +// err := proto.Unmarshal(v.MsgData.Content, &tips) +// if err != nil { +// log.NewError(triggerID, "tips unmarshal err:", err.Error(), v.String()) +// continue +// } +// err = proto.Unmarshal(tips.Detail, &DeleteMessageTips) +// if err != nil { +// log.NewError(triggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) +// continue +// } +// if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { +// log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) +// } +// +// } +// } +// } +// } +// } +//} -func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { +func (och *OnlineHistoryRedisConsumerHandler) MessagesDistributionHandle() { for { aggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) select { @@ -253,7 +221,7 @@ func (och *OnlineHistoryConsumerHandler) MessagesDistributionHandle() { } } -func (mc *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { +func (mc *OnlineHistoryRedisConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value now := time.Now() msgFromMQ := pbMsg.MsgDataToMQ{} @@ -325,7 +293,7 @@ func (mc *OnlineHistoryConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Consumer log.NewDebug(msgFromMQ.OperationID, "msg_transfer handle topic data to database success...", msgFromMQ.String()) } -func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { +func (och *OnlineHistoryRedisConsumerHandler) handleChatWs2MongoLowReliability(cMsg *sarama.ConsumerMessage, msgKey string, sess sarama.ConsumerGroupSession) { msg := cMsg.Value msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) @@ -365,10 +333,10 @@ func (och *OnlineHistoryConsumerHandler) handleChatWs2MongoLowReliability(cMsg * } } -func (OnlineHistoryConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } -func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } +func (OnlineHistoryRedisConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } +func (OnlineHistoryRedisConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } -//func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +//func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, // claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group // log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) // for msg := range claim.Messages() { @@ -385,7 +353,7 @@ func (OnlineHistoryConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error // return nil //} -func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group for { @@ -480,7 +448,7 @@ func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupS return nil } -//func (och *OnlineHistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, +//func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, // claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group // // for { diff --git a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go new file mode 100644 index 000000000..1d71b8a1c --- /dev/null +++ b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go @@ -0,0 +1,79 @@ +package logic + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + kfk "Open_IM/pkg/common/kafka" + "Open_IM/pkg/common/log" + pbMsg "Open_IM/pkg/proto/chat" + server_api_params "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "github.com/Shopify/sarama" + "github.com/golang/protobuf/proto" +) + +type OnlineHistoryMongoConsumerHandler struct { + msgHandle map[string]fcb + historyConsumerGroup *kfk.MConsumerGroup +} + +func (och *OnlineHistoryMongoConsumerHandler) Init(cmdCh chan Cmd2Value) { + och.msgHandle = make(map[string]fcb) + och.msgHandle[config.Config.Kafka.MsgToMongo.Topic] = och.handleChatWs2Mongo + och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, + OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToMongo.Topic}, + config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo) + +} +func (mc *OnlineHistoryMongoConsumerHandler) handleChatWs2Mongo(cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) { + msg := cMsg.Value + msgFromMQ := pbMsg.MsgDataToMongoByMQ{} + err := proto.Unmarshal(msg, &msgFromMQ) + if err != nil { + log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) + return + } + err = db.DB.BatchInsertChat2DB(msgFromMQ.AggregationID, msgFromMQ.MessageList, msgFromMQ.TriggerID, msgFromMQ.LastSeq) + if err != nil { + log.NewError(msgFromMQ.TriggerID, "single data insert to mongo err", err.Error(), msgFromMQ.MessageList) + } + for _, v := range msgFromMQ.MessageList { + if v.MsgData.ContentType == constant.DeleteMessageNotification { + tips := server_api_params.TipsComm{} + DeleteMessageTips := server_api_params.DeleteMessageTips{} + err := proto.Unmarshal(v.MsgData.Content, &tips) + if err != nil { + log.NewError(msgFromMQ.TriggerID, "tips unmarshal err:", err.Error(), v.String()) + continue + } + err = proto.Unmarshal(tips.Detail, &DeleteMessageTips) + if err != nil { + log.NewError(msgFromMQ.TriggerID, "deleteMessageTips unmarshal err:", err.Error(), v.String()) + continue + } + if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { + log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) + } + + } + } +} + +func (OnlineHistoryMongoConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } +func (OnlineHistoryMongoConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } + +func (och *OnlineHistoryMongoConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, + claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group + log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) + for msg := range claim.Messages() { + log.NewDebug("", "kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) + if len(msg.Value) != 0 { + och.msgHandle[msg.Topic](msg, string(msg.Key), sess) + } else { + log.Error("", "mongo msg get from kafka but is nil", msg.Key) + } + sess.MarkMessage(msg, "") + } + return nil +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 185236744..de0d1597e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -213,10 +213,10 @@ type config struct { Topic string `yaml:"topic"` } ConsumerGroupID struct { - MsgToMongo string `yaml:"msgToMongo"` - MsgToMongoOffline string `yaml:"msgToMongoOffline"` - MsgToMySql string `yaml:"msgToMySql"` - MsgToPush string `yaml:"msgToPush"` + MsgToRedis string `yaml:"msgToRedis"` + MsgToMongo string `yaml:"msgToMongo"` + MsgToMySql string `yaml:"msgToMySql"` + MsgToPush string `yaml:"msgToPush"` } } Secret string `yaml:"secret"` From 8e3f090ffeae9b3832916c3062ef0e1cfac62f96 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Jun 2022 21:15:24 +0800 Subject: [PATCH 243/256] msg transfer handle change --- internal/msg_transfer/logic/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 177745c6f..168bfe785 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -53,7 +53,7 @@ func Run() { fmt.Println("not start mysql consumer") } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) - go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) + //go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) } func SetOnlineTopicStatus(status int) { From d1049b802254c7c2e885ec8a9e6d01ad20b78240 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 10:36:46 +0800 Subject: [PATCH 244/256] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 519b1f021..8c6807820 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -302,6 +302,6 @@ func GetRandomDepartmentID() (string, error) { return "", err } department := &db.Department{} - err = dbConn.Model(department).Where("related_group_id != ? AND parent_id != ?", "", "").Take(department).Error + err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ?", "").First(department).Error return department.DepartmentID, err } From 573937e1e5d240ecddeb1ba037ded028b1e5461f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:37:43 +0800 Subject: [PATCH 245/256] msg transfer handle change --- internal/msg_transfer/logic/init.go | 3 ++- internal/msg_transfer/logic/online_msg_to_mongo_handler.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 168bfe785..38d0e5b66 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -38,6 +38,7 @@ func Init() { w = new(sync.Mutex) persistentCH.Init() historyCH.Init(cmdCh) + historyMongoCH.Init() onlineTopicStatus = OnlineTopicVacancy //offlineHistoryCH.Init(cmdCh) statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) @@ -53,7 +54,7 @@ func Run() { fmt.Println("not start mysql consumer") } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) - //go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) + go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) } func SetOnlineTopicStatus(status int) { diff --git a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go index 1d71b8a1c..dae6571f8 100644 --- a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go +++ b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go @@ -18,7 +18,7 @@ type OnlineHistoryMongoConsumerHandler struct { historyConsumerGroup *kfk.MConsumerGroup } -func (och *OnlineHistoryMongoConsumerHandler) Init(cmdCh chan Cmd2Value) { +func (och *OnlineHistoryMongoConsumerHandler) Init() { och.msgHandle = make(map[string]fcb) och.msgHandle[config.Config.Kafka.MsgToMongo.Topic] = och.handleChatWs2Mongo och.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, From 365d282119a5cfffaa24d1efc0e812063c3d52e2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:39:02 +0800 Subject: [PATCH 246/256] compose file update --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index e75b022a4..52d488f4a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: TZ: Asia/Shanghai KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: 127.0.0.1:2181 - KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:2:1,msg_to_mongo:2:1" + KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1" KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9093 KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" From ed3b62480c01e97a804d8177a8d0818e83bc8a69 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 17 Jun 2022 10:43:24 +0800 Subject: [PATCH 247/256] log for etcd --- internal/rpc/msg/group_notification.go | 5 ++--- pkg/grpc-etcdv3/getcdv3/register.go | 23 +++++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 1b511dd0d..65aabffb9 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -101,7 +101,7 @@ func setPublicUserInfo(userID string, publicUserInfo *open_im_sdk.PublicUserInfo } func groupNotification(contentType int32, m proto.Message, sendID, groupID, recvUserID, operationID string) { - log.Info(operationID, utils.GetSelfFuncName(), "args: ", contentType) + log.Info(operationID, utils.GetSelfFuncName(), "args: ", contentType, sendID, groupID, recvUserID) var err error var tips open_im_sdk.TipsComm @@ -126,10 +126,9 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv if from != nil { nickname = from.Nickname } - to, err := imdb.GetUserByUserID(recvUserID) if err != nil { - log.Error(operationID, "GetUserByUserID failed ", err.Error(), recvUserID) + log.NewWarn(operationID, "GetUserByUserID failed ", err.Error(), recvUserID) } toNickname := "" if to != nil { diff --git a/pkg/grpc-etcdv3/getcdv3/register.go b/pkg/grpc-etcdv3/getcdv3/register.go index af96ffc29..7d877e058 100644 --- a/pkg/grpc-etcdv3/getcdv3/register.go +++ b/pkg/grpc-etcdv3/getcdv3/register.go @@ -2,6 +2,7 @@ package getcdv3 import ( "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" "context" "fmt" clientv3 "go.etcd.io/etcd/client/v3" @@ -38,12 +39,15 @@ func RegisterEtcd4Unique(schema, etcdAddr, myHost string, myPort int, serviceNam //etcdAddr separated by commas func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName string, ttl int) error { + operationID := utils.OperationIDGenerator() + args := schema + " " + etcdAddr + " " + myHost + " " + serviceName + " " + utils.Int32ToString(int32(myPort)) ttl = ttl * 3 cli, err := clientv3.New(clientv3.Config{ Endpoints: strings.Split(etcdAddr, ","), DialTimeout: 5 * time.Second}) - log.Info("", "RegisterEtcd, ", schema, etcdAddr, myHost, myPort, serviceName, ttl) + log.Info(operationID, "RegisterEtcd args: ", args, ttl) if err != nil { + log.Error(operationID, "clientv3.New failed ", args, ttl, err.Error()) return fmt.Errorf("create etcd clientv3 client failed, errmsg:%v, etcd addr:%s", err, etcdAddr) } @@ -51,8 +55,10 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin ctx, cancel := context.WithCancel(context.Background()) resp, err := cli.Grant(ctx, int64(ttl)) if err != nil { + log.Error(operationID, "Grant failed ", err.Error(), ctx, ttl) return fmt.Errorf("grant failed") } + log.Info(operationID, "Grant ok, resp ID ", resp.ID) // schema:///serviceName/ip:port ->ip:port serviceValue := net.JoinHostPort(myHost, strconv.Itoa(myPort)) @@ -60,24 +66,26 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin //set key->value if _, err := cli.Put(ctx, serviceKey, serviceValue, clientv3.WithLease(resp.ID)); err != nil { + log.Error(operationID, "cli.Put failed ", err.Error(), ctx, args, resp.ID) return fmt.Errorf("put failed, errmsg:%v, key:%s, value:%s", err, serviceKey, serviceValue) } //keepalive kresp, err := cli.KeepAlive(ctx, resp.ID) if err != nil { + log.Error(operationID, "KeepAlive failed ", err.Error(), args, resp.ID) return fmt.Errorf("keepalive failed, errmsg:%v, lease id:%d", err, resp.ID) } - //log.Info("", "RegisterEtcd ok ") + log.Info(operationID, "RegisterEtcd ok ", args) go func() { for { select { case pv, ok := <-kresp: if ok == true { - log.Debug("", "KeepAlive kresp ok", pv) + log.Debug(operationID, "KeepAlive kresp ok", pv) } else { - log.Error("", "KeepAlive kresp failed", pv) + log.Error(operationID, "KeepAlive kresp failed", pv) t := time.NewTicker(time.Duration(ttl/2) * time.Second) for { select { @@ -86,17 +94,16 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin ctx, _ := context.WithCancel(context.Background()) resp, err := cli.Grant(ctx, int64(ttl)) if err != nil { - log.Error("", "Grant failed ", err.Error()) + log.Error(operationID, "Grant failed ", err.Error()) continue } if _, err := cli.Put(ctx, serviceKey, serviceValue, clientv3.WithLease(resp.ID)); err != nil { - log.Error("", "etcd Put failed ", err.Error(), serviceKey, serviceValue, resp.ID) + log.Error(operationID, "etcd Put failed ", err.Error(), args, "resp ID: ", resp.ID) continue } else { - log.Info("", "etcd Put ok", serviceKey, serviceValue, resp.ID) + log.Info(operationID, "etcd Put ok ", args, "resp ID: ", resp.ID) } - } } } From 52ae2c3655bf9aa95f8896b1c582f572d1884cb0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 10:44:23 +0800 Subject: [PATCH 248/256] fix bug --- pkg/common/db/mysql_model/im_mysql_model/organization_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index 8c6807820..52b5bf245 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -302,6 +302,6 @@ func GetRandomDepartmentID() (string, error) { return "", err } department := &db.Department{} - err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ?", "").First(department).Error + err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ? AND department_id != ?", "", "0").First(department).Error return department.DepartmentID, err } From fd256a6c28ec0893bc55e773e0fe9d4007d5b33b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:50:15 +0800 Subject: [PATCH 249/256] config file update --- config/config.yaml | 6 +++--- pkg/common/config/config.go | 32 ++++++++++++++++---------------- pkg/common/db/model.go | 8 ++++---- test/mongo/cmd/main.go | 4 ++-- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 3143f3a0b..17991eef1 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -23,7 +23,7 @@ mysql: mongo: dbUri: ""#当dbUri值不为空则直接使用该值 - dbAddress: [ 127.0.0.1:37017 ] #mongo地址 目前仅支持单机,默认即可 + dbAddress: 127.0.0.1:37017 #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 dbDirect: false dbTimeout: 60 dbDatabase: openIM #mongo db 默认即可 @@ -34,12 +34,12 @@ mongo: dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 redis: - dbAddress: 127.0.0.1:16379 #redis地址 目前仅支持单机,默认即可 + dbAddress: [ 127.0.0.1:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 dbPassWord: openIM #redis密码 建议修改 - enableCluster: false + enableCluster: false #如果外部redis以集群方式启动,需要打开此开关 kafka: ws2mschat: diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index de0d1597e..39ee0f9fb 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -85,24 +85,24 @@ type config struct { DBMaxLifeTime int `yaml:"dbMaxLifeTime"` } Mongo struct { - DBUri string `yaml:"dbUri"` - DBAddress []string `yaml:"dbAddress"` - DBDirect bool `yaml:"dbDirect"` - DBTimeout int `yaml:"dbTimeout"` - DBDatabase string `yaml:"dbDatabase"` - DBSource string `yaml:"dbSource"` - DBUserName string `yaml:"dbUserName"` - DBPassword string `yaml:"dbPassword"` - DBMaxPoolSize int `yaml:"dbMaxPoolSize"` - DBRetainChatRecords int `yaml:"dbRetainChatRecords"` + DBUri string `yaml:"dbUri"` + DBAddress string `yaml:"dbAddress"` + DBDirect bool `yaml:"dbDirect"` + DBTimeout int `yaml:"dbTimeout"` + DBDatabase string `yaml:"dbDatabase"` + DBSource string `yaml:"dbSource"` + DBUserName string `yaml:"dbUserName"` + DBPassword string `yaml:"dbPassword"` + DBMaxPoolSize int `yaml:"dbMaxPoolSize"` + DBRetainChatRecords int `yaml:"dbRetainChatRecords"` } Redis struct { - DBAddress string `yaml:"dbAddress"` - DBMaxIdle int `yaml:"dbMaxIdle"` - DBMaxActive int `yaml:"dbMaxActive"` - DBIdleTimeout int `yaml:"dbIdleTimeout"` - DBPassWord string `yaml:"dbPassWord"` - EnableCluster bool `yaml:"enableCluster"` + DBAddress []string `yaml:"dbAddress"` + DBMaxIdle int `yaml:"dbMaxIdle"` + DBMaxActive int `yaml:"dbMaxActive"` + DBIdleTimeout int `yaml:"dbIdleTimeout"` + DBPassWord string `yaml:"dbPassWord"` + EnableCluster bool `yaml:"enableCluster"` } RpcPort struct { OpenImUserPort []int `yaml:"openImUserPort"` diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index bc8af133d..61912b670 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -56,11 +56,11 @@ func init() { uri = config.Config.Mongo.DBUri } else { if config.Config.Mongo.DBPassword != "" && config.Config.Mongo.DBUserName != "" { - uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress[0], + uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } else { uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d", - config.Config.Mongo.DBAddress[0], config.Config.Mongo.DBDatabase, + config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } } @@ -123,7 +123,7 @@ func init() { defer cancel() if config.Config.Redis.EnableCluster { DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ - Addrs: []string{config.Config.Redis.DBAddress}, + Addrs: config.Config.Redis.DBAddress, PoolSize: 50, }) _, err = DB.rdb.Ping(ctx).Result() @@ -132,7 +132,7 @@ func init() { } } else { DB.rdb = go_redis.NewClient(&go_redis.Options{ - Addr: config.Config.Redis.DBAddress, + Addr: config.Config.Redis.DBAddress[0], Password: config.Config.Redis.DBPassWord, // no password set DB: 0, // use default DB PoolSize: 100, // 连接池大小 diff --git a/test/mongo/cmd/main.go b/test/mongo/cmd/main.go index 2a8d41523..e2c6e99b8 100644 --- a/test/mongo/cmd/main.go +++ b/test/mongo/cmd/main.go @@ -17,11 +17,11 @@ func init() { uri = config.Config.Mongo.DBUri } else { if config.Config.Mongo.DBPassword != "" && config.Config.Mongo.DBUserName != "" { - uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress[0], + uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d", config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } else { uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d", - config.Config.Mongo.DBAddress[0], config.Config.Mongo.DBDatabase, + config.Config.Mongo.DBAddress, config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize) } } From 92cb2e7eab44e220d3c8b74fc9f56943555f822d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 10:59:50 +0800 Subject: [PATCH 250/256] config file update --- config/config.yaml | 4 ++-- pkg/common/config/config.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 17991eef1..a12f8af3d 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -55,8 +55,8 @@ kafka: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" consumergroupid: - msgToRedis: redis - msgToMongo: mongo + msgToTransfer: mongo + msgToMongo: mongo_ex msgToMySql: mysql msgToPush: push diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 39ee0f9fb..780ecee9c 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -213,7 +213,7 @@ type config struct { Topic string `yaml:"topic"` } ConsumerGroupID struct { - MsgToRedis string `yaml:"msgToRedis"` + MsgToRedis string `yaml:"msgToTransfer"` MsgToMongo string `yaml:"msgToMongo"` MsgToMySql string `yaml:"msgToMySql"` MsgToPush string `yaml:"msgToPush"` From 7fbdff391c107bdcb76b62523f41e49f9555783b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 11:09:48 +0800 Subject: [PATCH 251/256] fix bug --- internal/demo/register/onboarding_process.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index a4da17259..62630e126 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -261,7 +261,7 @@ func randomEnglishName() string { } func randomPosition() string { - l := []string{"Golang工程师", "前端工程师", "后端工程师", "产品经理", "测试开发工程师", "运维开发工程师"} + l := []string{"后端工程师", "前端工程师", "设计师"} rand.Seed(time.Now().UnixNano()) index := rand.Intn(len(l) - 1) return l[index] From 9443ed5d49d74f9002acfe155d1ecf9f34c869dc Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 17 Jun 2022 11:49:29 +0800 Subject: [PATCH 252/256] log for etcd --- pkg/grpc-etcdv3/getcdv3/register.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/grpc-etcdv3/getcdv3/register.go b/pkg/grpc-etcdv3/getcdv3/register.go index 7d877e058..4d9e3ee27 100644 --- a/pkg/grpc-etcdv3/getcdv3/register.go +++ b/pkg/grpc-etcdv3/getcdv3/register.go @@ -83,9 +83,9 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin select { case pv, ok := <-kresp: if ok == true { - log.Debug(operationID, "KeepAlive kresp ok", pv) + log.Debug(operationID, "KeepAlive kresp ok", pv, args) } else { - log.Error(operationID, "KeepAlive kresp failed", pv) + log.Error(operationID, "KeepAlive kresp failed ", pv, args) t := time.NewTicker(time.Duration(ttl/2) * time.Second) for { select { @@ -94,15 +94,15 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin ctx, _ := context.WithCancel(context.Background()) resp, err := cli.Grant(ctx, int64(ttl)) if err != nil { - log.Error(operationID, "Grant failed ", err.Error()) + log.Error(operationID, "Grant failed ", err.Error(), args) continue } if _, err := cli.Put(ctx, serviceKey, serviceValue, clientv3.WithLease(resp.ID)); err != nil { - log.Error(operationID, "etcd Put failed ", err.Error(), args, "resp ID: ", resp.ID) + log.Error(operationID, "etcd Put failed ", err.Error(), args, " resp ID: ", resp.ID) continue } else { - log.Info(operationID, "etcd Put ok ", args, "resp ID: ", resp.ID) + log.Info(operationID, "etcd Put ok ", args, " resp ID: ", resp.ID) } } } From c5eb8a3f9bf2f72430ce89b15a57b9f8a83caf79 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 12:09:42 +0800 Subject: [PATCH 253/256] =?UTF-8?q?=E5=85=A5=E8=81=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.yaml | 1 + internal/rpc/msg/group_notification.go | 20 +++++++++++-------- pkg/common/config/config.go | 5 +++-- .../mysql_model/im_mysql_model/user_model.go | 6 +++++- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index a12f8af3d..fcf70aaf6 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -222,6 +222,7 @@ manager: #app管理员userID和对应的secret 建议修改。 用于管理后台登录,也可以用户管理后台对应的api appManagerUid: [ "openIM123456","openIM654321", "openIM333", "openIMAdmin"] secrets: [ "openIM1","openIM2", "openIM333", "openIMAdmin"] + appSysNotificationName: "系统通知" secret: tuoyun # 多端互踢策略 diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 65aabffb9..d2c6172fa 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -117,15 +117,19 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv } tips.JsonDetail, _ = marshaler.MarshalToString(m) - - from, err := imdb.GetUserByUserID(sendID) - if err != nil { - log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) - } - nickname := "" - if from != nil { - nickname = from.Nickname + var nickname string + if utils.IsContain(sendID, config.Config.Manager.AppManagerUid) { + nickname = sendID + } else { + from, err := imdb.GetUserByUserID(sendID) + if err != nil { + log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) + } + if from != nil { + nickname = from.Nickname + } } + to, err := imdb.GetUserByUserID(recvUserID) if err != nil { log.NewWarn(operationID, "GetUserByUserID failed ", err.Error(), recvUserID) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 780ecee9c..2163e7619 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -191,8 +191,9 @@ type config struct { } } Manager struct { - AppManagerUid []string `yaml:"appManagerUid"` - Secrets []string `yaml:"secrets"` + AppManagerUid []string `yaml:"appManagerUid"` + Secrets []string `yaml:"secrets"` + AppSysNotificationName string `yaml:"appSysNotificationName"` } Kafka struct { diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index 8882f6931..1598bac4e 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -22,7 +22,11 @@ func init() { } var appMgr db.User appMgr.UserID = v - appMgr.Nickname = "AppManager" + utils.IntToString(k+1) + if k == 0 { + appMgr.Nickname = config.Config.Manager.AppSysNotificationName + } else { + appMgr.Nickname = "AppManager" + utils.IntToString(k+1) + } appMgr.AppMangerLevel = constant.AppAdmin err = UserRegister(appMgr) if err != nil { From 007065b40ec52da5921849ca75b301a57cc0c103 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 17 Jun 2022 12:36:05 +0800 Subject: [PATCH 254/256] =?UTF-8?q?=E5=85=A5=E8=81=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/demo/register/onboarding_process.go | 2 +- internal/rpc/msg/group_notification.go | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 62630e126..647fbe3c5 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -174,7 +174,7 @@ func joinGroups(operationID, userID, userName string, groupIDList []string) { GroupID: groupID, Reason: "register auto join", InvitedUserIDList: []string{userID}, - OpUserID: config.Config.Manager.AppManagerUid[0], + OpUserID: config.Config.Manager.AppManagerUid[1], } resp, err := client.InviteUserToGroup(context.Background(), req) if err != nil { diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index d2c6172fa..258764485 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -36,7 +36,6 @@ func setOpUserInfo(opUserID, groupID string, groupMemberInfo *open_im_sdk.GroupM return utils.Wrap(err, "") } } - user, err := imdb.GetUserByUserID(opUserID) if err != nil { return utils.Wrap(err, "") @@ -118,16 +117,13 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv tips.JsonDetail, _ = marshaler.MarshalToString(m) var nickname string - if utils.IsContain(sendID, config.Config.Manager.AppManagerUid) { - nickname = sendID - } else { - from, err := imdb.GetUserByUserID(sendID) - if err != nil { - log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) - } - if from != nil { - nickname = from.Nickname - } + + from, err := imdb.GetUserByUserID(sendID) + if err != nil { + log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID) + } + if from != nil { + nickname = from.Nickname } to, err := imdb.GetUserByUserID(recvUserID) From 9b5bd477608c95b70d3187dd57c88ad5fb1316f4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 12:39:26 +0800 Subject: [PATCH 255/256] config file update --- internal/push/logic/push_to_client.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 7f94e7870..439cc1028 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -69,9 +69,11 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { return } } - if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { - log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) - return + if pushMsg.MsgData.ContentType == constant.SignalingNotification { + if err := db.DB.HandleSignalInfo(pushMsg.OperationID, pushMsg.MsgData); err != nil { + log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), err.Error(), pushMsg.MsgData) + return + } } //Use offline push messaging var UIDList []string From 5601212f5886dd70baf1e9c2361a095b84e42804 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 17 Jun 2022 15:48:40 +0800 Subject: [PATCH 256/256] config file update --- config/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.yaml b/config/config.yaml index fcf70aaf6..923b95591 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -234,7 +234,7 @@ chatpersistencemysql: true #可靠性存储 reliablestorage: false #消息缓存时间 -msgCacheTimeout: 1800 +msgCacheTimeout: 86400 #群聊已读开启 groupMessageHasReadReceiptEnable: true #单聊已读开启