From 7adde6a0a9a955cdff0a78da3da31a17b951673d Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 14 Dec 2021 14:53:27 +0800 Subject: [PATCH 01/19] notification --- config/config.yaml | 13 ++ internal/rpc/chat/send_msg.go | 29 ++- internal/rpc/group/create_group.go | 19 ++ pkg/common/config/config.go | 19 +- pkg/proto/sdk_ws/ws.pb.go | 351 ++++++++++++++++++----------- pkg/proto/sdk_ws/ws.proto | 22 +- 6 files changed, 306 insertions(+), 147 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 02dbc6638..33899fbae 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -160,6 +160,19 @@ messagecallback: stateChange: switch: false +notification: + offlinePush: + switch: true + createGroup: + title: "create group title" + desc: "create group desc" + ext: "create group ext" + quitGroup: + title: "quit group title" + desc: "quit group desc" + ext: "quit group ext" + + #---------------demo configuration---------------------# #The following configuration items are applied to openIM Demo configuration demoswitch: true diff --git a/internal/rpc/chat/send_msg.go b/internal/rpc/chat/send_msg.go index d237c2507..cc865e66a 100644 --- a/internal/rpc/chat/send_msg.go +++ b/internal/rpc/chat/send_msg.go @@ -6,6 +6,7 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" + "Open_IM/pkg/common/db/mysql_model/im_mysql_model" http2 "Open_IM/pkg/common/http" "Open_IM/pkg/common/log" "Open_IM/pkg/grpc-etcdv3/getcdv3" @@ -203,17 +204,35 @@ type WSToMsgSvrChatMsg struct { OperationID string `protobuf:"bytes,10,opt,name=OperationID" json:"OperationID,omitempty"` } -func CreateGroupNotification(SendID, RecvID string, tip open_im_sdk.CreateGroupTip) { +func CreateGroupNotification(sendID string, creator im_mysql_model.User, group im_mysql_model.Group, memberList []im_mysql_model.GroupMember) { var msg WSToMsgSvrChatMsg msg.OperationID = utils.OperationIDGenerator() - msg.SendID = SendID - msg.RecvID = RecvID + msg.SendID = sendID + msg.RecvID = group.GroupId msg.ContentType = constant.CreateGroupTip - msg.SessionType = constant.SysMsgType + msg.SessionType = constant.GroupChatType + msg.MsgFrom = constant.SysMsgType + var tip open_im_sdk.CreateGroupTip + tip.Group = &open_im_sdk.GroupInfoTip{} + utils.CopyStructFields(tip.Group, group) + tip.Creator = &open_im_sdk.UserInfoTip{} + utils.CopyStructFields(tip.Creator, creator) + for _, v := range memberList { + var groupMemberInfo open_im_sdk.GroupMemberFullInfoTip + utils.CopyStructFields(&groupMemberInfo, v) + tip.MemberList = append(tip.MemberList, &groupMemberInfo) + } + + msg.Content = utils.StructToJsonString(tip) + var offlinePushInfo open_im_sdk.OfflinePushInfo + offlinePushInfo.Title = "create group title" + offlinePushInfo.Desc = "create group desc" + offlinePushInfo.Ext = "create group ext" + Notification(&msg, false, offlinePushInfo) } -func Notification(m *WSToMsgSvrChatMsg, onlineUserOnly bool, offlineInfo open_im_sdk.OfflinePushInfo) { +func Notification(m *WSToMsgSvrChatMsg, onlineUserOnly bool, offlinePushInfo open_im_sdk.OfflinePushInfo) { } diff --git a/internal/rpc/group/create_group.go b/internal/rpc/group/create_group.go index 35e6616ee..e36048304 100644 --- a/internal/rpc/group/create_group.go +++ b/internal/rpc/group/create_group.go @@ -3,6 +3,7 @@ package group import ( "Open_IM/internal/push/content_struct" "Open_IM/internal/push/logic" + "Open_IM/internal/rpc/chat" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" "Open_IM/pkg/common/db" @@ -12,6 +13,7 @@ import ( "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/chat" pbGroup "Open_IM/pkg/proto/group" + open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" "google.golang.org/grpc" @@ -157,6 +159,23 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR }) } + var tip open_im_sdk.CreateGroupTip + groupInfo, err := im_mysql_model.FindGroupInfoByGroupId(groupId) + if err != nil { + return &pbGroup.CreateGroupResp{ErrorCode: constant.ErrCreateGroup.ErrCode, ErrorMsg: constant.ErrCreateGroup.ErrMsg}, nil + } + + creatorInfo, err := im_mysql_model.FindUserByUID(claims.UID) + if err != nil { + + } + + memberList, err := im_mysql_model.FindGroupMemberListByGroupId(groupId) + if err != nil { + + } + chat.CreateGroupNotification(claims.UID, *creatorInfo, *groupInfo, memberList) + log.Info(req.Token, req.OperationID, "rpc create group success return") return &pbGroup.CreateGroupResp{GroupID: groupId}, nil } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index f7bb65935..05ce6e9e1 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -1,7 +1,7 @@ package config import ( - "gopkg.in/yaml.v3" + "fmt" "io/ioutil" "path/filepath" "runtime" @@ -172,6 +172,21 @@ type config struct { SmtpPort int `yaml:"smtpPort"` } } + Notification struct { + OfflinePush struct { + Switch bool `yaml:"switch"` + } + CreateGroup struct { + Title string `yaml:"title"` + Desc string `yaml:"desc"` + Ext string `yaml:"ext"` + } + QuiteGroup struct { + Title string `yaml:"title"` + Desc string `yaml:"desc"` + Ext string `yaml:"ext"` + } + } } func init() { @@ -186,5 +201,5 @@ func init() { if err = yaml.Unmarshal(bytes, &Config); err != nil { panic(err.Error()) } - + fmt.Println("init load config: ", Config) } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 7e1115f94..bdaa3ab97 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -32,7 +32,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_d55c44e342c7a2b5, []int{0} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{0} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -91,7 +91,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_d55c44e342c7a2b5, []int{1} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{1} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -128,7 +128,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_d55c44e342c7a2b5, []int{2} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{2} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -160,7 +160,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_d55c44e342c7a2b5, []int{3} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{3} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -208,7 +208,7 @@ func (m *GatherFormat) Reset() { *m = GatherFormat{} } func (m *GatherFormat) String() string { return proto.CompactTextString(m) } func (*GatherFormat) ProtoMessage() {} func (*GatherFormat) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d55c44e342c7a2b5, []int{4} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{4} } func (m *GatherFormat) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GatherFormat.Unmarshal(m, b) @@ -276,7 +276,7 @@ func (m *MsgFormat) Reset() { *m = MsgFormat{} } func (m *MsgFormat) String() string { return proto.CompactTextString(m) } func (*MsgFormat) ProtoMessage() {} func (*MsgFormat) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d55c44e342c7a2b5, []int{5} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{5} } func (m *MsgFormat) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgFormat.Unmarshal(m, b) @@ -401,7 +401,7 @@ func (m *UserSendMsgReq) Reset() { *m = UserSendMsgReq{} } func (m *UserSendMsgReq) String() string { return proto.CompactTextString(m) } func (*UserSendMsgReq) ProtoMessage() {} func (*UserSendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d55c44e342c7a2b5, []int{6} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{6} } func (m *UserSendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgReq.Unmarshal(m, b) @@ -511,7 +511,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_d55c44e342c7a2b5, []int{7} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{7} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -575,7 +575,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_d55c44e342c7a2b5, []int{8} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{8} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -699,7 +699,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_d55c44e342c7a2b5, []int{9} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{9} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -759,7 +759,7 @@ func (m *GroupInfoTip) Reset() { *m = GroupInfoTip{} } func (m *GroupInfoTip) String() string { return proto.CompactTextString(m) } func (*GroupInfoTip) ProtoMessage() {} func (*GroupInfoTip) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d55c44e342c7a2b5, []int{10} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{10} } func (m *GroupInfoTip) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoTip.Unmarshal(m, b) @@ -842,6 +842,138 @@ func (m *GroupInfoTip) GetMemberCount() uint32 { return 0 } +type GroupMemberFullInfoTip struct { + GroupId string `protobuf:"bytes,1,opt,name=GroupId" json:"GroupId,omitempty"` + UserId string `protobuf:"bytes,2,opt,name=UserId" json:"UserId,omitempty"` + Role int32 `protobuf:"varint,3,opt,name=Role" json:"Role,omitempty"` + JoinTime uint64 `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"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupMemberFullInfoTip) Reset() { *m = GroupMemberFullInfoTip{} } +func (m *GroupMemberFullInfoTip) String() string { return proto.CompactTextString(m) } +func (*GroupMemberFullInfoTip) ProtoMessage() {} +func (*GroupMemberFullInfoTip) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{11} +} +func (m *GroupMemberFullInfoTip) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberFullInfoTip.Unmarshal(m, b) +} +func (m *GroupMemberFullInfoTip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberFullInfoTip.Marshal(b, m, deterministic) +} +func (dst *GroupMemberFullInfoTip) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberFullInfoTip.Merge(dst, src) +} +func (m *GroupMemberFullInfoTip) XXX_Size() int { + return xxx_messageInfo_GroupMemberFullInfoTip.Size(m) +} +func (m *GroupMemberFullInfoTip) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberFullInfoTip.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMemberFullInfoTip proto.InternalMessageInfo + +func (m *GroupMemberFullInfoTip) GetGroupId() string { + if m != nil { + return m.GroupId + } + return "" +} + +func (m *GroupMemberFullInfoTip) GetUserId() string { + if m != nil { + return m.UserId + } + return "" +} + +func (m *GroupMemberFullInfoTip) GetRole() int32 { + if m != nil { + return m.Role + } + return 0 +} + +func (m *GroupMemberFullInfoTip) GetJoinTime() uint64 { + if m != nil { + return m.JoinTime + } + return 0 +} + +func (m *GroupMemberFullInfoTip) GetNickName() string { + if m != nil { + return m.NickName + } + return "" +} + +func (m *GroupMemberFullInfoTip) GetFaceUrl() string { + if m != nil { + return m.FaceUrl + } + return "" +} + +type CreateGroupTip struct { + Group *GroupInfoTip `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` + Creator *UserInfoTip `protobuf:"bytes,2,opt,name=Creator" json:"Creator,omitempty"` + MemberList []*GroupMemberFullInfoTip `protobuf:"bytes,3,rep,name=MemberList" json:"MemberList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateGroupTip) Reset() { *m = CreateGroupTip{} } +func (m *CreateGroupTip) String() string { return proto.CompactTextString(m) } +func (*CreateGroupTip) ProtoMessage() {} +func (*CreateGroupTip) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{12} +} +func (m *CreateGroupTip) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateGroupTip.Unmarshal(m, b) +} +func (m *CreateGroupTip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateGroupTip.Marshal(b, m, deterministic) +} +func (dst *CreateGroupTip) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateGroupTip.Merge(dst, src) +} +func (m *CreateGroupTip) XXX_Size() int { + return xxx_messageInfo_CreateGroupTip.Size(m) +} +func (m *CreateGroupTip) XXX_DiscardUnknown() { + xxx_messageInfo_CreateGroupTip.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateGroupTip proto.InternalMessageInfo + +func (m *CreateGroupTip) GetGroup() *GroupInfoTip { + if m != nil { + return m.Group + } + return nil +} + +func (m *CreateGroupTip) GetCreator() *UserInfoTip { + if m != nil { + return m.Creator + } + return nil +} + +func (m *CreateGroupTip) GetMemberList() []*GroupMemberFullInfoTip { + if m != nil { + return m.MemberList + } + return nil +} + type UserInfoTip struct { UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` Name string `protobuf:"bytes,2,opt,name=Name" json:"Name,omitempty"` @@ -860,7 +992,7 @@ func (m *UserInfoTip) Reset() { *m = UserInfoTip{} } func (m *UserInfoTip) String() string { return proto.CompactTextString(m) } func (*UserInfoTip) ProtoMessage() {} func (*UserInfoTip) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d55c44e342c7a2b5, []int{11} + return fileDescriptor_ws_0e67cfdf7b3776b1, []int{13} } func (m *UserInfoTip) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoTip.Unmarshal(m, b) @@ -936,60 +1068,6 @@ func (m *UserInfoTip) GetEx() string { return "" } -type CreateGroupTip struct { - Group *GroupInfoTip `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` - Creator *UserInfoTip `protobuf:"bytes,2,opt,name=creator" json:"creator,omitempty"` - MemberList []*UserInfoTip `protobuf:"bytes,3,rep,name=memberList" json:"memberList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CreateGroupTip) Reset() { *m = CreateGroupTip{} } -func (m *CreateGroupTip) String() string { return proto.CompactTextString(m) } -func (*CreateGroupTip) ProtoMessage() {} -func (*CreateGroupTip) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d55c44e342c7a2b5, []int{12} -} -func (m *CreateGroupTip) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateGroupTip.Unmarshal(m, b) -} -func (m *CreateGroupTip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateGroupTip.Marshal(b, m, deterministic) -} -func (dst *CreateGroupTip) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateGroupTip.Merge(dst, src) -} -func (m *CreateGroupTip) XXX_Size() int { - return xxx_messageInfo_CreateGroupTip.Size(m) -} -func (m *CreateGroupTip) XXX_DiscardUnknown() { - xxx_messageInfo_CreateGroupTip.DiscardUnknown(m) -} - -var xxx_messageInfo_CreateGroupTip proto.InternalMessageInfo - -func (m *CreateGroupTip) GetGroup() *GroupInfoTip { - if m != nil { - return m.Group - } - return nil -} - -func (m *CreateGroupTip) GetCreator() *UserInfoTip { - if m != nil { - return m.Creator - } - return nil -} - -func (m *CreateGroupTip) GetMemberList() []*UserInfoTip { - if m != nil { - return m.MemberList - } - return nil -} - func init() { proto.RegisterType((*PullMessageBySeqListResp)(nil), "open_im_sdk.PullMessageBySeqListResp") proto.RegisterType((*PullMessageBySeqListReq)(nil), "open_im_sdk.PullMessageBySeqListReq") @@ -1003,76 +1081,81 @@ func init() { proto.RegisterType((*MsgData)(nil), "open_im_sdk.MsgData") proto.RegisterType((*OfflinePushInfo)(nil), "open_im_sdk.OfflinePushInfo") proto.RegisterType((*GroupInfoTip)(nil), "open_im_sdk.GroupInfoTip") - proto.RegisterType((*UserInfoTip)(nil), "open_im_sdk.UserInfoTip") + proto.RegisterType((*GroupMemberFullInfoTip)(nil), "open_im_sdk.GroupMemberFullInfoTip") proto.RegisterType((*CreateGroupTip)(nil), "open_im_sdk.CreateGroupTip") + proto.RegisterType((*UserInfoTip)(nil), "open_im_sdk.UserInfoTip") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_d55c44e342c7a2b5) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_0e67cfdf7b3776b1) } -var fileDescriptor_ws_d55c44e342c7a2b5 = []byte{ - // 1021 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xcb, 0x6e, 0x23, 0xb7, - 0x12, 0x85, 0xba, 0xf5, 0x2c, 0xc9, 0xf6, 0x80, 0xd7, 0xf0, 0xed, 0x0c, 0x82, 0x40, 0x68, 0x04, - 0x81, 0x30, 0x0b, 0x19, 0xf0, 0x6c, 0x06, 0x13, 0x04, 0x41, 0x6c, 0xc9, 0x86, 0x82, 0x91, 0x6d, - 0xb4, 0x3c, 0x9b, 0x6c, 0x8c, 0x76, 0x8b, 0x92, 0x1b, 0xee, 0x87, 0xd4, 0xa4, 0x6c, 0xf9, 0x3f, - 0xb2, 0xcd, 0x37, 0x64, 0x9d, 0x5f, 0xc8, 0x22, 0x7f, 0x14, 0x20, 0xa8, 0x22, 0x5b, 0x26, 0x25, - 0xe7, 0xb1, 0xe3, 0x39, 0xaa, 0x22, 0x59, 0xe7, 0x54, 0xb5, 0x08, 0x07, 0x62, 0xfa, 0x70, 0xfb, - 0x24, 0x8e, 0x9f, 0x44, 0x7f, 0x51, 0xe4, 0x32, 0x67, 0xed, 0x7c, 0xc1, 0xb3, 0xdb, 0x38, 0xbd, - 0x15, 0xd3, 0x07, 0xff, 0xf7, 0x0a, 0x78, 0xd7, 0xab, 0x24, 0x19, 0x73, 0x21, 0xc2, 0x39, 0x3f, - 0x7d, 0x9e, 0xf0, 0xe5, 0xa7, 0x58, 0xc8, 0x80, 0x8b, 0x05, 0x3b, 0x82, 0xfa, 0x38, 0x5c, 0x4f, - 0xf8, 0xd2, 0xab, 0x74, 0x2b, 0x3d, 0x37, 0xd0, 0x88, 0xf8, 0x38, 0x43, 0xde, 0xd1, 0x3c, 0x21, - 0xf6, 0x3d, 0xec, 0x4d, 0xe2, 0x6c, 0x9e, 0xf0, 0xcf, 0x82, 0x17, 0x63, 0x31, 0xf7, 0xdc, 0xae, - 0xdb, 0x6b, 0x9f, 0x7c, 0xd1, 0x37, 0x4e, 0xec, 0x5f, 0x84, 0xf2, 0x9e, 0x17, 0xe7, 0x79, 0x91, - 0x86, 0x32, 0xb0, 0xe3, 0xd9, 0x77, 0xd0, 0xb9, 0x28, 0xf2, 0xd5, 0xa2, 0xcc, 0xaf, 0xfe, 0x5b, - 0xbe, 0x15, 0xee, 0xbf, 0x87, 0xff, 0xbf, 0x5e, 0xcb, 0x92, 0x79, 0xd0, 0x10, 0x0a, 0x79, 0x95, - 0xae, 0xdb, 0x73, 0x83, 0x12, 0xfa, 0x87, 0xc0, 0x2e, 0xb8, 0x1c, 0x87, 0xeb, 0x1f, 0xb2, 0xa9, - 0xaa, 0x23, 0xe0, 0x4b, 0x7f, 0x08, 0xff, 0xdb, 0x61, 0x95, 0x22, 0xa9, 0xa5, 0x48, 0xba, 0x51, - 0x24, 0xb5, 0x14, 0x51, 0xc8, 0xff, 0x11, 0x3a, 0xe6, 0x7d, 0xd9, 0x3e, 0x38, 0xa3, 0x01, 0xe5, - 0xb6, 0x02, 0x67, 0x34, 0x60, 0xef, 0xa0, 0x4a, 0x77, 0x72, 0xa8, 0xd0, 0x23, 0xab, 0xd0, 0xb1, - 0x98, 0xeb, 0x2a, 0x29, 0xc6, 0xff, 0xd3, 0x81, 0xd6, 0x86, 0xc3, 0x13, 0x27, 0x3c, 0x9b, 0x6e, - 0x76, 0xd3, 0x08, 0xf9, 0x80, 0x47, 0x8f, 0xa3, 0x01, 0xdd, 0xa4, 0x15, 0x68, 0x84, 0x02, 0x60, - 0x72, 0x91, 0xa7, 0x9e, 0xdb, 0xad, 0xf4, 0x6a, 0x41, 0x09, 0x59, 0x17, 0xda, 0x67, 0x79, 0x26, - 0x79, 0x26, 0x6f, 0x9e, 0x17, 0xdc, 0xab, 0xd2, 0xaf, 0x26, 0x85, 0x11, 0x13, 0x5e, 0x3c, 0x92, - 0xc8, 0xa3, 0x81, 0x57, 0xa3, 0x8d, 0x4d, 0x0a, 0x77, 0xd7, 0x09, 0x5e, 0x9d, 0x7e, 0x2d, 0x21, - 0x7b, 0x03, 0x2e, 0xca, 0xd2, 0x20, 0x59, 0x70, 0xc9, 0xde, 0x42, 0x13, 0xef, 0x7a, 0x13, 0xa7, - 0xdc, 0x6b, 0x12, 0xbd, 0xc1, 0xec, 0x1d, 0xbc, 0xc1, 0x35, 0x2f, 0xae, 0x93, 0x50, 0xce, 0xf2, - 0x22, 0x1d, 0x0d, 0xbc, 0x16, 0x5d, 0x68, 0x87, 0x67, 0xdf, 0xc0, 0xbe, 0xe2, 0x2e, 0xe3, 0xe8, - 0xe1, 0x32, 0x4c, 0xb9, 0x07, 0x74, 0xf4, 0x16, 0xcb, 0xbe, 0x86, 0x3d, 0xc5, 0x9c, 0x87, 0x11, - 0xff, 0x1c, 0x7c, 0xf2, 0xda, 0x14, 0x66, 0x93, 0xa4, 0x42, 0x12, 0xf3, 0x4c, 0xaa, 0x1a, 0x3b, - 0xaa, 0x46, 0x83, 0xf2, 0xff, 0x70, 0x61, 0x1f, 0x3b, 0x0d, 0xf3, 0xc6, 0x62, 0x8e, 0x5d, 0x75, - 0x0a, 0x8d, 0xab, 0x85, 0x8c, 0xf3, 0x4c, 0x50, 0x57, 0xb5, 0x4f, 0x7a, 0x96, 0x83, 0x76, 0x74, - 0x5f, 0x87, 0x0e, 0x33, 0x59, 0x3c, 0x07, 0x65, 0xe2, 0x2b, 0x65, 0x38, 0xff, 0xad, 0x0c, 0xf7, - 0xb5, 0x32, 0xbe, 0x02, 0x30, 0xa4, 0x53, 0x5e, 0x1a, 0x8c, 0xb2, 0x52, 0x88, 0x38, 0xcf, 0xc8, - 0xec, 0x9a, 0x32, 0xdb, 0xa0, 0xcc, 0x46, 0xa9, 0xff, 0x63, 0xa3, 0x34, 0x76, 0x1b, 0xe5, 0xa5, - 0xf9, 0x9a, 0x56, 0xf3, 0x7d, 0x09, 0xad, 0xf3, 0xbc, 0x88, 0x38, 0xf5, 0x7a, 0xab, 0xeb, 0xf6, - 0x5a, 0xc1, 0x0b, 0x61, 0x36, 0x0f, 0xd8, 0xcd, 0xb3, 0x65, 0x4a, 0x7b, 0xc7, 0x94, 0xb7, 0x1f, - 0xa1, 0x63, 0xca, 0x8a, 0xed, 0xf6, 0xc0, 0x9f, 0xf5, 0x4c, 0xe0, 0x92, 0x1d, 0x42, 0xed, 0x31, - 0x4c, 0x56, 0x4a, 0xd6, 0x5a, 0xa0, 0xc0, 0x47, 0xe7, 0x43, 0xc5, 0x5f, 0xc2, 0x81, 0xe5, 0x90, - 0x58, 0x6c, 0x77, 0x7a, 0x65, 0xb7, 0xd3, 0xb7, 0xae, 0xe4, 0xec, 0x5c, 0x09, 0xfb, 0x5b, 0x94, - 0xfd, 0xed, 0xaa, 0xfe, 0x2e, 0xb1, 0xff, 0x8b, 0x4b, 0xea, 0x0e, 0x42, 0x19, 0xa2, 0x58, 0xc2, - 0x9a, 0x60, 0xb1, 0x99, 0xe0, 0xc2, 0x9a, 0x60, 0x85, 0xf0, 0x64, 0x61, 0x58, 0xa7, 0xa6, 0xd8, - 0xa4, 0x50, 0xc8, 0x54, 0x5b, 0xa7, 0x9c, 0x2f, 0x21, 0xe6, 0x46, 0x86, 0x75, 0xda, 0xf6, 0xc8, - 0x9e, 0x71, 0x61, 0x54, 0xae, 0xa6, 0xd8, 0xa4, 0x70, 0x77, 0x9d, 0x40, 0xd6, 0xb7, 0x82, 0x12, - 0x5a, 0x15, 0x37, 0xed, 0x8a, 0xd1, 0x10, 0xc1, 0x97, 0x34, 0xc4, 0x6e, 0x80, 0x4b, 0x9c, 0x71, - 0xb1, 0x3d, 0xe3, 0xa0, 0x66, 0x5c, 0xbc, 0x32, 0xe3, 0xc2, 0x1e, 0x0e, 0xd5, 0x03, 0x5b, 0x2c, - 0x0e, 0x87, 0xb0, 0x86, 0x43, 0xcd, 0xaf, 0x4d, 0x92, 0x0a, 0x86, 0x77, 0x7b, 0xaa, 0x46, 0x83, - 0xf2, 0xc7, 0x70, 0x70, 0x35, 0x9b, 0x25, 0x71, 0xc6, 0xaf, 0x57, 0xe2, 0x7e, 0x94, 0xcd, 0x72, - 0xec, 0x9f, 0x9b, 0x58, 0x26, 0x5c, 0xbb, 0xa4, 0x00, 0x63, 0x50, 0x1d, 0x70, 0x11, 0x69, 0x8b, - 0x68, 0x8d, 0xa5, 0x0e, 0xd7, 0x52, 0xcf, 0x25, 0x2e, 0xfd, 0x9f, 0x1d, 0xfd, 0x87, 0x86, 0x3b, - 0xdd, 0xc4, 0x0b, 0xd4, 0x50, 0xe1, 0xd2, 0xf4, 0x12, 0xe2, 0x88, 0xd0, 0xd2, 0xf8, 0x02, 0xbc, - 0x10, 0xcc, 0x87, 0xce, 0x65, 0x2e, 0xe3, 0x59, 0x1c, 0x85, 0xd8, 0xec, 0xfa, 0x0c, 0x8b, 0xc3, - 0x98, 0x51, 0x26, 0x8b, 0x7c, 0xba, 0x8a, 0x28, 0xa6, 0xaa, 0x62, 0x4c, 0x0e, 0xcf, 0x27, 0x31, - 0x8a, 0x44, 0x7f, 0xc5, 0x4b, 0x88, 0xff, 0x4c, 0xc3, 0xb5, 0xb6, 0xdd, 0x19, 0xae, 0x31, 0xf2, - 0xea, 0x29, 0xe3, 0xc5, 0x68, 0x50, 0xba, 0xad, 0x21, 0x7e, 0x62, 0xce, 0x0a, 0x1e, 0x4a, 0xbe, - 0xf1, 0xbb, 0x1a, 0x18, 0x0c, 0xaa, 0x3c, 0xe6, 0xe9, 0x1d, 0x2f, 0xce, 0xf2, 0x55, 0x26, 0xc9, - 0xf9, 0xbd, 0xc0, 0xa4, 0xfc, 0xdf, 0x2a, 0xd0, 0xc6, 0xc9, 0x2b, 0x55, 0x39, 0x82, 0x3a, 0xc1, - 0xcd, 0x24, 0x28, 0x84, 0x22, 0x1b, 0x72, 0xd0, 0x1a, 0xb9, 0x51, 0xb4, 0x51, 0x80, 0xd6, 0x98, - 0x7f, 0x41, 0x46, 0xeb, 0xb6, 0xd7, 0x88, 0xde, 0x29, 0xf9, 0x5d, 0x9c, 0x70, 0x5d, 0xac, 0x46, - 0x68, 0xe9, 0x69, 0x5c, 0xc8, 0x7b, 0x5d, 0xae, 0x02, 0xc8, 0x0e, 0xd3, 0x30, 0x4e, 0x74, 0xbd, - 0x0a, 0x68, 0x5d, 0x9a, 0xa5, 0x2e, 0xfe, 0xaf, 0x15, 0xd8, 0x57, 0xc5, 0x92, 0x3b, 0x78, 0xfd, - 0x63, 0xa8, 0xcd, 0x71, 0x4d, 0xb7, 0xdf, 0x79, 0xae, 0x18, 0xf6, 0x07, 0x2a, 0x8e, 0x9d, 0x40, - 0x23, 0xc2, 0x2d, 0xf2, 0x82, 0x4a, 0x6b, 0x9f, 0x78, 0x3b, 0x7f, 0x1b, 0x65, 0x46, 0x19, 0xc8, - 0x3e, 0x00, 0xa4, 0x24, 0x21, 0x7d, 0x43, 0xd5, 0xc3, 0xea, 0xef, 0xd3, 0x8c, 0xd8, 0xd3, 0xa3, - 0x9f, 0x0e, 0xfb, 0xc7, 0xea, 0x11, 0xf8, 0xad, 0x11, 0x7f, 0x57, 0xa7, 0xe7, 0xe0, 0xfb, 0xbf, - 0x02, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x41, 0x03, 0xcb, 0x21, 0x0a, 0x00, 0x00, +var fileDescriptor_ws_0e67cfdf7b3776b1 = []byte{ + // 1078 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5d, 0x4f, 0xe3, 0x46, + 0x14, 0x95, 0xed, 0x04, 0xc8, 0x0d, 0xb0, 0xab, 0x29, 0xa2, 0xee, 0xaa, 0xaa, 0x22, 0xb7, 0xaa, + 0xa2, 0x7d, 0x00, 0x89, 0x7d, 0xa9, 0xb6, 0xaa, 0xaa, 0x42, 0x02, 0xf2, 0x6a, 0x03, 0x68, 0x60, + 0x5f, 0xfa, 0x82, 0x8c, 0x33, 0x80, 0x85, 0x3f, 0x12, 0x8f, 0x03, 0xe1, 0x7f, 0xf4, 0xb5, 0xff, + 0xa1, 0xaf, 0xed, 0x4f, 0xe8, 0x43, 0xff, 0x51, 0xa5, 0xea, 0xde, 0x19, 0x9b, 0x99, 0x18, 0xb5, + 0x7d, 0x9b, 0x73, 0x72, 0xc7, 0x33, 0xf7, 0x9c, 0x73, 0x1d, 0xc3, 0x2b, 0x39, 0xbd, 0xbf, 0x7a, + 0x94, 0xfb, 0x8f, 0x72, 0x6f, 0x56, 0x16, 0x55, 0xc1, 0xfa, 0xc5, 0x4c, 0xe4, 0x57, 0x49, 0x76, + 0x25, 0xa7, 0xf7, 0xc1, 0x9f, 0x0e, 0xf8, 0xe7, 0x8b, 0x34, 0x9d, 0x08, 0x29, 0xa3, 0x5b, 0x71, + 0xf8, 0x74, 0x21, 0xe6, 0x1f, 0x13, 0x59, 0x71, 0x21, 0x67, 0x6c, 0x17, 0xd6, 0x26, 0xd1, 0xf2, + 0x42, 0xcc, 0x7d, 0x67, 0xe0, 0x0c, 0x3d, 0xae, 0x11, 0xf1, 0x49, 0x8e, 0xbc, 0xab, 0x79, 0x42, + 0xec, 0x47, 0xd8, 0xba, 0x48, 0xf2, 0xdb, 0x54, 0x7c, 0x92, 0xa2, 0x9c, 0xc8, 0x5b, 0xdf, 0x1b, + 0x78, 0xc3, 0xfe, 0xc1, 0x17, 0x7b, 0xc6, 0x89, 0x7b, 0x27, 0x51, 0x75, 0x27, 0xca, 0xe3, 0xa2, + 0xcc, 0xa2, 0x8a, 0xdb, 0xf5, 0xec, 0x07, 0xd8, 0x3c, 0x29, 0x8b, 0xc5, 0xac, 0xde, 0xdf, 0xf9, + 0xaf, 0xfd, 0x56, 0x79, 0xf0, 0x0e, 0x3e, 0x7f, 0xb9, 0x97, 0x39, 0xf3, 0x61, 0x5d, 0x2a, 0xe4, + 0x3b, 0x03, 0x6f, 0xe8, 0xf1, 0x1a, 0x06, 0x3b, 0xc0, 0x4e, 0x44, 0x35, 0x89, 0x96, 0x3f, 0xe5, + 0x53, 0xd5, 0x07, 0x17, 0xf3, 0x60, 0x0c, 0x9f, 0xb5, 0x58, 0xa5, 0x48, 0x66, 0x29, 0x92, 0x35, + 0x8a, 0x64, 0x96, 0x22, 0x0a, 0x05, 0x1f, 0x60, 0xd3, 0xbc, 0x2f, 0xdb, 0x06, 0x37, 0x1c, 0xd1, + 0xde, 0x1e, 0x77, 0xc3, 0x11, 0x7b, 0x0b, 0x1d, 0xba, 0x93, 0x4b, 0x8d, 0xee, 0x5a, 0x8d, 0x4e, + 0xe4, 0xad, 0xee, 0x92, 0x6a, 0x82, 0xbf, 0x5d, 0xe8, 0x35, 0x1c, 0x9e, 0x78, 0x21, 0xf2, 0x69, + 0xf3, 0x34, 0x8d, 0x90, 0xe7, 0x22, 0x7e, 0x08, 0x47, 0x74, 0x93, 0x1e, 0xd7, 0x08, 0x05, 0xc0, + 0xcd, 0x65, 0x91, 0xf9, 0xde, 0xc0, 0x19, 0x76, 0x79, 0x0d, 0xd9, 0x00, 0xfa, 0x47, 0x45, 0x5e, + 0x89, 0xbc, 0xba, 0x7c, 0x9a, 0x09, 0xbf, 0x43, 0xbf, 0x9a, 0x14, 0x56, 0x5c, 0x88, 0xf2, 0x81, + 0x44, 0x0e, 0x47, 0x7e, 0x97, 0x1e, 0x6c, 0x52, 0xf8, 0x74, 0xbd, 0xc1, 0x5f, 0xa3, 0x5f, 0x6b, + 0xc8, 0x5e, 0x83, 0x87, 0xb2, 0xac, 0x93, 0x2c, 0xb8, 0x64, 0x6f, 0x60, 0x03, 0xef, 0x7a, 0x99, + 0x64, 0xc2, 0xdf, 0x20, 0xba, 0xc1, 0xec, 0x2d, 0xbc, 0xc6, 0xb5, 0x28, 0xcf, 0xd3, 0xa8, 0xba, + 0x29, 0xca, 0x2c, 0x1c, 0xf9, 0x3d, 0xba, 0x50, 0x8b, 0x67, 0xdf, 0xc2, 0xb6, 0xe2, 0x4e, 0x93, + 0xf8, 0xfe, 0x34, 0xca, 0x84, 0x0f, 0x74, 0xf4, 0x0a, 0xcb, 0xbe, 0x81, 0x2d, 0xc5, 0x1c, 0x47, + 0xb1, 0xf8, 0xc4, 0x3f, 0xfa, 0x7d, 0x2a, 0xb3, 0x49, 0x52, 0x21, 0x4d, 0x44, 0x5e, 0xa9, 0x1e, + 0x37, 0x55, 0x8f, 0x06, 0x15, 0xfc, 0xe5, 0xc1, 0x36, 0x26, 0x0d, 0xf7, 0x4d, 0xe4, 0x2d, 0xa6, + 0xea, 0x10, 0xd6, 0xcf, 0x66, 0x55, 0x52, 0xe4, 0x92, 0x52, 0xd5, 0x3f, 0x18, 0x5a, 0x0e, 0xda, + 0xd5, 0x7b, 0xba, 0x74, 0x9c, 0x57, 0xe5, 0x13, 0xaf, 0x37, 0xbe, 0xd0, 0x86, 0xfb, 0xff, 0xda, + 0xf0, 0x5e, 0x6a, 0xe3, 0x2b, 0x00, 0x43, 0x3a, 0xe5, 0xa5, 0xc1, 0x28, 0x2b, 0xa5, 0x4c, 0x8a, + 0x9c, 0xcc, 0xee, 0x2a, 0xb3, 0x0d, 0xca, 0x0c, 0xca, 0xda, 0xbf, 0x06, 0x65, 0xbd, 0x1d, 0x94, + 0xe7, 0xf0, 0x6d, 0x58, 0xe1, 0xfb, 0x12, 0x7a, 0xc7, 0x45, 0x19, 0x0b, 0xca, 0x7a, 0x6f, 0xe0, + 0x0d, 0x7b, 0xfc, 0x99, 0x30, 0xc3, 0x03, 0x76, 0x78, 0x56, 0x4c, 0xe9, 0xb7, 0x4c, 0x79, 0xf3, + 0x1e, 0x36, 0x4d, 0x59, 0x31, 0x6e, 0xf7, 0xe2, 0x49, 0xcf, 0x04, 0x2e, 0xd9, 0x0e, 0x74, 0x1f, + 0xa2, 0x74, 0xa1, 0x64, 0xed, 0x72, 0x05, 0xde, 0xbb, 0xdf, 0x39, 0xc1, 0x1c, 0x5e, 0x59, 0x0e, + 0xc9, 0xd9, 0x6a, 0xd2, 0x9d, 0x76, 0xd2, 0x57, 0xae, 0xe4, 0xb6, 0xae, 0x84, 0xf9, 0x96, 0x75, + 0xbe, 0x3d, 0x95, 0xef, 0x1a, 0x07, 0xbf, 0x7a, 0xa4, 0xee, 0x28, 0xaa, 0x22, 0x14, 0x4b, 0x5a, + 0x13, 0x2c, 0x9b, 0x09, 0x2e, 0xad, 0x09, 0x56, 0x08, 0x4f, 0x96, 0x86, 0x75, 0x6a, 0x8a, 0x4d, + 0x0a, 0x85, 0xcc, 0xb4, 0x75, 0xca, 0xf9, 0x1a, 0xe2, 0xde, 0xd8, 0xb0, 0x4e, 0xdb, 0x1e, 0xdb, + 0x33, 0x2e, 0x8d, 0xce, 0xd5, 0x14, 0x9b, 0x14, 0x3e, 0x5d, 0x6f, 0x20, 0xeb, 0x7b, 0xbc, 0x86, + 0x56, 0xc7, 0x1b, 0x76, 0xc7, 0x68, 0x88, 0x14, 0x73, 0x1a, 0x62, 0x8f, 0xe3, 0x12, 0x67, 0x5c, + 0xae, 0xce, 0x38, 0xa8, 0x19, 0x97, 0x2f, 0xcc, 0xb8, 0xb4, 0x87, 0x43, 0x65, 0x60, 0x85, 0xc5, + 0xe1, 0x90, 0xd6, 0x70, 0xa8, 0xf9, 0xb5, 0x49, 0x52, 0xc1, 0xf0, 0x6e, 0x4b, 0xf5, 0x68, 0x50, + 0xc1, 0x04, 0x5e, 0x9d, 0xdd, 0xdc, 0xa4, 0x49, 0x2e, 0xce, 0x17, 0xf2, 0x2e, 0xcc, 0x6f, 0x0a, + 0xcc, 0xcf, 0x65, 0x52, 0xa5, 0x42, 0xbb, 0xa4, 0x00, 0x63, 0xd0, 0x19, 0x09, 0x19, 0x6b, 0x8b, + 0x68, 0x8d, 0xad, 0x8e, 0x97, 0x95, 0x9e, 0x4b, 0x5c, 0x06, 0xbf, 0xb8, 0xfa, 0x0f, 0x0d, 0x9f, + 0x74, 0x99, 0xcc, 0x50, 0x43, 0x85, 0x6b, 0xd3, 0x6b, 0x88, 0x23, 0x42, 0x4b, 0xe3, 0x0d, 0xf0, + 0x4c, 0xb0, 0x00, 0x36, 0x4f, 0x8b, 0x2a, 0xb9, 0x49, 0xe2, 0x08, 0xc3, 0xae, 0xcf, 0xb0, 0x38, + 0xac, 0x09, 0xf3, 0xaa, 0x2c, 0xa6, 0x8b, 0x98, 0x6a, 0x3a, 0xaa, 0xc6, 0xe4, 0xf0, 0x7c, 0x12, + 0xa3, 0x4c, 0xf5, 0x5b, 0xbc, 0x86, 0xf8, 0xcf, 0x34, 0x5e, 0x6a, 0xdb, 0xdd, 0xf1, 0x12, 0x2b, + 0xcf, 0x1e, 0x73, 0x51, 0x86, 0xa3, 0xda, 0x6d, 0x0d, 0xf1, 0x15, 0x73, 0x54, 0x8a, 0xa8, 0x12, + 0x8d, 0xdf, 0x1d, 0x6e, 0x30, 0xa8, 0xf2, 0x44, 0x64, 0xd7, 0xa2, 0x3c, 0x2a, 0x16, 0x79, 0x45, + 0xce, 0x6f, 0x71, 0x93, 0x0a, 0x7e, 0x73, 0x60, 0x97, 0x7a, 0x53, 0xe4, 0xf1, 0x22, 0x4d, 0x5b, + 0x02, 0x4d, 0x6d, 0x81, 0xa6, 0x38, 0x16, 0x38, 0xad, 0xe1, 0xb4, 0x1e, 0x0b, 0x85, 0xd0, 0x09, + 0x5e, 0xa4, 0xf5, 0x3c, 0xd0, 0x1a, 0x03, 0xf9, 0xa1, 0x48, 0x72, 0xba, 0x60, 0x87, 0x2e, 0xd8, + 0x60, 0xfc, 0xad, 0x09, 0x93, 0xd2, 0xa0, 0xc1, 0xa6, 0x3c, 0x6b, 0x96, 0x3c, 0xc1, 0x1f, 0x0e, + 0x6c, 0xab, 0x1e, 0xe9, 0x3e, 0x78, 0xd5, 0x7d, 0xe8, 0xd2, 0x9a, 0x2e, 0xda, 0xfa, 0x4a, 0x31, + 0x5c, 0xe7, 0xaa, 0x8e, 0x1d, 0xc0, 0x3a, 0x3d, 0xa2, 0x28, 0xa9, 0x85, 0xfe, 0x81, 0xdf, 0xfa, + 0xb7, 0xa8, 0x77, 0xd4, 0x85, 0xec, 0x08, 0x40, 0x89, 0x44, 0xaf, 0x4e, 0xf5, 0x3d, 0xf5, 0x75, + 0xfb, 0xa4, 0x96, 0x90, 0xdc, 0xd8, 0x16, 0xfc, 0xee, 0x40, 0xdf, 0x78, 0x7a, 0x23, 0x65, 0xf3, + 0xe6, 0x51, 0x08, 0xa5, 0x34, 0xe2, 0x47, 0x6b, 0xe4, 0xc2, 0xb8, 0x49, 0x1c, 0xad, 0x71, 0xff, + 0x09, 0x0d, 0x96, 0x7e, 0xcd, 0x68, 0x44, 0xdf, 0x85, 0xc5, 0x75, 0x92, 0xd6, 0xc2, 0x6a, 0x84, + 0x23, 0x74, 0x98, 0x94, 0xd5, 0x9d, 0x16, 0x55, 0x01, 0x64, 0xc7, 0x59, 0x94, 0xa4, 0x3a, 0x5f, + 0x0a, 0xe8, 0x1c, 0x6e, 0xd4, 0x39, 0x3c, 0xdc, 0xfd, 0x79, 0x67, 0x6f, 0x5f, 0x7d, 0xc2, 0x7e, + 0x6f, 0xb4, 0x7d, 0xbd, 0x46, 0x1f, 0xb3, 0xef, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xce, + 0xa8, 0xe0, 0xdf, 0x0a, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 9b9d805b4..5ffc7bcdd 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -107,10 +107,10 @@ message GroupInfoTip{ -type GroupMemberFullInfoTip struct { +message GroupMemberFullInfoTip { string GroupId = 1 ; string UserId = 2 ; - int Role = 3; + int32 Role = 3; uint64 JoinTime = 4; string NickName = 5; string FaceUrl =6; @@ -119,10 +119,20 @@ type GroupMemberFullInfoTip struct { message CreateGroupTip{ - GroupInfoTip group = 1; - UserInfoTip creator = 2; - repeated GroupMemberFullInfoTip memberList = 3; + GroupInfoTip Group = 1; + UserInfoTip Creator = 2; + repeated GroupMemberFullInfoTip MemberList = 3; +} + +message UserInfoTip { + string UserID = 1; + string Name = 2; + string Icon = 3; + int32 Gender = 4; + string Mobile = 5; + string Birth = 6; + string Email = 7; + string Ex = 8; } - From b84dbbc3b8c18d33b16aed4c60ef1833397cec2a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 14 Dec 2021 15:11:35 +0800 Subject: [PATCH 02/19] notification --- cmd/Open-IM-SDK-Core | 2 +- internal/rpc/chat/send_msg.go | 6 ++--- internal/rpc/group/create_group.go | 43 +++++------------------------- 3 files changed, 11 insertions(+), 40 deletions(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 369973051..a85c10dbf 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 369973051405db1102fd1b99a0226ab79b9922e0 +Subproject commit a85c10dbffbb797b5b2091e209ff67a5534b9bfc diff --git a/internal/rpc/chat/send_msg.go b/internal/rpc/chat/send_msg.go index cc865e66a..f72404789 100644 --- a/internal/rpc/chat/send_msg.go +++ b/internal/rpc/chat/send_msg.go @@ -226,9 +226,9 @@ func CreateGroupNotification(sendID string, creator im_mysql_model.User, group i msg.Content = utils.StructToJsonString(tip) var offlinePushInfo open_im_sdk.OfflinePushInfo - offlinePushInfo.Title = "create group title" - offlinePushInfo.Desc = "create group desc" - offlinePushInfo.Ext = "create group ext" + offlinePushInfo.Title = config.Config.Notification.CreateGroup.Title + offlinePushInfo.Desc = config.Config.Notification.CreateGroup.Desc + offlinePushInfo.Ext = config.Config.Notification.CreateGroup.Ext Notification(&msg, false, offlinePushInfo) } diff --git a/internal/rpc/group/create_group.go b/internal/rpc/group/create_group.go index e36048304..826a08615 100644 --- a/internal/rpc/group/create_group.go +++ b/internal/rpc/group/create_group.go @@ -1,8 +1,6 @@ package group import ( - "Open_IM/internal/push/content_struct" - "Open_IM/internal/push/logic" "Open_IM/internal/rpc/chat" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" @@ -11,9 +9,7 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" - pbChat "Open_IM/pkg/proto/chat" pbGroup "Open_IM/pkg/proto/group" - open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" "google.golang.org/grpc" @@ -71,7 +67,7 @@ func (s *groupServer) Run() { } func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) { - log.InfoByArgs("rpc create group is server,args=%s", req.String()) + log.NewInfo(req.OperationID, "rpc create group is server,args=%s", req.String()) var ( groupId string ) @@ -133,49 +129,24 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } } - if isMagagerFlag == 1 { - - //type NotificationContent struct { - // IsDisplay int32 `json:"isDisplay"` - // DefaultTips string `json:"defaultTips"` - // Detail string `json:"detail"` - //} n := NotificationContent{ - // IsDisplay: 1, - // DefaultTips: "You have joined the group chat:" + createGroupResp.Data.GroupName, - // Detail: createGroupResp.Data.GroupId, - // } - - ////Push message when create group chat - n := content_struct.NotificationContent{1, req.GroupName, groupId} - logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{ - SendID: claims.UID, - RecvID: groupId, - Content: n.ContentToString(), - SendTime: utils.GetCurrentTimestampByNano(), - MsgFrom: constant.SysMsgType, //Notification message identification - ContentType: constant.CreateGroupTip, //Add friend flag - SessionType: constant.GroupChatType, - OperationID: req.OperationID, - }) - } - - var tip open_im_sdk.CreateGroupTip groupInfo, err := im_mysql_model.FindGroupInfoByGroupId(groupId) if err != nil { + log.NewError(req.OperationID, "FindGroupInfoByGroupId failed ", groupId) return &pbGroup.CreateGroupResp{ErrorCode: constant.ErrCreateGroup.ErrCode, ErrorMsg: constant.ErrCreateGroup.ErrMsg}, nil } creatorInfo, err := im_mysql_model.FindUserByUID(claims.UID) if err != nil { - + log.NewError(req.OperationID, "FindUserByUID failed ", claims.UID) + return &pbGroup.CreateGroupResp{ErrorCode: constant.ErrCreateGroup.ErrCode, ErrorMsg: constant.ErrCreateGroup.ErrMsg}, nil } memberList, err := im_mysql_model.FindGroupMemberListByGroupId(groupId) if err != nil { - + log.NewError(req.OperationID, "FindGroupMemberListByGroupId failed ", groupId) } - chat.CreateGroupNotification(claims.UID, *creatorInfo, *groupInfo, memberList) - log.Info(req.Token, req.OperationID, "rpc create group success return") + log.NewInfo(req.OperationID, "creator, group, member list: ", *creatorInfo, *groupInfo, memberList) + chat.CreateGroupNotification(claims.UID, *creatorInfo, *groupInfo, memberList) return &pbGroup.CreateGroupResp{GroupID: groupId}, nil } From 264451d9235f1064f93a61a5a8dfce485484a82f Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sun, 19 Dec 2021 21:03:05 +0800 Subject: [PATCH 03/19] notification --- config/config.yaml | 38 +- internal/rpc/chat/send_msg.go | 28 +- pkg/common/config/config.go | 35 +- pkg/proto/sdk_ws/ws.pb.go | 1648 ++++++++++++++++++++++++++++----- pkg/proto/sdk_ws/ws.proto | 179 +++- 5 files changed, 1640 insertions(+), 288 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 33899fbae..fc1f924fe 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -160,17 +160,35 @@ messagecallback: stateChange: switch: false +iOSPush: + pushSound: "xxx" + badgeCount: 1 + notification: - offlinePush: - switch: true - createGroup: - title: "create group title" - desc: "create group desc" - ext: "create group ext" - quitGroup: - title: "quit group title" - desc: "quit group desc" - ext: "quit group ext" + groupCreated: + conversation: + conversationChanged: 1 + unreadCount: 1 + offlinePush: + switch: true + title: "create group title" + desc: "create group desc" + ext: "create group ext" + defaultTips: + tips: "create the group" # xx create the group + + groupInfoChanged: + conversation: + conversationChanged: 1 + unreadCount: 1 + offlinePush: + switch: true + title: "group info changed title" + desc: "group info changed desc" + ext: "group info changed ext" + defaultTips: + tips: "group info changed by" # group info changed by xx + conversationChanged: 0 #---------------demo configuration---------------------# diff --git a/internal/rpc/chat/send_msg.go b/internal/rpc/chat/send_msg.go index f72404789..640309c91 100644 --- a/internal/rpc/chat/send_msg.go +++ b/internal/rpc/chat/send_msg.go @@ -213,26 +213,24 @@ func CreateGroupNotification(sendID string, creator im_mysql_model.User, group i msg.SessionType = constant.GroupChatType msg.MsgFrom = constant.SysMsgType - var tip open_im_sdk.CreateGroupTip - tip.Group = &open_im_sdk.GroupInfoTip{} - utils.CopyStructFields(tip.Group, group) - tip.Creator = &open_im_sdk.UserInfoTip{} - utils.CopyStructFields(tip.Creator, creator) + var groupCreated open_im_sdk.GroupCreatedTips + groupCreated.Group = &open_im_sdk.GroupInfo{} + utils.CopyStructFields(groupCreated.Group, group) + groupCreated.Creator = &open_im_sdk.GroupMemberFullInfo{} + utils.CopyStructFields(groupCreated.Creator, creator) for _, v := range memberList { - var groupMemberInfo open_im_sdk.GroupMemberFullInfoTip + var groupMemberInfo open_im_sdk.GroupMemberFullInfo utils.CopyStructFields(&groupMemberInfo, v) - tip.MemberList = append(tip.MemberList, &groupMemberInfo) + groupCreated.MemberList = append(groupCreated.MemberList, &groupMemberInfo) } - - msg.Content = utils.StructToJsonString(tip) - var offlinePushInfo open_im_sdk.OfflinePushInfo - offlinePushInfo.Title = config.Config.Notification.CreateGroup.Title - offlinePushInfo.Desc = config.Config.Notification.CreateGroup.Desc - offlinePushInfo.Ext = config.Config.Notification.CreateGroup.Ext - Notification(&msg, false, offlinePushInfo) + var tips open_im_sdk.TipsComm + tips.Detail = utils.StructToJsonString(groupCreated) + tips.DefaultTips = creator.Name + " " + config.Config.DefaultTips.GroupCreatedTips + msg.Content = utils.StructToJsonString(tips) + Notification(&msg, false) } -func Notification(m *WSToMsgSvrChatMsg, onlineUserOnly bool, offlinePushInfo open_im_sdk.OfflinePushInfo) { +func Notification(m *WSToMsgSvrChatMsg, onlineUserOnly bool) { } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 05ce6e9e1..05b9ae904 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -172,19 +172,30 @@ type config struct { SmtpPort int `yaml:"smtpPort"` } } + //notification: + // groupCreated: + // offlinePush: + // switch: true + // title: "create group title" + // desc: "create group desc" + // ext: "create group ext" + // defaultTips: + // tips: "create the group" # xx create the group + // conversationChanged: 1 + // + Notification struct { - OfflinePush struct { - Switch bool `yaml:"switch"` - } - CreateGroup struct { - Title string `yaml:"title"` - Desc string `yaml:"desc"` - Ext string `yaml:"ext"` - } - QuiteGroup struct { - Title string `yaml:"title"` - Desc string `yaml:"desc"` - Ext string `yaml:"ext"` + GroupCreated struct { + OfflinePush struct { + Switch bool `yaml:"switch"` + Title string `yaml:"title"` + Desc string `yaml:"desc"` + Ext string `yaml:"ext"` + } + DefaultTips struct { + GroupCreatedTips string `yaml:"croupCreatedTips"` + GroupInfoChangedTips string `yaml:"groupInfoChangedTips"` + } } } } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index bdaa3ab97..5ac2ab6c6 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -32,7 +32,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_0e67cfdf7b3776b1, []int{0} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{0} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -91,7 +91,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_0e67cfdf7b3776b1, []int{1} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{1} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -128,7 +128,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_0e67cfdf7b3776b1, []int{2} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{2} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -160,7 +160,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_0e67cfdf7b3776b1, []int{3} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{3} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -208,7 +208,7 @@ func (m *GatherFormat) Reset() { *m = GatherFormat{} } func (m *GatherFormat) String() string { return proto.CompactTextString(m) } func (*GatherFormat) ProtoMessage() {} func (*GatherFormat) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_0e67cfdf7b3776b1, []int{4} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{4} } func (m *GatherFormat) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GatherFormat.Unmarshal(m, b) @@ -276,7 +276,7 @@ func (m *MsgFormat) Reset() { *m = MsgFormat{} } func (m *MsgFormat) String() string { return proto.CompactTextString(m) } func (*MsgFormat) ProtoMessage() {} func (*MsgFormat) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_0e67cfdf7b3776b1, []int{5} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{5} } func (m *MsgFormat) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgFormat.Unmarshal(m, b) @@ -401,7 +401,7 @@ func (m *UserSendMsgReq) Reset() { *m = UserSendMsgReq{} } func (m *UserSendMsgReq) String() string { return proto.CompactTextString(m) } func (*UserSendMsgReq) ProtoMessage() {} func (*UserSendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_0e67cfdf7b3776b1, []int{6} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{6} } func (m *UserSendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgReq.Unmarshal(m, b) @@ -511,7 +511,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_0e67cfdf7b3776b1, []int{7} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{7} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -575,7 +575,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_0e67cfdf7b3776b1, []int{8} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{8} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -699,7 +699,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_0e67cfdf7b3776b1, []int{9} + return fileDescriptor_ws_e632726fa8a2c9ae, []int{9} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -740,241 +740,198 @@ func (m *OfflinePushInfo) GetExt() string { return "" } -type GroupInfoTip 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"` - Ex string `protobuf:"bytes,6,opt,name=Ex" json:"Ex,omitempty"` - OwnerID string `protobuf:"bytes,7,opt,name=OwnerID" json:"OwnerID,omitempty"` - CreateTime uint64 `protobuf:"varint,8,opt,name=CreateTime" json:"CreateTime,omitempty"` - MemberCount uint32 `protobuf:"varint,9,opt,name=MemberCount" json:"MemberCount,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +// public +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"` + Ex string `protobuf:"bytes,6,opt,name=Ex" json:"Ex,omitempty"` + Owner *PublicUserInfo `protobuf:"bytes,7,opt,name=Owner" json:"Owner,omitempty"` + CreateTime uint64 `protobuf:"varint,8,opt,name=CreateTime" json:"CreateTime,omitempty"` + MemberCount uint32 `protobuf:"varint,9,opt,name=MemberCount" json:"MemberCount,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *GroupInfoTip) Reset() { *m = GroupInfoTip{} } -func (m *GroupInfoTip) String() string { return proto.CompactTextString(m) } -func (*GroupInfoTip) ProtoMessage() {} -func (*GroupInfoTip) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_0e67cfdf7b3776b1, []int{10} +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_e632726fa8a2c9ae, []int{10} } -func (m *GroupInfoTip) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupInfoTip.Unmarshal(m, b) +func (m *GroupInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupInfo.Unmarshal(m, b) } -func (m *GroupInfoTip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupInfoTip.Marshal(b, m, deterministic) +func (m *GroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupInfo.Marshal(b, m, deterministic) } -func (dst *GroupInfoTip) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupInfoTip.Merge(dst, src) +func (dst *GroupInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupInfo.Merge(dst, src) } -func (m *GroupInfoTip) XXX_Size() int { - return xxx_messageInfo_GroupInfoTip.Size(m) +func (m *GroupInfo) XXX_Size() int { + return xxx_messageInfo_GroupInfo.Size(m) } -func (m *GroupInfoTip) XXX_DiscardUnknown() { - xxx_messageInfo_GroupInfoTip.DiscardUnknown(m) +func (m *GroupInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GroupInfo.DiscardUnknown(m) } -var xxx_messageInfo_GroupInfoTip proto.InternalMessageInfo +var xxx_messageInfo_GroupInfo proto.InternalMessageInfo -func (m *GroupInfoTip) GetGroupID() string { +func (m *GroupInfo) GetGroupID() string { if m != nil { return m.GroupID } return "" } -func (m *GroupInfoTip) GetGroupName() string { +func (m *GroupInfo) GetGroupName() string { if m != nil { return m.GroupName } return "" } -func (m *GroupInfoTip) GetNotification() string { +func (m *GroupInfo) GetNotification() string { if m != nil { return m.Notification } return "" } -func (m *GroupInfoTip) GetIntroduction() string { +func (m *GroupInfo) GetIntroduction() string { if m != nil { return m.Introduction } return "" } -func (m *GroupInfoTip) GetFaceUrl() string { +func (m *GroupInfo) GetFaceUrl() string { if m != nil { return m.FaceUrl } return "" } -func (m *GroupInfoTip) GetEx() string { +func (m *GroupInfo) GetEx() string { if m != nil { return m.Ex } return "" } -func (m *GroupInfoTip) GetOwnerID() string { +func (m *GroupInfo) GetOwner() *PublicUserInfo { if m != nil { - return m.OwnerID + return m.Owner } - return "" + return nil } -func (m *GroupInfoTip) GetCreateTime() uint64 { +func (m *GroupInfo) GetCreateTime() uint64 { if m != nil { return m.CreateTime } return 0 } -func (m *GroupInfoTip) GetMemberCount() uint32 { +func (m *GroupInfo) GetMemberCount() uint32 { if m != nil { return m.MemberCount } return 0 } -type GroupMemberFullInfoTip struct { - GroupId string `protobuf:"bytes,1,opt,name=GroupId" json:"GroupId,omitempty"` - UserId string `protobuf:"bytes,2,opt,name=UserId" json:"UserId,omitempty"` +// private, Group members have permission to view +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"` Role int32 `protobuf:"varint,3,opt,name=Role" json:"Role,omitempty"` JoinTime uint64 `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"` + FriendRemark string `protobuf:"bytes,7,opt,name=FriendRemark" json:"FriendRemark,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } -func (m *GroupMemberFullInfoTip) Reset() { *m = GroupMemberFullInfoTip{} } -func (m *GroupMemberFullInfoTip) String() string { return proto.CompactTextString(m) } -func (*GroupMemberFullInfoTip) ProtoMessage() {} -func (*GroupMemberFullInfoTip) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_0e67cfdf7b3776b1, []int{11} +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_e632726fa8a2c9ae, []int{11} } -func (m *GroupMemberFullInfoTip) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GroupMemberFullInfoTip.Unmarshal(m, b) +func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) } -func (m *GroupMemberFullInfoTip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GroupMemberFullInfoTip.Marshal(b, m, deterministic) +func (m *GroupMemberFullInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberFullInfo.Marshal(b, m, deterministic) } -func (dst *GroupMemberFullInfoTip) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupMemberFullInfoTip.Merge(dst, src) +func (dst *GroupMemberFullInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberFullInfo.Merge(dst, src) } -func (m *GroupMemberFullInfoTip) XXX_Size() int { - return xxx_messageInfo_GroupMemberFullInfoTip.Size(m) +func (m *GroupMemberFullInfo) XXX_Size() int { + return xxx_messageInfo_GroupMemberFullInfo.Size(m) } -func (m *GroupMemberFullInfoTip) XXX_DiscardUnknown() { - xxx_messageInfo_GroupMemberFullInfoTip.DiscardUnknown(m) +func (m *GroupMemberFullInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberFullInfo.DiscardUnknown(m) } -var xxx_messageInfo_GroupMemberFullInfoTip proto.InternalMessageInfo +var xxx_messageInfo_GroupMemberFullInfo proto.InternalMessageInfo -func (m *GroupMemberFullInfoTip) GetGroupId() string { +func (m *GroupMemberFullInfo) GetGroupID() string { if m != nil { - return m.GroupId + return m.GroupID } return "" } -func (m *GroupMemberFullInfoTip) GetUserId() string { +func (m *GroupMemberFullInfo) GetUserID() string { if m != nil { - return m.UserId + return m.UserID } return "" } -func (m *GroupMemberFullInfoTip) GetRole() int32 { +func (m *GroupMemberFullInfo) GetRole() int32 { if m != nil { return m.Role } return 0 } -func (m *GroupMemberFullInfoTip) GetJoinTime() uint64 { +func (m *GroupMemberFullInfo) GetJoinTime() uint64 { if m != nil { return m.JoinTime } return 0 } -func (m *GroupMemberFullInfoTip) GetNickName() string { +func (m *GroupMemberFullInfo) GetNickName() string { if m != nil { return m.NickName } return "" } -func (m *GroupMemberFullInfoTip) GetFaceUrl() string { +func (m *GroupMemberFullInfo) GetFaceUrl() string { if m != nil { return m.FaceUrl } return "" } -type CreateGroupTip struct { - Group *GroupInfoTip `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` - Creator *UserInfoTip `protobuf:"bytes,2,opt,name=Creator" json:"Creator,omitempty"` - MemberList []*GroupMemberFullInfoTip `protobuf:"bytes,3,rep,name=MemberList" json:"MemberList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CreateGroupTip) Reset() { *m = CreateGroupTip{} } -func (m *CreateGroupTip) String() string { return proto.CompactTextString(m) } -func (*CreateGroupTip) ProtoMessage() {} -func (*CreateGroupTip) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_0e67cfdf7b3776b1, []int{12} -} -func (m *CreateGroupTip) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateGroupTip.Unmarshal(m, b) -} -func (m *CreateGroupTip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateGroupTip.Marshal(b, m, deterministic) -} -func (dst *CreateGroupTip) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateGroupTip.Merge(dst, src) -} -func (m *CreateGroupTip) XXX_Size() int { - return xxx_messageInfo_CreateGroupTip.Size(m) -} -func (m *CreateGroupTip) XXX_DiscardUnknown() { - xxx_messageInfo_CreateGroupTip.DiscardUnknown(m) -} - -var xxx_messageInfo_CreateGroupTip proto.InternalMessageInfo - -func (m *CreateGroupTip) GetGroup() *GroupInfoTip { +func (m *GroupMemberFullInfo) GetFriendRemark() string { if m != nil { - return m.Group + return m.FriendRemark } - return nil + return "" } -func (m *CreateGroupTip) GetCreator() *UserInfoTip { - if m != nil { - return m.Creator - } - return nil -} - -func (m *CreateGroupTip) GetMemberList() []*GroupMemberFullInfoTip { - if m != nil { - return m.MemberList - } - return nil -} - -type UserInfoTip struct { +// private, Friends have permission to view +type UserInfo struct { UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` Name string `protobuf:"bytes,2,opt,name=Name" json:"Name,omitempty"` Icon string `protobuf:"bytes,3,opt,name=Icon" json:"Icon,omitempty"` @@ -988,86 +945,1265 @@ type UserInfoTip struct { XXX_sizecache int32 `json:"-"` } -func (m *UserInfoTip) Reset() { *m = UserInfoTip{} } -func (m *UserInfoTip) String() string { return proto.CompactTextString(m) } -func (*UserInfoTip) ProtoMessage() {} -func (*UserInfoTip) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_0e67cfdf7b3776b1, []int{13} +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_e632726fa8a2c9ae, []int{12} } -func (m *UserInfoTip) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfoTip.Unmarshal(m, b) +func (m *UserInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserInfo.Unmarshal(m, b) } -func (m *UserInfoTip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfoTip.Marshal(b, m, deterministic) +func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserInfo.Marshal(b, m, deterministic) } -func (dst *UserInfoTip) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfoTip.Merge(dst, src) +func (dst *UserInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserInfo.Merge(dst, src) } -func (m *UserInfoTip) XXX_Size() int { - return xxx_messageInfo_UserInfoTip.Size(m) +func (m *UserInfo) XXX_Size() int { + return xxx_messageInfo_UserInfo.Size(m) } -func (m *UserInfoTip) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfoTip.DiscardUnknown(m) +func (m *UserInfo) XXX_DiscardUnknown() { + xxx_messageInfo_UserInfo.DiscardUnknown(m) } -var xxx_messageInfo_UserInfoTip proto.InternalMessageInfo +var xxx_messageInfo_UserInfo proto.InternalMessageInfo -func (m *UserInfoTip) GetUserID() string { +func (m *UserInfo) GetUserID() string { if m != nil { return m.UserID } return "" } -func (m *UserInfoTip) GetName() string { +func (m *UserInfo) GetName() string { if m != nil { return m.Name } return "" } -func (m *UserInfoTip) GetIcon() string { +func (m *UserInfo) GetIcon() string { if m != nil { return m.Icon } return "" } -func (m *UserInfoTip) GetGender() int32 { +func (m *UserInfo) GetGender() int32 { if m != nil { return m.Gender } return 0 } -func (m *UserInfoTip) GetMobile() string { +func (m *UserInfo) GetMobile() string { if m != nil { return m.Mobile } return "" } -func (m *UserInfoTip) GetBirth() string { +func (m *UserInfo) GetBirth() string { if m != nil { return m.Birth } return "" } -func (m *UserInfoTip) GetEmail() string { +func (m *UserInfo) GetEmail() string { if m != nil { return m.Email } return "" } -func (m *UserInfoTip) GetEx() string { +func (m *UserInfo) GetEx() string { if m != nil { return m.Ex } return "" } +// No permissions required +type PublicUserInfo struct { + UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name" json:"Name,omitempty"` + Icon string `protobuf:"bytes,3,opt,name=Icon" json:"Icon,omitempty"` + Gender int32 `protobuf:"varint,4,opt,name=Gender" json:"Gender,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_e632726fa8a2c9ae, []int{13} +} +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) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PublicUserInfo) GetIcon() string { + if m != nil { + return m.Icon + } + return "" +} + +func (m *PublicUserInfo) GetGender() int32 { + if m != nil { + return m.Gender + } + return 0 +} + +type TipsComm struct { + Detail string `protobuf:"bytes,1,opt,name=Detail" json:"Detail,omitempty"` + DefaultTips string `protobuf:"bytes,2,opt,name=DefaultTips" json:"DefaultTips,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_e632726fa8a2c9ae, []int{14} +} +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() string { + if m != nil { + return m.Detail + } + return "" +} + +func (m *TipsComm) GetDefaultTips() string { + if m != nil { + return m.DefaultTips + } + return "" +} + +// ////////////////////group///////////////////// +// Actively join the group +type MemberEnterTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` + Member *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=Member" json:"Member,omitempty"` + OperationTime uint64 `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_e632726fa8a2c9ae, []int{15} +} +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) GetMember() *GroupMemberFullInfo { + if m != nil { + return m.Member + } + return nil +} + +func (m *MemberEnterTips) GetOperationTime() uint64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +// Actively leave the group +type MemberLeaveTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` + Member *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=Member" json:"Member,omitempty"` + OperationTime uint64 `protobuf:"varint,3,opt,name=OperationTime" json:"OperationTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MemberLeaveTips) Reset() { *m = MemberLeaveTips{} } +func (m *MemberLeaveTips) String() string { return proto.CompactTextString(m) } +func (*MemberLeaveTips) ProtoMessage() {} +func (*MemberLeaveTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{16} +} +func (m *MemberLeaveTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MemberLeaveTips.Unmarshal(m, b) +} +func (m *MemberLeaveTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MemberLeaveTips.Marshal(b, m, deterministic) +} +func (dst *MemberLeaveTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_MemberLeaveTips.Merge(dst, src) +} +func (m *MemberLeaveTips) XXX_Size() int { + return xxx_messageInfo_MemberLeaveTips.Size(m) +} +func (m *MemberLeaveTips) XXX_DiscardUnknown() { + xxx_messageInfo_MemberLeaveTips.DiscardUnknown(m) +} + +var xxx_messageInfo_MemberLeaveTips proto.InternalMessageInfo + +func (m *MemberLeaveTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *MemberLeaveTips) GetMember() *GroupMemberFullInfo { + if m != nil { + return m.Member + } + return nil +} + +func (m *MemberLeaveTips) GetOperationTime() uint64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +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"` + Member *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=Member" json:"Member,omitempty"` + OperationTime uint64 `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_e632726fa8a2c9ae, []int{17} +} +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) GetMember() *GroupMemberFullInfo { + if m != nil { + return m.Member + } + return nil +} + +func (m *MemberInvitedTips) GetOperationTime() uint64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +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"` + Member *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=Member" json:"Member,omitempty"` + OperationTime uint64 `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_e632726fa8a2c9ae, []int{18} +} +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) GetMember() *GroupMemberFullInfo { + if m != nil { + return m.Member + } + return nil +} + +func (m *MemberKickedTips) GetOperationTime() uint64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +type GroupMemberChangeInfo struct { + ChangeType int32 `protobuf:"varint,1,opt,name=ChangeType" json:"ChangeType,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=OpUser" json:"OpUser,omitempty"` + Member *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=Member" json:"Member,omitempty"` + MuteTime uint64 `protobuf:"varint,4,opt,name=MuteTime" json:"MuteTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupMemberChangeInfo) Reset() { *m = GroupMemberChangeInfo{} } +func (m *GroupMemberChangeInfo) String() string { return proto.CompactTextString(m) } +func (*GroupMemberChangeInfo) ProtoMessage() {} +func (*GroupMemberChangeInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{19} +} +func (m *GroupMemberChangeInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupMemberChangeInfo.Unmarshal(m, b) +} +func (m *GroupMemberChangeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupMemberChangeInfo.Marshal(b, m, deterministic) +} +func (dst *GroupMemberChangeInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberChangeInfo.Merge(dst, src) +} +func (m *GroupMemberChangeInfo) XXX_Size() int { + return xxx_messageInfo_GroupMemberChangeInfo.Size(m) +} +func (m *GroupMemberChangeInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberChangeInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMemberChangeInfo proto.InternalMessageInfo + +func (m *GroupMemberChangeInfo) GetChangeType() int32 { + if m != nil { + return m.ChangeType + } + return 0 +} + +func (m *GroupMemberChangeInfo) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *GroupMemberChangeInfo) GetMember() *GroupMemberFullInfo { + if m != nil { + return m.Member + } + return nil +} + +func (m *GroupMemberChangeInfo) GetMuteTime() uint64 { + if m != nil { + return m.MuteTime + } + return 0 +} + +type MemberInfoChangedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` + MemberChanged *GroupMemberChangeInfo `protobuf:"bytes,2,opt,name=MemberChanged" json:"MemberChanged,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MemberInfoChangedTips) Reset() { *m = MemberInfoChangedTips{} } +func (m *MemberInfoChangedTips) String() string { return proto.CompactTextString(m) } +func (*MemberInfoChangedTips) ProtoMessage() {} +func (*MemberInfoChangedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{20} +} +func (m *MemberInfoChangedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MemberInfoChangedTips.Unmarshal(m, b) +} +func (m *MemberInfoChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MemberInfoChangedTips.Marshal(b, m, deterministic) +} +func (dst *MemberInfoChangedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_MemberInfoChangedTips.Merge(dst, src) +} +func (m *MemberInfoChangedTips) XXX_Size() int { + return xxx_messageInfo_MemberInfoChangedTips.Size(m) +} +func (m *MemberInfoChangedTips) XXX_DiscardUnknown() { + xxx_messageInfo_MemberInfoChangedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_MemberInfoChangedTips proto.InternalMessageInfo + +func (m *MemberInfoChangedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *MemberInfoChangedTips) GetMemberChanged() *GroupMemberChangeInfo { + if m != nil { + return m.MemberChanged + } + return nil +} + +type GroupCreatedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` + Creator *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=Creator" json:"Creator,omitempty"` + MemberList []*GroupMemberFullInfo `protobuf:"bytes,3,rep,name=MemberList" json:"MemberList,omitempty"` + OperationTime uint64 `protobuf:"varint,4,opt,name=OperationTime" json:"OperationTime,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_e632726fa8a2c9ae, []int{21} +} +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) GetCreator() *GroupMemberFullInfo { + if m != nil { + return m.Creator + } + return nil +} + +func (m *GroupCreatedTips) GetMemberList() []*GroupMemberFullInfo { + if m != nil { + return m.MemberList + } + return nil +} + +func (m *GroupCreatedTips) GetOperationTime() uint64 { + if m != nil { + return m.OperationTime + } + return 0 +} + +type GroupInfoChangedTips struct { + ChangedType int32 `protobuf:"varint,1,opt,name=ChangedType" json:"ChangedType,omitempty"` + Group *GroupInfo `protobuf:"bytes,2,opt,name=Group" json:"Group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,3,opt,name=OpUser" json:"OpUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GroupInfoChangedTips) Reset() { *m = GroupInfoChangedTips{} } +func (m *GroupInfoChangedTips) String() string { return proto.CompactTextString(m) } +func (*GroupInfoChangedTips) ProtoMessage() {} +func (*GroupInfoChangedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{22} +} +func (m *GroupInfoChangedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GroupInfoChangedTips.Unmarshal(m, b) +} +func (m *GroupInfoChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GroupInfoChangedTips.Marshal(b, m, deterministic) +} +func (dst *GroupInfoChangedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupInfoChangedTips.Merge(dst, src) +} +func (m *GroupInfoChangedTips) XXX_Size() int { + return xxx_messageInfo_GroupInfoChangedTips.Size(m) +} +func (m *GroupInfoChangedTips) XXX_DiscardUnknown() { + xxx_messageInfo_GroupInfoChangedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupInfoChangedTips proto.InternalMessageInfo + +func (m *GroupInfoChangedTips) GetChangedType() int32 { + if m != nil { + return m.ChangedType + } + return 0 +} + +func (m *GroupInfoChangedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *GroupInfoChangedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +type ReceiveJoinApplicationTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` + Member *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=Member" json:"Member,omitempty"` + Reason string `protobuf:"bytes,3,opt,name=Reason" json:"Reason,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ReceiveJoinApplicationTips) Reset() { *m = ReceiveJoinApplicationTips{} } +func (m *ReceiveJoinApplicationTips) String() string { return proto.CompactTextString(m) } +func (*ReceiveJoinApplicationTips) ProtoMessage() {} +func (*ReceiveJoinApplicationTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{23} +} +func (m *ReceiveJoinApplicationTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ReceiveJoinApplicationTips.Unmarshal(m, b) +} +func (m *ReceiveJoinApplicationTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ReceiveJoinApplicationTips.Marshal(b, m, deterministic) +} +func (dst *ReceiveJoinApplicationTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReceiveJoinApplicationTips.Merge(dst, src) +} +func (m *ReceiveJoinApplicationTips) XXX_Size() int { + return xxx_messageInfo_ReceiveJoinApplicationTips.Size(m) +} +func (m *ReceiveJoinApplicationTips) XXX_DiscardUnknown() { + xxx_messageInfo_ReceiveJoinApplicationTips.DiscardUnknown(m) +} + +var xxx_messageInfo_ReceiveJoinApplicationTips proto.InternalMessageInfo + +func (m *ReceiveJoinApplicationTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *ReceiveJoinApplicationTips) GetMember() *GroupMemberFullInfo { + if m != nil { + return m.Member + } + return nil +} + +func (m *ReceiveJoinApplicationTips) GetReason() string { + if m != nil { + return m.Reason + } + return "" +} + +type ApplicationProcessedTips struct { + Group *GroupInfo `protobuf:"bytes,1,opt,name=Group" json:"Group,omitempty"` + OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=OpUser" json:"OpUser,omitempty"` + Result int32 `protobuf:"varint,3,opt,name=Result" json:"Result,omitempty"` + Reason string `protobuf:"bytes,4,opt,name=Reason" json:"Reason,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ApplicationProcessedTips) Reset() { *m = ApplicationProcessedTips{} } +func (m *ApplicationProcessedTips) String() string { return proto.CompactTextString(m) } +func (*ApplicationProcessedTips) ProtoMessage() {} +func (*ApplicationProcessedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{24} +} +func (m *ApplicationProcessedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ApplicationProcessedTips.Unmarshal(m, b) +} +func (m *ApplicationProcessedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ApplicationProcessedTips.Marshal(b, m, deterministic) +} +func (dst *ApplicationProcessedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationProcessedTips.Merge(dst, src) +} +func (m *ApplicationProcessedTips) XXX_Size() int { + return xxx_messageInfo_ApplicationProcessedTips.Size(m) +} +func (m *ApplicationProcessedTips) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationProcessedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationProcessedTips proto.InternalMessageInfo + +func (m *ApplicationProcessedTips) GetGroup() *GroupInfo { + if m != nil { + return m.Group + } + return nil +} + +func (m *ApplicationProcessedTips) GetOpUser() *GroupMemberFullInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *ApplicationProcessedTips) GetResult() int32 { + if m != nil { + return m.Result + } + return 0 +} + +func (m *ApplicationProcessedTips) GetReason() string { + if m != nil { + return m.Reason + } + return "" +} + +// ////////////////////friend///////////////////// +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 uint64 `protobuf:"varint,3,opt,name=CreateTime" json:"CreateTime,omitempty"` + FriendUserInfo *UserInfo `protobuf:"bytes,4,opt,name=FriendUserInfo" json:"FriendUserInfo,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_e632726fa8a2c9ae, []int{25} +} +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() uint64 { + if m != nil { + return m.CreateTime + } + return 0 +} + +func (m *FriendInfo) GetFriendUserInfo() *UserInfo { + if m != nil { + return m.FriendUserInfo + } + return nil +} + +type FriendApplication struct { + AddTime uint64 `protobuf:"varint,4,opt,name=AddTime" json:"AddTime,omitempty"` + AddSource string `protobuf:"bytes,5,opt,name=AddSource" json:"AddSource,omitempty"` + AddWording string `protobuf:"bytes,6,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_e632726fa8a2c9ae, []int{26} +} +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() uint64 { + 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 "" +} + +// user1 add user2 +type FriendApplicationListAddedTips struct { + OpUser *PublicUserInfo `protobuf:"bytes,1,opt,name=OpUser" json:"OpUser,omitempty"` + Application *FriendApplication `protobuf:"bytes,2,opt,name=Application" json:"Application,omitempty"` + OpedUser *PublicUserInfo `protobuf:"bytes,3,opt,name=OpedUser" json:"OpedUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendApplicationListAddedTips) Reset() { *m = FriendApplicationListAddedTips{} } +func (m *FriendApplicationListAddedTips) String() string { return proto.CompactTextString(m) } +func (*FriendApplicationListAddedTips) ProtoMessage() {} +func (*FriendApplicationListAddedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{27} +} +func (m *FriendApplicationListAddedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendApplicationListAddedTips.Unmarshal(m, b) +} +func (m *FriendApplicationListAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendApplicationListAddedTips.Marshal(b, m, deterministic) +} +func (dst *FriendApplicationListAddedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendApplicationListAddedTips.Merge(dst, src) +} +func (m *FriendApplicationListAddedTips) XXX_Size() int { + return xxx_messageInfo_FriendApplicationListAddedTips.Size(m) +} +func (m *FriendApplicationListAddedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendApplicationListAddedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendApplicationListAddedTips proto.InternalMessageInfo + +func (m *FriendApplicationListAddedTips) GetOpUser() *PublicUserInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *FriendApplicationListAddedTips) GetApplication() *FriendApplication { + if m != nil { + return m.Application + } + return nil +} + +func (m *FriendApplicationListAddedTips) GetOpedUser() *PublicUserInfo { + if m != nil { + return m.OpedUser + } + return nil +} + +// user2 accept +type FriendApplicationListAcceptTips struct { + OpUser *PublicUserInfo `protobuf:"bytes,1,opt,name=OpUser" json:"OpUser,omitempty"` + OpedUser *PublicUserInfo `protobuf:"bytes,2,opt,name=OpedUser" json:"OpedUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendApplicationListAcceptTips) Reset() { *m = FriendApplicationListAcceptTips{} } +func (m *FriendApplicationListAcceptTips) String() string { return proto.CompactTextString(m) } +func (*FriendApplicationListAcceptTips) ProtoMessage() {} +func (*FriendApplicationListAcceptTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{28} +} +func (m *FriendApplicationListAcceptTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendApplicationListAcceptTips.Unmarshal(m, b) +} +func (m *FriendApplicationListAcceptTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendApplicationListAcceptTips.Marshal(b, m, deterministic) +} +func (dst *FriendApplicationListAcceptTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendApplicationListAcceptTips.Merge(dst, src) +} +func (m *FriendApplicationListAcceptTips) XXX_Size() int { + return xxx_messageInfo_FriendApplicationListAcceptTips.Size(m) +} +func (m *FriendApplicationListAcceptTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendApplicationListAcceptTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendApplicationListAcceptTips proto.InternalMessageInfo + +func (m *FriendApplicationListAcceptTips) GetOpUser() *PublicUserInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *FriendApplicationListAcceptTips) GetOpedUser() *PublicUserInfo { + if m != nil { + return m.OpedUser + } + return nil +} + +// user2 reject +type FriendApplicationListRejectTips struct { + OpUser *PublicUserInfo `protobuf:"bytes,1,opt,name=OpUser" json:"OpUser,omitempty"` + OpedUser *PublicUserInfo `protobuf:"bytes,2,opt,name=OpedUser" json:"OpedUser,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendApplicationListRejectTips) Reset() { *m = FriendApplicationListRejectTips{} } +func (m *FriendApplicationListRejectTips) String() string { return proto.CompactTextString(m) } +func (*FriendApplicationListRejectTips) ProtoMessage() {} +func (*FriendApplicationListRejectTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{29} +} +func (m *FriendApplicationListRejectTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendApplicationListRejectTips.Unmarshal(m, b) +} +func (m *FriendApplicationListRejectTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendApplicationListRejectTips.Marshal(b, m, deterministic) +} +func (dst *FriendApplicationListRejectTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendApplicationListRejectTips.Merge(dst, src) +} +func (m *FriendApplicationListRejectTips) XXX_Size() int { + return xxx_messageInfo_FriendApplicationListRejectTips.Size(m) +} +func (m *FriendApplicationListRejectTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendApplicationListRejectTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendApplicationListRejectTips proto.InternalMessageInfo + +func (m *FriendApplicationListRejectTips) GetOpUser() *PublicUserInfo { + if m != nil { + return m.OpUser + } + return nil +} + +func (m *FriendApplicationListRejectTips) GetOpedUser() *PublicUserInfo { + if m != nil { + return m.OpedUser + } + return nil +} + +type FriendListAddedTips struct { + Friend *FriendInfo `protobuf:"bytes,1,opt,name=Friend" json:"Friend,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendListAddedTips) Reset() { *m = FriendListAddedTips{} } +func (m *FriendListAddedTips) String() string { return proto.CompactTextString(m) } +func (*FriendListAddedTips) ProtoMessage() {} +func (*FriendListAddedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{30} +} +func (m *FriendListAddedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendListAddedTips.Unmarshal(m, b) +} +func (m *FriendListAddedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendListAddedTips.Marshal(b, m, deterministic) +} +func (dst *FriendListAddedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendListAddedTips.Merge(dst, src) +} +func (m *FriendListAddedTips) XXX_Size() int { + return xxx_messageInfo_FriendListAddedTips.Size(m) +} +func (m *FriendListAddedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendListAddedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendListAddedTips proto.InternalMessageInfo + +func (m *FriendListAddedTips) GetFriend() *FriendInfo { + if m != nil { + return m.Friend + } + return nil +} + +type FriendListDeletedTips struct { + Friend *FriendInfo `protobuf:"bytes,1,opt,name=Friend" json:"Friend,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FriendListDeletedTips) Reset() { *m = FriendListDeletedTips{} } +func (m *FriendListDeletedTips) String() string { return proto.CompactTextString(m) } +func (*FriendListDeletedTips) ProtoMessage() {} +func (*FriendListDeletedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{31} +} +func (m *FriendListDeletedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FriendListDeletedTips.Unmarshal(m, b) +} +func (m *FriendListDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FriendListDeletedTips.Marshal(b, m, deterministic) +} +func (dst *FriendListDeletedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_FriendListDeletedTips.Merge(dst, src) +} +func (m *FriendListDeletedTips) XXX_Size() int { + return xxx_messageInfo_FriendListDeletedTips.Size(m) +} +func (m *FriendListDeletedTips) XXX_DiscardUnknown() { + xxx_messageInfo_FriendListDeletedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_FriendListDeletedTips proto.InternalMessageInfo + +func (m *FriendListDeletedTips) GetFriend() *FriendInfo { + if m != nil { + return m.Friend + } + return nil +} + +type BlackListAddTips struct { + Friend *FriendInfo `protobuf:"bytes,1,opt,name=Friend" json:"Friend,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BlackListAddTips) Reset() { *m = BlackListAddTips{} } +func (m *BlackListAddTips) String() string { return proto.CompactTextString(m) } +func (*BlackListAddTips) ProtoMessage() {} +func (*BlackListAddTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{32} +} +func (m *BlackListAddTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BlackListAddTips.Unmarshal(m, b) +} +func (m *BlackListAddTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BlackListAddTips.Marshal(b, m, deterministic) +} +func (dst *BlackListAddTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlackListAddTips.Merge(dst, src) +} +func (m *BlackListAddTips) XXX_Size() int { + return xxx_messageInfo_BlackListAddTips.Size(m) +} +func (m *BlackListAddTips) XXX_DiscardUnknown() { + xxx_messageInfo_BlackListAddTips.DiscardUnknown(m) +} + +var xxx_messageInfo_BlackListAddTips proto.InternalMessageInfo + +func (m *BlackListAddTips) GetFriend() *FriendInfo { + if m != nil { + return m.Friend + } + return nil +} + +type BlackListDeletedTips struct { + Friend *FriendInfo `protobuf:"bytes,1,opt,name=Friend" json:"Friend,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BlackListDeletedTips) Reset() { *m = BlackListDeletedTips{} } +func (m *BlackListDeletedTips) String() string { return proto.CompactTextString(m) } +func (*BlackListDeletedTips) ProtoMessage() {} +func (*BlackListDeletedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{33} +} +func (m *BlackListDeletedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BlackListDeletedTips.Unmarshal(m, b) +} +func (m *BlackListDeletedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BlackListDeletedTips.Marshal(b, m, deterministic) +} +func (dst *BlackListDeletedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlackListDeletedTips.Merge(dst, src) +} +func (m *BlackListDeletedTips) XXX_Size() int { + return xxx_messageInfo_BlackListDeletedTips.Size(m) +} +func (m *BlackListDeletedTips) XXX_DiscardUnknown() { + xxx_messageInfo_BlackListDeletedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_BlackListDeletedTips proto.InternalMessageInfo + +func (m *BlackListDeletedTips) GetFriend() *FriendInfo { + if m != nil { + return m.Friend + } + return nil +} + +type FriendInfoChangedTips struct { + Friend *FriendInfo `protobuf:"bytes,1,opt,name=Friend" json:"Friend,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_e632726fa8a2c9ae, []int{34} +} +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) GetFriend() *FriendInfo { + if m != nil { + return m.Friend + } + return nil +} + +// ////////////////////user///////////////////// +type SelfInfoUpdatedTips struct { + SelfUserInfo *UserInfo `protobuf:"bytes,1,opt,name=SelfUserInfo" json:"SelfUserInfo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SelfInfoUpdatedTips) Reset() { *m = SelfInfoUpdatedTips{} } +func (m *SelfInfoUpdatedTips) String() string { return proto.CompactTextString(m) } +func (*SelfInfoUpdatedTips) ProtoMessage() {} +func (*SelfInfoUpdatedTips) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_e632726fa8a2c9ae, []int{35} +} +func (m *SelfInfoUpdatedTips) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SelfInfoUpdatedTips.Unmarshal(m, b) +} +func (m *SelfInfoUpdatedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SelfInfoUpdatedTips.Marshal(b, m, deterministic) +} +func (dst *SelfInfoUpdatedTips) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfInfoUpdatedTips.Merge(dst, src) +} +func (m *SelfInfoUpdatedTips) XXX_Size() int { + return xxx_messageInfo_SelfInfoUpdatedTips.Size(m) +} +func (m *SelfInfoUpdatedTips) XXX_DiscardUnknown() { + xxx_messageInfo_SelfInfoUpdatedTips.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfInfoUpdatedTips proto.InternalMessageInfo + +func (m *SelfInfoUpdatedTips) GetSelfUserInfo() *UserInfo { + if m != nil { + return m.SelfUserInfo + } + return nil +} + func init() { proto.RegisterType((*PullMessageBySeqListResp)(nil), "open_im_sdk.PullMessageBySeqListResp") proto.RegisterType((*PullMessageBySeqListReq)(nil), "open_im_sdk.PullMessageBySeqListReq") @@ -1080,82 +2216,140 @@ func init() { proto.RegisterType((*UserSendMsgResp)(nil), "open_im_sdk.UserSendMsgResp") proto.RegisterType((*MsgData)(nil), "open_im_sdk.MsgData") proto.RegisterType((*OfflinePushInfo)(nil), "open_im_sdk.OfflinePushInfo") - proto.RegisterType((*GroupInfoTip)(nil), "open_im_sdk.GroupInfoTip") - proto.RegisterType((*GroupMemberFullInfoTip)(nil), "open_im_sdk.GroupMemberFullInfoTip") - proto.RegisterType((*CreateGroupTip)(nil), "open_im_sdk.CreateGroupTip") - proto.RegisterType((*UserInfoTip)(nil), "open_im_sdk.UserInfoTip") + proto.RegisterType((*GroupInfo)(nil), "open_im_sdk.GroupInfo") + proto.RegisterType((*GroupMemberFullInfo)(nil), "open_im_sdk.GroupMemberFullInfo") + proto.RegisterType((*UserInfo)(nil), "open_im_sdk.UserInfo") + proto.RegisterType((*PublicUserInfo)(nil), "open_im_sdk.PublicUserInfo") + proto.RegisterType((*TipsComm)(nil), "open_im_sdk.TipsComm") + proto.RegisterType((*MemberEnterTips)(nil), "open_im_sdk.MemberEnterTips") + proto.RegisterType((*MemberLeaveTips)(nil), "open_im_sdk.MemberLeaveTips") + proto.RegisterType((*MemberInvitedTips)(nil), "open_im_sdk.MemberInvitedTips") + proto.RegisterType((*MemberKickedTips)(nil), "open_im_sdk.MemberKickedTips") + proto.RegisterType((*GroupMemberChangeInfo)(nil), "open_im_sdk.GroupMemberChangeInfo") + proto.RegisterType((*MemberInfoChangedTips)(nil), "open_im_sdk.MemberInfoChangedTips") + proto.RegisterType((*GroupCreatedTips)(nil), "open_im_sdk.GroupCreatedTips") + proto.RegisterType((*GroupInfoChangedTips)(nil), "open_im_sdk.GroupInfoChangedTips") + proto.RegisterType((*ReceiveJoinApplicationTips)(nil), "open_im_sdk.ReceiveJoinApplicationTips") + proto.RegisterType((*ApplicationProcessedTips)(nil), "open_im_sdk.ApplicationProcessedTips") + proto.RegisterType((*FriendInfo)(nil), "open_im_sdk.FriendInfo") + proto.RegisterType((*FriendApplication)(nil), "open_im_sdk.FriendApplication") + proto.RegisterType((*FriendApplicationListAddedTips)(nil), "open_im_sdk.FriendApplicationListAddedTips") + proto.RegisterType((*FriendApplicationListAcceptTips)(nil), "open_im_sdk.FriendApplicationListAcceptTips") + proto.RegisterType((*FriendApplicationListRejectTips)(nil), "open_im_sdk.FriendApplicationListRejectTips") + proto.RegisterType((*FriendListAddedTips)(nil), "open_im_sdk.FriendListAddedTips") + proto.RegisterType((*FriendListDeletedTips)(nil), "open_im_sdk.FriendListDeletedTips") + proto.RegisterType((*BlackListAddTips)(nil), "open_im_sdk.BlackListAddTips") + proto.RegisterType((*BlackListDeletedTips)(nil), "open_im_sdk.BlackListDeletedTips") + proto.RegisterType((*FriendInfoChangedTips)(nil), "open_im_sdk.FriendInfoChangedTips") + proto.RegisterType((*SelfInfoUpdatedTips)(nil), "open_im_sdk.SelfInfoUpdatedTips") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_0e67cfdf7b3776b1) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_e632726fa8a2c9ae) } -var fileDescriptor_ws_0e67cfdf7b3776b1 = []byte{ - // 1078 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5d, 0x4f, 0xe3, 0x46, - 0x14, 0x95, 0xed, 0x04, 0xc8, 0x0d, 0xb0, 0xab, 0x29, 0xa2, 0xee, 0xaa, 0xaa, 0x22, 0xb7, 0xaa, - 0xa2, 0x7d, 0x00, 0x89, 0x7d, 0xa9, 0xb6, 0xaa, 0xaa, 0x42, 0x02, 0xf2, 0x6a, 0x03, 0x68, 0x60, - 0x5f, 0xfa, 0x82, 0x8c, 0x33, 0x80, 0x85, 0x3f, 0x12, 0x8f, 0x03, 0xe1, 0x7f, 0xf4, 0xb5, 0xff, - 0xa1, 0xaf, 0xed, 0x4f, 0xe8, 0x43, 0xff, 0x51, 0xa5, 0xea, 0xde, 0x19, 0x9b, 0x99, 0x18, 0xb5, - 0x7d, 0x9b, 0x73, 0x72, 0xc7, 0x33, 0xf7, 0x9c, 0x73, 0x1d, 0xc3, 0x2b, 0x39, 0xbd, 0xbf, 0x7a, - 0x94, 0xfb, 0x8f, 0x72, 0x6f, 0x56, 0x16, 0x55, 0xc1, 0xfa, 0xc5, 0x4c, 0xe4, 0x57, 0x49, 0x76, - 0x25, 0xa7, 0xf7, 0xc1, 0x9f, 0x0e, 0xf8, 0xe7, 0x8b, 0x34, 0x9d, 0x08, 0x29, 0xa3, 0x5b, 0x71, - 0xf8, 0x74, 0x21, 0xe6, 0x1f, 0x13, 0x59, 0x71, 0x21, 0x67, 0x6c, 0x17, 0xd6, 0x26, 0xd1, 0xf2, - 0x42, 0xcc, 0x7d, 0x67, 0xe0, 0x0c, 0x3d, 0xae, 0x11, 0xf1, 0x49, 0x8e, 0xbc, 0xab, 0x79, 0x42, - 0xec, 0x47, 0xd8, 0xba, 0x48, 0xf2, 0xdb, 0x54, 0x7c, 0x92, 0xa2, 0x9c, 0xc8, 0x5b, 0xdf, 0x1b, - 0x78, 0xc3, 0xfe, 0xc1, 0x17, 0x7b, 0xc6, 0x89, 0x7b, 0x27, 0x51, 0x75, 0x27, 0xca, 0xe3, 0xa2, - 0xcc, 0xa2, 0x8a, 0xdb, 0xf5, 0xec, 0x07, 0xd8, 0x3c, 0x29, 0x8b, 0xc5, 0xac, 0xde, 0xdf, 0xf9, - 0xaf, 0xfd, 0x56, 0x79, 0xf0, 0x0e, 0x3e, 0x7f, 0xb9, 0x97, 0x39, 0xf3, 0x61, 0x5d, 0x2a, 0xe4, - 0x3b, 0x03, 0x6f, 0xe8, 0xf1, 0x1a, 0x06, 0x3b, 0xc0, 0x4e, 0x44, 0x35, 0x89, 0x96, 0x3f, 0xe5, - 0x53, 0xd5, 0x07, 0x17, 0xf3, 0x60, 0x0c, 0x9f, 0xb5, 0x58, 0xa5, 0x48, 0x66, 0x29, 0x92, 0x35, - 0x8a, 0x64, 0x96, 0x22, 0x0a, 0x05, 0x1f, 0x60, 0xd3, 0xbc, 0x2f, 0xdb, 0x06, 0x37, 0x1c, 0xd1, - 0xde, 0x1e, 0x77, 0xc3, 0x11, 0x7b, 0x0b, 0x1d, 0xba, 0x93, 0x4b, 0x8d, 0xee, 0x5a, 0x8d, 0x4e, - 0xe4, 0xad, 0xee, 0x92, 0x6a, 0x82, 0xbf, 0x5d, 0xe8, 0x35, 0x1c, 0x9e, 0x78, 0x21, 0xf2, 0x69, - 0xf3, 0x34, 0x8d, 0x90, 0xe7, 0x22, 0x7e, 0x08, 0x47, 0x74, 0x93, 0x1e, 0xd7, 0x08, 0x05, 0xc0, - 0xcd, 0x65, 0x91, 0xf9, 0xde, 0xc0, 0x19, 0x76, 0x79, 0x0d, 0xd9, 0x00, 0xfa, 0x47, 0x45, 0x5e, - 0x89, 0xbc, 0xba, 0x7c, 0x9a, 0x09, 0xbf, 0x43, 0xbf, 0x9a, 0x14, 0x56, 0x5c, 0x88, 0xf2, 0x81, - 0x44, 0x0e, 0x47, 0x7e, 0x97, 0x1e, 0x6c, 0x52, 0xf8, 0x74, 0xbd, 0xc1, 0x5f, 0xa3, 0x5f, 0x6b, - 0xc8, 0x5e, 0x83, 0x87, 0xb2, 0xac, 0x93, 0x2c, 0xb8, 0x64, 0x6f, 0x60, 0x03, 0xef, 0x7a, 0x99, - 0x64, 0xc2, 0xdf, 0x20, 0xba, 0xc1, 0xec, 0x2d, 0xbc, 0xc6, 0xb5, 0x28, 0xcf, 0xd3, 0xa8, 0xba, - 0x29, 0xca, 0x2c, 0x1c, 0xf9, 0x3d, 0xba, 0x50, 0x8b, 0x67, 0xdf, 0xc2, 0xb6, 0xe2, 0x4e, 0x93, - 0xf8, 0xfe, 0x34, 0xca, 0x84, 0x0f, 0x74, 0xf4, 0x0a, 0xcb, 0xbe, 0x81, 0x2d, 0xc5, 0x1c, 0x47, - 0xb1, 0xf8, 0xc4, 0x3f, 0xfa, 0x7d, 0x2a, 0xb3, 0x49, 0x52, 0x21, 0x4d, 0x44, 0x5e, 0xa9, 0x1e, - 0x37, 0x55, 0x8f, 0x06, 0x15, 0xfc, 0xe5, 0xc1, 0x36, 0x26, 0x0d, 0xf7, 0x4d, 0xe4, 0x2d, 0xa6, - 0xea, 0x10, 0xd6, 0xcf, 0x66, 0x55, 0x52, 0xe4, 0x92, 0x52, 0xd5, 0x3f, 0x18, 0x5a, 0x0e, 0xda, - 0xd5, 0x7b, 0xba, 0x74, 0x9c, 0x57, 0xe5, 0x13, 0xaf, 0x37, 0xbe, 0xd0, 0x86, 0xfb, 0xff, 0xda, - 0xf0, 0x5e, 0x6a, 0xe3, 0x2b, 0x00, 0x43, 0x3a, 0xe5, 0xa5, 0xc1, 0x28, 0x2b, 0xa5, 0x4c, 0x8a, - 0x9c, 0xcc, 0xee, 0x2a, 0xb3, 0x0d, 0xca, 0x0c, 0xca, 0xda, 0xbf, 0x06, 0x65, 0xbd, 0x1d, 0x94, - 0xe7, 0xf0, 0x6d, 0x58, 0xe1, 0xfb, 0x12, 0x7a, 0xc7, 0x45, 0x19, 0x0b, 0xca, 0x7a, 0x6f, 0xe0, - 0x0d, 0x7b, 0xfc, 0x99, 0x30, 0xc3, 0x03, 0x76, 0x78, 0x56, 0x4c, 0xe9, 0xb7, 0x4c, 0x79, 0xf3, - 0x1e, 0x36, 0x4d, 0x59, 0x31, 0x6e, 0xf7, 0xe2, 0x49, 0xcf, 0x04, 0x2e, 0xd9, 0x0e, 0x74, 0x1f, - 0xa2, 0x74, 0xa1, 0x64, 0xed, 0x72, 0x05, 0xde, 0xbb, 0xdf, 0x39, 0xc1, 0x1c, 0x5e, 0x59, 0x0e, - 0xc9, 0xd9, 0x6a, 0xd2, 0x9d, 0x76, 0xd2, 0x57, 0xae, 0xe4, 0xb6, 0xae, 0x84, 0xf9, 0x96, 0x75, - 0xbe, 0x3d, 0x95, 0xef, 0x1a, 0x07, 0xbf, 0x7a, 0xa4, 0xee, 0x28, 0xaa, 0x22, 0x14, 0x4b, 0x5a, - 0x13, 0x2c, 0x9b, 0x09, 0x2e, 0xad, 0x09, 0x56, 0x08, 0x4f, 0x96, 0x86, 0x75, 0x6a, 0x8a, 0x4d, - 0x0a, 0x85, 0xcc, 0xb4, 0x75, 0xca, 0xf9, 0x1a, 0xe2, 0xde, 0xd8, 0xb0, 0x4e, 0xdb, 0x1e, 0xdb, - 0x33, 0x2e, 0x8d, 0xce, 0xd5, 0x14, 0x9b, 0x14, 0x3e, 0x5d, 0x6f, 0x20, 0xeb, 0x7b, 0xbc, 0x86, - 0x56, 0xc7, 0x1b, 0x76, 0xc7, 0x68, 0x88, 0x14, 0x73, 0x1a, 0x62, 0x8f, 0xe3, 0x12, 0x67, 0x5c, - 0xae, 0xce, 0x38, 0xa8, 0x19, 0x97, 0x2f, 0xcc, 0xb8, 0xb4, 0x87, 0x43, 0x65, 0x60, 0x85, 0xc5, - 0xe1, 0x90, 0xd6, 0x70, 0xa8, 0xf9, 0xb5, 0x49, 0x52, 0xc1, 0xf0, 0x6e, 0x4b, 0xf5, 0x68, 0x50, - 0xc1, 0x04, 0x5e, 0x9d, 0xdd, 0xdc, 0xa4, 0x49, 0x2e, 0xce, 0x17, 0xf2, 0x2e, 0xcc, 0x6f, 0x0a, - 0xcc, 0xcf, 0x65, 0x52, 0xa5, 0x42, 0xbb, 0xa4, 0x00, 0x63, 0xd0, 0x19, 0x09, 0x19, 0x6b, 0x8b, - 0x68, 0x8d, 0xad, 0x8e, 0x97, 0x95, 0x9e, 0x4b, 0x5c, 0x06, 0xbf, 0xb8, 0xfa, 0x0f, 0x0d, 0x9f, - 0x74, 0x99, 0xcc, 0x50, 0x43, 0x85, 0x6b, 0xd3, 0x6b, 0x88, 0x23, 0x42, 0x4b, 0xe3, 0x0d, 0xf0, - 0x4c, 0xb0, 0x00, 0x36, 0x4f, 0x8b, 0x2a, 0xb9, 0x49, 0xe2, 0x08, 0xc3, 0xae, 0xcf, 0xb0, 0x38, - 0xac, 0x09, 0xf3, 0xaa, 0x2c, 0xa6, 0x8b, 0x98, 0x6a, 0x3a, 0xaa, 0xc6, 0xe4, 0xf0, 0x7c, 0x12, - 0xa3, 0x4c, 0xf5, 0x5b, 0xbc, 0x86, 0xf8, 0xcf, 0x34, 0x5e, 0x6a, 0xdb, 0xdd, 0xf1, 0x12, 0x2b, - 0xcf, 0x1e, 0x73, 0x51, 0x86, 0xa3, 0xda, 0x6d, 0x0d, 0xf1, 0x15, 0x73, 0x54, 0x8a, 0xa8, 0x12, - 0x8d, 0xdf, 0x1d, 0x6e, 0x30, 0xa8, 0xf2, 0x44, 0x64, 0xd7, 0xa2, 0x3c, 0x2a, 0x16, 0x79, 0x45, - 0xce, 0x6f, 0x71, 0x93, 0x0a, 0x7e, 0x73, 0x60, 0x97, 0x7a, 0x53, 0xe4, 0xf1, 0x22, 0x4d, 0x5b, - 0x02, 0x4d, 0x6d, 0x81, 0xa6, 0x38, 0x16, 0x38, 0xad, 0xe1, 0xb4, 0x1e, 0x0b, 0x85, 0xd0, 0x09, - 0x5e, 0xa4, 0xf5, 0x3c, 0xd0, 0x1a, 0x03, 0xf9, 0xa1, 0x48, 0x72, 0xba, 0x60, 0x87, 0x2e, 0xd8, - 0x60, 0xfc, 0xad, 0x09, 0x93, 0xd2, 0xa0, 0xc1, 0xa6, 0x3c, 0x6b, 0x96, 0x3c, 0xc1, 0x1f, 0x0e, - 0x6c, 0xab, 0x1e, 0xe9, 0x3e, 0x78, 0xd5, 0x7d, 0xe8, 0xd2, 0x9a, 0x2e, 0xda, 0xfa, 0x4a, 0x31, - 0x5c, 0xe7, 0xaa, 0x8e, 0x1d, 0xc0, 0x3a, 0x3d, 0xa2, 0x28, 0xa9, 0x85, 0xfe, 0x81, 0xdf, 0xfa, - 0xb7, 0xa8, 0x77, 0xd4, 0x85, 0xec, 0x08, 0x40, 0x89, 0x44, 0xaf, 0x4e, 0xf5, 0x3d, 0xf5, 0x75, - 0xfb, 0xa4, 0x96, 0x90, 0xdc, 0xd8, 0x16, 0xfc, 0xee, 0x40, 0xdf, 0x78, 0x7a, 0x23, 0x65, 0xf3, - 0xe6, 0x51, 0x08, 0xa5, 0x34, 0xe2, 0x47, 0x6b, 0xe4, 0xc2, 0xb8, 0x49, 0x1c, 0xad, 0x71, 0xff, - 0x09, 0x0d, 0x96, 0x7e, 0xcd, 0x68, 0x44, 0xdf, 0x85, 0xc5, 0x75, 0x92, 0xd6, 0xc2, 0x6a, 0x84, - 0x23, 0x74, 0x98, 0x94, 0xd5, 0x9d, 0x16, 0x55, 0x01, 0x64, 0xc7, 0x59, 0x94, 0xa4, 0x3a, 0x5f, - 0x0a, 0xe8, 0x1c, 0x6e, 0xd4, 0x39, 0x3c, 0xdc, 0xfd, 0x79, 0x67, 0x6f, 0x5f, 0x7d, 0xc2, 0x7e, - 0x6f, 0xb4, 0x7d, 0xbd, 0x46, 0x1f, 0xb3, 0xef, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xce, - 0xa8, 0xe0, 0xdf, 0x0a, 0x00, 0x00, +var fileDescriptor_ws_e632726fa8a2c9ae = []byte{ + // 1649 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x6e, 0x1b, 0x47, + 0x12, 0xc6, 0x70, 0x28, 0x8a, 0x2c, 0xea, 0xcf, 0xa3, 0x1f, 0x73, 0xb5, 0x0b, 0x2f, 0x31, 0x58, + 0x2c, 0x04, 0x63, 0x21, 0x63, 0xe5, 0x43, 0x1c, 0x07, 0x46, 0x2c, 0x89, 0x92, 0x4c, 0xc7, 0xb4, + 0x84, 0x91, 0x8c, 0x00, 0xb9, 0x18, 0xa3, 0x99, 0xa6, 0x34, 0xe1, 0xfc, 0x50, 0xd3, 0x43, 0x59, + 0x7a, 0x8a, 0xbc, 0x40, 0x82, 0xe4, 0x92, 0x4b, 0x8e, 0x39, 0xe4, 0x15, 0x02, 0xe4, 0x10, 0x24, + 0xd7, 0xe4, 0x9a, 0xd7, 0x08, 0x10, 0x54, 0x75, 0xcf, 0xb0, 0x9b, 0x54, 0x2c, 0x59, 0x4e, 0xec, + 0x20, 0xb7, 0xae, 0x8f, 0x55, 0xdd, 0x5f, 0xfd, 0x75, 0x17, 0x07, 0x66, 0xb9, 0xdf, 0x7b, 0xfe, + 0x82, 0xdf, 0x79, 0xc1, 0x57, 0xfb, 0x69, 0x92, 0x25, 0x56, 0x3d, 0xe9, 0xb3, 0xf8, 0x79, 0x10, + 0x3d, 0xe7, 0x7e, 0xcf, 0xfe, 0xce, 0x80, 0xc6, 0xde, 0x20, 0x0c, 0x3b, 0x8c, 0x73, 0xf7, 0x88, + 0x6d, 0x9c, 0xef, 0xb3, 0x93, 0x27, 0x01, 0xcf, 0x1c, 0xc6, 0xfb, 0xd6, 0x12, 0x54, 0x3a, 0xee, + 0xd9, 0x3e, 0x3b, 0x69, 0x18, 0x4d, 0x63, 0xc5, 0x74, 0xa4, 0x44, 0x78, 0x10, 0x23, 0x5e, 0x92, + 0x38, 0x49, 0xd6, 0xfb, 0x30, 0xbd, 0x1f, 0xc4, 0x47, 0x21, 0x7b, 0xc6, 0x59, 0xda, 0xe1, 0x47, + 0x0d, 0xb3, 0x69, 0xae, 0xd4, 0xd7, 0xfe, 0xb1, 0xaa, 0x9c, 0xb8, 0xba, 0xe3, 0x66, 0xc7, 0x2c, + 0xdd, 0x4e, 0xd2, 0xc8, 0xcd, 0x1c, 0x5d, 0xdf, 0x7a, 0x00, 0x53, 0x3b, 0x69, 0x32, 0xe8, 0xe7, + 0xf6, 0xe5, 0xcb, 0xec, 0x35, 0x75, 0xfb, 0x2e, 0xdc, 0xbc, 0xd8, 0x97, 0x13, 0xab, 0x01, 0x93, + 0x5c, 0x48, 0x0d, 0xa3, 0x69, 0xae, 0x98, 0x4e, 0x2e, 0xda, 0x0b, 0x60, 0xed, 0xb0, 0xac, 0xe3, + 0x9e, 0xad, 0xc7, 0xbe, 0xf0, 0xc3, 0x61, 0x27, 0xf6, 0x16, 0xcc, 0x8f, 0xa1, 0x22, 0x22, 0x91, + 0x16, 0x91, 0xa8, 0x88, 0x48, 0xa4, 0x45, 0x44, 0x48, 0xf6, 0x63, 0x98, 0x52, 0xf9, 0x5a, 0x33, + 0x50, 0x6a, 0xb7, 0xc8, 0xb6, 0xe6, 0x94, 0xda, 0x2d, 0xeb, 0x36, 0x94, 0x89, 0x53, 0x89, 0x1c, + 0x5d, 0xd2, 0x1c, 0xed, 0xf0, 0x23, 0xe9, 0x25, 0xe9, 0xd8, 0xbf, 0x96, 0xa0, 0x56, 0x60, 0x78, + 0xe2, 0x3e, 0x8b, 0xfd, 0x62, 0x37, 0x29, 0x21, 0xee, 0x30, 0xef, 0xb4, 0xdd, 0x22, 0x26, 0x35, + 0x47, 0x4a, 0x18, 0x00, 0x34, 0x4e, 0x93, 0xa8, 0x61, 0x36, 0x8d, 0x95, 0x09, 0x27, 0x17, 0xad, + 0x26, 0xd4, 0x37, 0x93, 0x38, 0x63, 0x71, 0x76, 0x70, 0xde, 0x67, 0x8d, 0x32, 0xfd, 0xaa, 0x42, + 0xa8, 0xb1, 0xcf, 0xd2, 0x53, 0x0a, 0x72, 0xbb, 0xd5, 0x98, 0xa0, 0x8d, 0x55, 0x08, 0x77, 0x97, + 0x06, 0x8d, 0x0a, 0xfd, 0x9a, 0x8b, 0xd6, 0x1c, 0x98, 0x18, 0x96, 0x49, 0x0a, 0x0b, 0x2e, 0xad, + 0x65, 0xa8, 0x22, 0xd7, 0x83, 0x20, 0x62, 0x8d, 0x2a, 0xc1, 0x85, 0x6c, 0xdd, 0x86, 0x39, 0x5c, + 0xb3, 0x74, 0x2f, 0x74, 0xb3, 0x6e, 0x92, 0x46, 0xed, 0x56, 0xa3, 0x46, 0x84, 0xc6, 0x70, 0xeb, + 0xbf, 0x30, 0x23, 0xb0, 0xa7, 0x81, 0xd7, 0x7b, 0xea, 0x46, 0xac, 0x01, 0x74, 0xf4, 0x08, 0x6a, + 0xfd, 0x07, 0xa6, 0x05, 0xb2, 0xed, 0x7a, 0xec, 0x99, 0xf3, 0xa4, 0x51, 0x27, 0x35, 0x1d, 0xa4, + 0x28, 0x84, 0x01, 0x8b, 0x33, 0xe1, 0xe3, 0x94, 0xf0, 0x51, 0x81, 0xec, 0xef, 0x4d, 0x98, 0xc1, + 0x4a, 0x43, 0xbb, 0x0e, 0x3f, 0xc2, 0xaa, 0xda, 0x80, 0xc9, 0xdd, 0x7e, 0x16, 0x24, 0x31, 0xa7, + 0xaa, 0xaa, 0xaf, 0xad, 0x68, 0x19, 0xd4, 0xb5, 0x57, 0xa5, 0xea, 0x56, 0x9c, 0xa5, 0xe7, 0x4e, + 0x6e, 0x78, 0x81, 0x1b, 0xa5, 0xab, 0xb9, 0x61, 0x5e, 0xe4, 0xc6, 0x2d, 0x00, 0x25, 0x74, 0x22, + 0x97, 0x0a, 0x22, 0x52, 0xc9, 0x79, 0x90, 0xc4, 0x94, 0xec, 0x09, 0x91, 0x6c, 0x05, 0x52, 0x0b, + 0xa5, 0xf2, 0xd2, 0x42, 0x99, 0x1c, 0x2f, 0x94, 0x61, 0xf1, 0x55, 0xb5, 0xe2, 0xfb, 0x17, 0xd4, + 0xb6, 0x93, 0xd4, 0x63, 0x54, 0xeb, 0xb5, 0xa6, 0xb9, 0x52, 0x73, 0x86, 0x80, 0x5a, 0x3c, 0xa0, + 0x17, 0xcf, 0x48, 0x52, 0xea, 0x63, 0x49, 0x59, 0xbe, 0x0f, 0x53, 0x6a, 0x58, 0xb1, 0xdc, 0x7a, + 0xec, 0x5c, 0xf6, 0x04, 0x2e, 0xad, 0x05, 0x98, 0x38, 0x75, 0xc3, 0x81, 0x08, 0xeb, 0x84, 0x23, + 0x84, 0xfb, 0xa5, 0x7b, 0x86, 0x7d, 0x02, 0xb3, 0x5a, 0x86, 0x78, 0x7f, 0xb4, 0xd2, 0x8d, 0xf1, + 0x4a, 0x1f, 0xa1, 0x54, 0x1a, 0xa3, 0x84, 0xf5, 0xcd, 0xf3, 0xfa, 0x36, 0x45, 0x7d, 0xe7, 0xb2, + 0xfd, 0x99, 0x49, 0xd1, 0x6d, 0xb9, 0x99, 0x8b, 0xc1, 0xe2, 0x5a, 0x07, 0xf3, 0xa2, 0x83, 0x53, + 0xad, 0x83, 0x85, 0x84, 0x27, 0x73, 0x25, 0x75, 0xa2, 0x8b, 0x55, 0x08, 0x03, 0x19, 0xc9, 0xd4, + 0x89, 0xcc, 0xe7, 0x22, 0xda, 0x7a, 0x4a, 0xea, 0x64, 0xda, 0x3d, 0xbd, 0xc7, 0xb9, 0xe2, 0xb9, + 0xe8, 0x62, 0x15, 0xc2, 0xdd, 0xa5, 0x01, 0xa5, 0xbe, 0xe6, 0xe4, 0xa2, 0xe6, 0x71, 0x55, 0xf7, + 0x18, 0x13, 0xc2, 0xd9, 0x09, 0x35, 0xb1, 0xe9, 0xe0, 0x12, 0x7b, 0x9c, 0x8f, 0xf6, 0x38, 0x88, + 0x1e, 0xe7, 0x17, 0xf4, 0x38, 0xd7, 0x9b, 0x43, 0xd4, 0xc0, 0x08, 0x8a, 0xcd, 0xc1, 0xb5, 0xe6, + 0x10, 0xfd, 0xab, 0x83, 0x14, 0x05, 0x25, 0x77, 0xd3, 0xc2, 0x47, 0x05, 0xb2, 0x3b, 0x30, 0xbb, + 0xdb, 0xed, 0x86, 0x41, 0xcc, 0xf6, 0x06, 0xfc, 0xb8, 0x1d, 0x77, 0x13, 0xac, 0x9f, 0x83, 0x20, + 0x0b, 0x99, 0xcc, 0x92, 0x10, 0x2c, 0x0b, 0xca, 0x2d, 0xc6, 0x3d, 0x99, 0x22, 0x5a, 0xa3, 0xab, + 0x5b, 0x67, 0x99, 0xec, 0x4b, 0x5c, 0xda, 0x5f, 0x95, 0xa0, 0x46, 0x2f, 0x14, 0xed, 0xd4, 0x80, + 0x49, 0x21, 0xe4, 0x19, 0xcf, 0x45, 0xec, 0x0f, 0x5a, 0x2a, 0xed, 0x3f, 0x04, 0x2c, 0x1b, 0xa6, + 0x9e, 0x26, 0x59, 0xd0, 0x0d, 0x3c, 0x17, 0x2b, 0x5d, 0x1e, 0xa0, 0x61, 0xa8, 0xd3, 0x8e, 0xb3, + 0x34, 0xf1, 0x07, 0x1e, 0xe9, 0x94, 0x85, 0x8e, 0x8a, 0xe1, 0xf9, 0x14, 0x89, 0x34, 0x94, 0x57, + 0x78, 0x2e, 0xe2, 0xb3, 0xb4, 0x75, 0x26, 0x73, 0x5e, 0xda, 0x3a, 0xb3, 0xfe, 0x0f, 0x13, 0xbb, + 0x2f, 0x62, 0x96, 0x52, 0xa2, 0xeb, 0x6b, 0xff, 0xd4, 0x6e, 0xb5, 0xbd, 0xc1, 0x61, 0x18, 0x78, + 0xd8, 0x39, 0xe8, 0x95, 0x23, 0x34, 0xf1, 0xe2, 0xd9, 0x4c, 0x99, 0x9b, 0xb1, 0xa2, 0x0a, 0xca, + 0x8e, 0x82, 0x60, 0xec, 0x3b, 0x2c, 0x3a, 0x64, 0xe9, 0x66, 0x32, 0x88, 0x33, 0xaa, 0x87, 0x69, + 0x47, 0x85, 0xec, 0x1f, 0x0d, 0x98, 0x27, 0xa7, 0x05, 0xb8, 0x3d, 0x08, 0xc3, 0x4b, 0xc2, 0xb6, + 0x04, 0x15, 0xa2, 0x51, 0x74, 0x8a, 0x90, 0x30, 0x39, 0x4e, 0x12, 0xe6, 0x2d, 0x42, 0x6b, 0xac, + 0xd1, 0xc7, 0x49, 0x10, 0x13, 0xbb, 0x32, 0xb1, 0x2b, 0x64, 0xfc, 0xad, 0xa8, 0x2f, 0x11, 0x99, + 0x42, 0x56, 0x83, 0x56, 0xd1, 0x83, 0x66, 0xc3, 0xd4, 0x76, 0x1a, 0xb0, 0xd8, 0x77, 0x58, 0xe4, + 0xa6, 0x3d, 0xd9, 0x14, 0x1a, 0x66, 0x7f, 0x63, 0x40, 0x35, 0x8f, 0x94, 0x42, 0xd7, 0x18, 0xa5, + 0xab, 0x24, 0x9e, 0xd6, 0x88, 0xb5, 0xbd, 0x22, 0xd7, 0xb4, 0x46, 0xfb, 0x1d, 0xaa, 0x67, 0xd9, + 0xdd, 0x52, 0xa2, 0x71, 0x2c, 0x39, 0x0c, 0xc2, 0x9c, 0xbc, 0x94, 0xb0, 0x72, 0x37, 0x82, 0x34, + 0x3b, 0x96, 0xc4, 0x85, 0x80, 0xe8, 0x56, 0xe4, 0x06, 0xa1, 0xe4, 0x2b, 0x04, 0x59, 0x01, 0xd5, + 0xbc, 0x02, 0xec, 0x63, 0x98, 0xd1, 0xf3, 0xfc, 0x67, 0xb1, 0xb7, 0x5b, 0x50, 0x3d, 0x08, 0xfa, + 0x7c, 0x33, 0x89, 0x22, 0xd4, 0x69, 0xb1, 0x0c, 0xc9, 0xc9, 0x33, 0x84, 0x84, 0xc5, 0xd3, 0x62, + 0x5d, 0x77, 0x10, 0x66, 0xa8, 0x9a, 0x5f, 0xba, 0x0a, 0x64, 0x7f, 0x6e, 0xc0, 0xac, 0xa8, 0x9b, + 0xad, 0x38, 0x63, 0x29, 0x62, 0xd6, 0xff, 0x60, 0x82, 0x2a, 0x85, 0x36, 0x1b, 0x9d, 0xae, 0x8a, + 0xb6, 0x74, 0x84, 0x92, 0x75, 0x0f, 0x2a, 0x62, 0x03, 0xda, 0xbe, 0xbe, 0xd6, 0x1c, 0x57, 0xd7, + 0x0b, 0xd3, 0x91, 0xfa, 0x78, 0xf9, 0xec, 0xf6, 0x59, 0x4a, 0x8d, 0x58, 0xdc, 0xfa, 0x65, 0x47, + 0x07, 0x15, 0x86, 0x4f, 0x98, 0x7b, 0xca, 0xfe, 0x82, 0x0c, 0x7f, 0x36, 0xe0, 0x86, 0x30, 0x68, + 0xc7, 0xa7, 0x41, 0xc6, 0xfc, 0xeb, 0x71, 0xdc, 0xa5, 0x79, 0xfc, 0xea, 0x1c, 0x85, 0xbe, 0xe2, + 0x9d, 0xf9, 0xba, 0xde, 0x95, 0x2f, 0xf2, 0xee, 0x27, 0x03, 0xe6, 0x84, 0xc1, 0x07, 0x81, 0xd7, + 0xfb, 0x9b, 0x39, 0xf7, 0xad, 0x01, 0x8b, 0xca, 0x2e, 0x9b, 0xc7, 0x6e, 0x7c, 0xc4, 0xa8, 0x6d, + 0xf1, 0x5e, 0x26, 0x89, 0x1e, 0x7e, 0x43, 0x0c, 0x84, 0x43, 0xe4, 0xad, 0xf8, 0xb4, 0x0c, 0xd5, + 0xce, 0x40, 0xbe, 0x14, 0xf2, 0x2e, 0xce, 0x65, 0xfb, 0x13, 0x03, 0x16, 0xf3, 0x22, 0xec, 0x26, + 0x82, 0xe8, 0x75, 0x72, 0xf5, 0x08, 0xa6, 0xd5, 0x58, 0xf8, 0xd2, 0x3d, 0xfb, 0xf7, 0x48, 0x0e, + 0x43, 0xe6, 0xe8, 0x86, 0xf6, 0x2f, 0x06, 0xcc, 0x91, 0xa2, 0x78, 0xcd, 0xae, 0x43, 0xe6, 0x3e, + 0x4c, 0x92, 0x71, 0x72, 0xf5, 0x28, 0xe7, 0x06, 0xd6, 0x43, 0x00, 0x79, 0x6d, 0xe0, 0xf0, 0x2c, + 0xfe, 0x51, 0x5f, 0x6e, 0xae, 0xd8, 0x5c, 0xb1, 0x84, 0xbe, 0x30, 0x60, 0xa1, 0x20, 0xae, 0xc6, + 0x1d, 0x27, 0x5e, 0x29, 0x0e, 0x4b, 0x48, 0x85, 0x86, 0xc1, 0x28, 0xbd, 0x5a, 0x17, 0x99, 0xaf, + 0x56, 0x71, 0xf6, 0xa7, 0x06, 0x2c, 0x3b, 0xcc, 0x63, 0xc1, 0x29, 0xc3, 0xb7, 0x7b, 0xbd, 0xdf, + 0x0f, 0xe5, 0xfc, 0xf3, 0x46, 0x6f, 0x53, 0xfa, 0x97, 0xe3, 0xf2, 0xe2, 0x7d, 0x93, 0x92, 0xfd, + 0xb5, 0x01, 0x0d, 0x85, 0xd3, 0x5e, 0x9a, 0x78, 0x8c, 0xf3, 0x37, 0x7c, 0xd3, 0x10, 0x39, 0x3e, + 0x08, 0x33, 0x39, 0xfd, 0x48, 0x49, 0x21, 0x5d, 0xd6, 0x48, 0x7f, 0x69, 0x00, 0x88, 0x91, 0x85, + 0xae, 0x8b, 0x26, 0xd4, 0x69, 0x9e, 0xd3, 0x9e, 0x7a, 0x15, 0x12, 0x1b, 0xd1, 0xc0, 0x53, 0x7c, + 0x60, 0x40, 0x69, 0x64, 0x00, 0x34, 0xc7, 0x06, 0xc0, 0x07, 0x30, 0x23, 0xce, 0xc9, 0x27, 0x0a, + 0x22, 0x52, 0x5f, 0x5b, 0x1c, 0xfb, 0xcb, 0x4c, 0xfe, 0x8c, 0x28, 0xdb, 0x3d, 0xb8, 0x21, 0x10, + 0x25, 0xc2, 0x38, 0x9c, 0xad, 0xfb, 0xbe, 0x52, 0xd3, 0xb9, 0x88, 0x13, 0xf5, 0xba, 0xef, 0xef, + 0x27, 0x83, 0xd4, 0xcb, 0xc7, 0xa2, 0x21, 0x80, 0x5c, 0xd7, 0x7d, 0xff, 0xc3, 0x24, 0xf5, 0x83, + 0xf8, 0x48, 0x8e, 0x47, 0x0a, 0x62, 0xff, 0x60, 0xc0, 0xad, 0xb1, 0xd3, 0xb0, 0x97, 0xd6, 0x7d, + 0x5f, 0xe6, 0xf3, 0x6e, 0x91, 0x21, 0xe3, 0xf2, 0x19, 0x39, 0x4f, 0xce, 0x43, 0xa8, 0x2b, 0x1b, + 0xca, 0xdc, 0xde, 0xd2, 0x2c, 0xc7, 0x8e, 0x75, 0x54, 0x13, 0xeb, 0x1d, 0xa8, 0xee, 0xf6, 0x99, + 0xaf, 0xb4, 0xcf, 0x4b, 0x0f, 0x2e, 0x94, 0xf1, 0x5e, 0xfd, 0xf7, 0xc5, 0x2e, 0x79, 0x1e, 0xeb, + 0x67, 0xd7, 0xf7, 0x49, 0x65, 0x54, 0xfa, 0x43, 0x18, 0x39, 0xec, 0x63, 0xe6, 0xbd, 0x0d, 0x46, + 0xdb, 0x30, 0x2f, 0x08, 0xe9, 0xa9, 0xbe, 0x03, 0x15, 0x01, 0x4b, 0x12, 0x37, 0x2f, 0x48, 0x98, + 0x20, 0x20, 0xd6, 0xf6, 0x23, 0x58, 0x1c, 0xee, 0xd3, 0x62, 0x21, 0xcb, 0xae, 0xbb, 0xd3, 0x26, + 0xcc, 0x6d, 0x84, 0xae, 0xd7, 0x93, 0x84, 0xae, 0xb7, 0xc9, 0x0e, 0x2c, 0x14, 0x9b, 0xbc, 0x16, + 0x9b, 0xc2, 0xaf, 0xd1, 0x27, 0xe2, 0x95, 0x77, 0xda, 0x83, 0xf9, 0x7d, 0x16, 0x76, 0x11, 0x7b, + 0xd6, 0xf7, 0x8b, 0x57, 0xf5, 0x5d, 0x98, 0x42, 0xb8, 0xb8, 0x21, 0x8c, 0x97, 0xdd, 0x10, 0x9a, + 0xea, 0xc6, 0xd2, 0x47, 0x0b, 0xab, 0x77, 0xc4, 0xa7, 0xee, 0xf7, 0x14, 0xf5, 0xc3, 0x0a, 0x7d, + 0xf4, 0xbe, 0xfb, 0x5b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x47, 0x77, 0x52, 0x8c, 0x07, 0x17, 0x00, + 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 5ffc7bcdd..f2279873e 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -93,38 +93,33 @@ message OfflinePushInfo{ string Ext = 3; } -message GroupInfoTip{ - string GroupID = 1; - string GroupName = 2; - string Notification = 3; - string Introduction = 4; - string FaceUrl = 5; - string Ex = 6; - string OwnerID = 7; - uint64 CreateTime = 8; - uint32 MemberCount = 9; +//public +message GroupInfo{ + string GroupID = 1; + string GroupName = 2; + string Notification = 3; + string Introduction = 4; + string FaceUrl = 5; + string Ex = 6; + PublicUserInfo Owner = 7; + uint64 CreateTime = 8; + uint32 MemberCount = 9; } - -message GroupMemberFullInfoTip { - string GroupId = 1 ; - string UserId = 2 ; +//private, Group members have permission to view +message GroupMemberFullInfo { + string GroupID = 1 ; + string UserID = 2 ; int32 Role = 3; uint64 JoinTime = 4; string NickName = 5; - string FaceUrl =6; + string FaceUrl = 6; + string FriendRemark = 7; } - - -message CreateGroupTip{ - GroupInfoTip Group = 1; - UserInfoTip Creator = 2; - repeated GroupMemberFullInfoTip MemberList = 3; -} - -message UserInfoTip { +//private, Friends have permission to view +message UserInfo{ string UserID = 1; string Name = 2; string Icon = 3; @@ -135,4 +130,140 @@ message UserInfoTip { string Ex = 8; } +//No permissions required +message PublicUserInfo{ + string UserID = 1; + string Name = 2; + string Icon = 3; + int32 Gender = 4; +} +message TipsComm{ + string Detail = 1; + string DefaultTips = 2; +} + +//////////////////////group///////////////////// +//Actively join the group +message MemberEnterTips{ + GroupInfo Group = 1; + GroupMemberFullInfo Member = 2; + uint64 OperationTime = 3; +} + + +//Actively leave the group +message MemberLeaveTips{ + GroupInfo Group = 1; + GroupMemberFullInfo Member = 2; + uint64 OperationTime = 3; +} + +message MemberInvitedTips{ + GroupInfo Group = 1; + GroupMemberFullInfo OpUser = 2; + GroupMemberFullInfo Member = 3; + uint64 OperationTime = 4; +} + +message MemberKickedTips{ + GroupInfo Group = 1; + GroupMemberFullInfo OpUser = 2; + GroupMemberFullInfo Member = 3; + uint64 OperationTime = 4; +} + +message GroupMemberChangeInfo{ + int32 ChangeType = 1; //1:info changed; 2:mute + GroupMemberFullInfo OpUser = 2; //who do this + GroupMemberFullInfo Member = 3; + uint64 MuteTime = 4; +} + +message MemberInfoChangedTips{ + GroupInfo Group = 1; + GroupMemberChangeInfo MemberChanged = 2; +} + +message GroupCreatedTips{ + GroupInfo Group = 1; + GroupMemberFullInfo Creator = 2; + repeated GroupMemberFullInfo MemberList = 3; + uint64 OperationTime = 4; +} + +message GroupInfoChangedTips{ + int32 ChangedType = 1; //1:name;2:Notification ... + GroupInfo Group = 2; + GroupMemberFullInfo OpUser = 3; +} + +message ReceiveJoinApplicationTips{ + GroupInfo Group = 1; + GroupMemberFullInfo Member = 2; + string Reason = 3; +} + +message ApplicationProcessedTips{ + GroupInfo Group = 1; + GroupMemberFullInfo OpUser = 2; + int32 Result = 3; + string Reason = 4; +} + +//////////////////////friend///////////////////// +message FriendInfo{ + string OwnerUserID = 1; + string Remark = 2; + uint64 CreateTime = 3; + UserInfo FriendUserInfo = 4; +} + +message FriendApplication{ + uint64 AddTime = 4; + string AddSource = 5; + string AddWording = 6; +} + +//user1 add user2 +message FriendApplicationListAddedTips{ + PublicUserInfo OpUser = 1; //user1 + FriendApplication Application = 2; + PublicUserInfo OpedUser = 3; //user2 +} + +// user2 accept +message FriendApplicationListAcceptTips{ + PublicUserInfo OpUser = 1; //user2 + PublicUserInfo OpedUser = 2; //user1 +} + +// user2 reject +message FriendApplicationListRejectTips{ + PublicUserInfo OpUser = 1; //user2 + PublicUserInfo OpedUser = 2; //user1 +} + +message FriendListAddedTips{ + FriendInfo Friend = 1; +} + +message FriendListDeletedTips{ + FriendInfo Friend = 1; +} + +message BlackListAddTips{ + FriendInfo Friend = 1; +} + +message BlackListDeletedTips{ + FriendInfo Friend = 1; +} + +message FriendInfoChangedTips{ + FriendInfo Friend = 1; +} +//////////////////////user///////////////////// +message SelfInfoUpdatedTips{ + UserInfo SelfUserInfo = 1; +} \ No newline at end of file From 184f0900fb7f660fbe60bed8352d8968bf999089 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 11:36:43 +0800 Subject: [PATCH 04/19] protocol modify --- internal/msg_gateway/gate/logic.go | 130 ++----- internal/rpc/msg/pull_message.go | 104 +----- pkg/common/constant/constant.go | 3 +- pkg/common/db/mongoModel.go | 113 ++---- pkg/common/db/redisModel.go | 14 +- pkg/proto/chat/chat.proto | 37 +- pkg/proto/sdk_ws/ws.pb.go | 572 +++++++++-------------------- pkg/proto/sdk_ws/ws.proto | 55 +-- pkg/utils/utils.go | 34 ++ 9 files changed, 291 insertions(+), 771 deletions(-) diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 5fec367aa..d1756093c 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -10,7 +10,6 @@ import ( "bytes" "context" "encoding/gob" - "encoding/json" "github.com/golang/protobuf/proto" "github.com/gorilla/websocket" "runtime" @@ -51,8 +50,6 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { switch m.ReqIdentifier { case constant.WSGetNewestSeq: ws.getSeqReq(conn, &m) - case constant.WSPullMsg: - ws.pullMsgReq(conn, &m) case constant.WSSendMsg: ws.sendMsgReq(conn, &m) case constant.WSPullMsgBySeqList: @@ -63,24 +60,24 @@ 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) - pbData := pbChat.GetMaxAndMinSeqReq{} + rpcReq := pbChat.GetMaxAndMinSeqReq{} nReply := new(pbChat.GetMaxAndMinSeqResp) - pbData.UserID = m.SendID - pbData.OperationID = m.OperationID + 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) if grpcConn == nil { - log.ErrorByKv("get grpcConn err", pbData.OperationID, "args", m) + log.ErrorByKv("get grpcConn err", rpcReq.OperationID, "args", m) } msgClient := pbChat.NewChatClient(grpcConn) - reply, err := msgClient.GetMaxAndMinSeq(context.Background(), &pbData) + rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) if err != nil { - log.ErrorByKv("rpc call failed to getSeqReq", pbData.OperationID, "err", err, "pbData", pbData.String()) - nReply.ErrCode = 200 + log.Error(rpcReq.OperationID, "rpc call failed to getSeqReq", err, rpcReq.String()) + nReply.ErrCode = 500 nReply.ErrMsg = err.Error() ws.getSeqResp(conn, m, nReply) } else { - log.InfoByKv("rpc call success to getSeqReq", pbData.OperationID, "replyData", reply.String()) - ws.getSeqResp(conn, m, reply) + log.InfoByKv("rpc call success to getSeqReq", rpcReq.OperationID, "replyData", rpcReply.String()) + ws.getSeqResp(conn, m, rpcReply) } } func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *pbChat.GetMaxAndMinSeqResp) { @@ -98,121 +95,38 @@ func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *pbChat.GetMaxAndMinSeq } ws.sendMsg(conn, mReply) } -func (ws *WServer) pullMsgReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to pullMsgReq", m.ReqIdentifier, m.MsgIncr, m.SendID) - nReply := new(sdk_ws.PullMessageResp) - isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsg) - if isPass { - pbData := sdk_ws.PullMessageReq{} - pbData.UserID = m.SendID - pbData.OperationID = m.OperationID - pbData.SeqBegin = data.(SeqData).SeqBegin - pbData.SeqEnd = data.(SeqData).SeqEnd - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) - reply, err := msgClient.PullMessage(context.Background(), &pbData) - if err != nil { - log.ErrorByKv("PullMessage error", pbData.OperationID, "err", err.Error()) - nReply.ErrCode = 200 - nReply.ErrMsg = err.Error() - ws.pullMsgResp(conn, m, nReply) - } else { - log.InfoByKv("rpc call success to pullMsgRep", pbData.OperationID, "ReplyArgs", reply.String(), "maxSeq", reply.GetMaxSeq(), - "MinSeq", reply.GetMinSeq(), "singLen", len(reply.GetSingleUserMsg()), "groupLen", len(reply.GetGroupUserMsg())) - ws.pullMsgResp(conn, m, reply) - } - } else { - nReply.ErrCode = errCode - nReply.ErrMsg = errMsg - ws.pullMsgResp(conn, m, nReply) - } -} -func (ws *WServer) pullMsgResp(conn *UserConn, m *Req, pb *sdk_ws.PullMessageResp) { - log.NewInfo(m.OperationID, "pullMsgResp come here ", pb.String()) - var mReplyData sdk_ws.PullMessageBySeqListResp - a, err := json.Marshal(pb.SingleUserMsg) - if err != nil { - log.NewError(m.OperationID, "GetSingleUserMsg,json marshal,err", err.Error()) - } - log.NewInfo(m.OperationID, "pullMsgResp json is ", len(pb.SingleUserMsg)) - err = json.Unmarshal(a, &mReplyData.SingleUserMsg) - if err != nil { - log.NewError(m.OperationID, "SingleUserMsg,json Unmarshal,err", err.Error()) - } - b, err := json.Marshal(pb.GroupUserMsg) - if err != nil { - log.NewError(m.OperationID, "mReplyData,json marshal,err", err.Error()) - } - err = json.Unmarshal(b, &mReplyData.GroupUserMsg) - if err != nil { - log.NewError(m.OperationID, "test SingleUserMsg,json Unmarshal,err", err.Error()) - } - c, err := proto.Marshal(&mReplyData) - log.NewInfo(m.OperationID, "test info is ", len(mReplyData.SingleUserMsg), mReplyData.SingleUserMsg) - mReply := Resp{ - ReqIdentifier: m.ReqIdentifier, - MsgIncr: m.MsgIncr, - ErrCode: pb.GetErrCode(), - ErrMsg: pb.GetErrMsg(), - OperationID: m.OperationID, - Data: c, - } - log.NewInfo(m.OperationID, "pullMsgResp all data is ", mReply.ReqIdentifier, mReply.MsgIncr, mReply.ErrCode, mReply.ErrMsg, - len(mReply.Data)) - ws.sendMsg(conn, mReply) -} func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr) - nReply := new(sdk_ws.PullMessageResp) + nReply := new(sdk_ws.PullMessageBySeqListResp) isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSPullMsgBySeqList) log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdk_ws.PullMessageBySeqListReq).SeqList) if isPass { - pbData := sdk_ws.PullMessageBySeqListReq{} - pbData.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList - pbData.UserID = m.SendID - pbData.OperationID = m.OperationID + rpcReq := sdk_ws.PullMessageBySeqListReq{} + rpcReq.SeqList = data.(sdk_ws.PullMessageBySeqListReq).SeqList + 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) - reply, err := msgClient.PullMessageBySeqList(context.Background(), &pbData) + reply, err := msgClient.PullMessageBySeqList(context.Background(), &rpcReq) if err != nil { - log.NewError(pbData.OperationID, "pullMsgBySeqListReq err", err.Error()) + log.NewError(rpcReq.OperationID, "pullMsgBySeqListReq err", err.Error()) nReply.ErrCode = 200 nReply.ErrMsg = err.Error() - ws.pullMsgResp(conn, m, nReply) + ws.pullMsgBySeqListResp(conn, m, nReply) } else { - log.NewInfo(pbData.OperationID, "rpc call success to pullMsgBySeqListReq", reply.String(), reply.GetMaxSeq(), reply.GetMinSeq(), len(reply.GetSingleUserMsg()), len(reply.GetGroupUserMsg())) + log.NewInfo(rpcReq.OperationID, "rpc call success to pullMsgBySeqListReq", reply.String(), len(reply.List)) ws.pullMsgBySeqListResp(conn, m, reply) } } else { nReply.ErrCode = errCode nReply.ErrMsg = errMsg - ws.pullMsgResp(conn, m, nReply) + ws.pullMsgBySeqListResp(conn, m, nReply) } } func (ws *WServer) pullMsgBySeqListResp(conn *UserConn, m *Req, pb *sdk_ws.PullMessageBySeqListResp) { - log.NewInfo(m.OperationID, "pullMsgResp come here ", pb.String()) - var mReplyData sdk_ws.PullMessageBySeqListResp - a, err := json.Marshal(pb.SingleUserMsg) - if err != nil { - log.NewError(m.OperationID, "GetSingleUserMsg,json marshal,err", err.Error()) - } - log.NewInfo(m.OperationID, "pullMsgResp json is ", len(pb.SingleUserMsg)) - err = json.Unmarshal(a, &mReplyData.SingleUserMsg) - if err != nil { - log.NewError(m.OperationID, "SingleUserMsg,json Unmarshal,err", err.Error()) - } - b, err := json.Marshal(pb.GroupUserMsg) - if err != nil { - log.NewError(m.OperationID, "mReplyData,json marshal,err", err.Error()) - } - err = json.Unmarshal(b, &mReplyData.GroupUserMsg) - if err != nil { - log.NewError(m.OperationID, "test SingleUserMsg,json Unmarshal,err", err.Error()) - } - c, err := proto.Marshal(&mReplyData) - log.NewInfo(m.OperationID, "test info is ", len(mReplyData.SingleUserMsg), mReplyData.SingleUserMsg) - + log.NewInfo(m.OperationID, "pullMsgBySeqListResp come here ", pb.String()) + c, _ := proto.Marshal(pb) mReply := Resp{ ReqIdentifier: m.ReqIdentifier, MsgIncr: m.MsgIncr, @@ -221,7 +135,7 @@ func (ws *WServer) pullMsgBySeqListResp(conn *UserConn, m *Req, pb *sdk_ws.PullM OperationID: m.OperationID, Data: c, } - log.NewInfo(m.OperationID, "pullMsgResp all data is ", mReply.ReqIdentifier, mReply.MsgIncr, mReply.ErrCode, mReply.ErrMsg, + log.NewInfo(m.OperationID, "pullMsgBySeqListResp all data is ", mReply.ReqIdentifier, mReply.MsgIncr, mReply.ErrCode, mReply.ErrMsg, len(mReply.Data)) ws.sendMsg(conn, mReply) diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index af619182b..6f6a614d1 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -6,11 +6,8 @@ import ( commonDB "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" - open_im_sdk "Open_IM/pkg/proto/sdk_ws" - "sort" - "strings" - 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) { @@ -20,7 +17,7 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq minSeq, err2 := commonDB.DB.GetUserMinSeq(in.UserID) resp := new(pbMsg.GetMaxAndMinSeqResp) if err1 == nil { - resp.MaxSeq = maxSeq + resp.MaxSeq = uint32(maxSeq) } else if err1 == redis.ErrNil { resp.MaxSeq = 0 } else { @@ -30,7 +27,7 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq resp.ErrMsg = "redis get err" } if err2 == nil { - resp.MinSeq = minSeq + resp.MinSeq = uint32(minSeq) } else if err2 == redis.ErrNil { resp.MinSeq = 0 } else { @@ -41,104 +38,23 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq } return resp, nil } -func (rpc *rpcChat) PullMessage(_ context.Context, in *open_im_sdk.PullMessageReq) (*open_im_sdk.PullMessageResp, error) { - log.InfoByKv("rpc pullMessage is arriving", in.OperationID, "args", in.String()) - resp := new(open_im_sdk.PullMessageResp) - var respSingleMsgFormat []*open_im_sdk.GatherFormat - var respGroupMsgFormat []*open_im_sdk.GatherFormat - SingleMsgFormat, GroupMsgFormat, MaxSeq, MinSeq, err := commonDB.DB.GetMsgBySeqRange(in.UserID, in.SeqBegin, in.SeqEnd) - if err != nil { - log.ErrorByKv("pullMsg data error", in.OperationID, in.String()) - resp.ErrCode = 1 - resp.ErrMsg = err.Error() - return resp, nil - } - respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID) - respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat) - return &open_im_sdk.PullMessageResp{ - ErrCode: 0, - ErrMsg: "", - MaxSeq: MaxSeq, - MinSeq: MinSeq, - SingleUserMsg: respSingleMsgFormat, - GroupUserMsg: respGroupMsgFormat, - }, nil -} 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) - var respSingleMsgFormat []*open_im_sdk.GatherFormat - var respGroupMsgFormat []*open_im_sdk.GatherFormat - SingleMsgFormat, GroupMsgFormat, MaxSeq, MinSeq, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList) + msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList) if err != nil { log.ErrorByKv("PullMessageBySeqList data error", in.OperationID, in.String()) resp.ErrCode = 1 resp.ErrMsg = err.Error() return resp, nil } - respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID) - respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat) - return &open_im_sdk.PullMessageBySeqListResp{ - ErrCode: 0, - ErrMsg: "", - MaxSeq: MaxSeq, - MinSeq: MinSeq, - SingleUserMsg: respSingleMsgFormat, - GroupUserMsg: respGroupMsgFormat, - }, nil -} -func singleMsgHandleByUser(allMsg []*open_im_sdk.MsgData, ownerId string) []*open_im_sdk.GatherFormat { - var userid string - var respMsgFormat []*open_im_sdk.GatherFormat - m := make(map[string]MsgFormats) - //Gather messages in the dimension of users - for _, v := range allMsg { - if v.RecvID != ownerId { - userid = v.RecvID - } else { - userid = v.SendID - } - if value, ok := m[userid]; !ok { - var t MsgFormats - m[userid] = append(t, v) - } else { - m[userid] = append(value, v) - } - } - //Return in pb format - for user, msg := range m { - tempUserMsg := new(open_im_sdk.GatherFormat) - tempUserMsg.Id = user - tempUserMsg.List = msg - sort.Sort(msg) - respMsgFormat = append(respMsgFormat, tempUserMsg) - } - return respMsgFormat -} -func groupMsgHandleByUser(allMsg []*open_im_sdk.MsgData) []*open_im_sdk.GatherFormat { - var respMsgFormat []*open_im_sdk.GatherFormat - m := make(map[string]MsgFormats) - //Gather messages in the dimension of users - for _, v := range allMsg { - //Get group ID - groupID := strings.Split(v.RecvID, " ")[1] - if value, ok := m[groupID]; !ok { - var t MsgFormats - m[groupID] = append(t, v) - } else { - m[groupID] = append(value, v) - } + //respSingleMsgFormat = singleMsgHandleByUser(SingleMsgFormat, in.UserID) + //respGroupMsgFormat = groupMsgHandleByUser(GroupMsgFormat) + resp.ErrCode = 0 + resp.ErrMsg = "" + resp.List = msgList + return resp, nil - } - //Return in pb format - for groupID, msg := range m { - tempUserMsg := new(open_im_sdk.GatherFormat) - tempUserMsg.Id = groupID - tempUserMsg.List = msg - sort.Sort(msg) - respMsgFormat = append(respMsgFormat, tempUserMsg) - } - return respMsgFormat } type MsgFormats []*open_im_sdk.MsgData diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index cd0c99fae..6e32cea2e 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -18,9 +18,8 @@ const ( //Websocket Protocol WSGetNewestSeq = 1001 - WSPullMsg = 1002 + WSPullMsgBySeqList = 1002 WSSendMsg = 1003 - WSPullMsgBySeqList = 1004 WSPushMsg = 2001 WSKickOnlineMsg = 2002 WSDataError = 3001 diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 128815031..6538d17f4 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -2,10 +2,10 @@ package db import ( "Open_IM/pkg/common/config" - "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" pbMsg "Open_IM/pkg/proto/chat" open_im_sdk "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" "errors" "github.com/garyburd/redigo/redis" "github.com/golang/protobuf/proto" @@ -33,51 +33,8 @@ type GroupMember_x struct { UIDList []string } -func (d *DataBases) GetMsgBySeqRange(uid string, seqBegin, seqEnd int64) (SingleMsg []*open_im_sdk.MsgData, GroupMsg []*open_im_sdk.MsgData, MaxSeq int64, MinSeq int64, err error) { - var count int64 - session := d.mgoSession.Clone() - if session == nil { - return nil, nil, MaxSeq, MinSeq, errors.New("session == nil") - } - defer session.Close() - - c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) - - sChat := UserChat{} - if err = c.Find(bson.M{"uid": uid}).One(&sChat); err != nil { - return nil, nil, MaxSeq, MinSeq, err - } - 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 { - return nil, nil, MaxSeq, MinSeq, err - } - if msg.Seq >= seqBegin && msg.Seq <= seqEnd { - if msg.Seq > MaxSeq { - MaxSeq = msg.Seq - } - if count == 0 { - MinSeq = msg.Seq - } - if msg.Seq < MinSeq { - MinSeq = msg.Seq - } - if msg.SessionType == constant.SingleChatType { - SingleMsg = append(SingleMsg, msg) - } else { - GroupMsg = append(GroupMsg, msg) - } - count++ - if count == (seqEnd - seqBegin + 1) { - break - } - } - } - - return SingleMsg, GroupMsg, MaxSeq, MinSeq, nil -} -func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq int64, err error) { - var i int64 +func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq uint32, err error) { + var i, NB uint32 var seqUid string session := d.mgoSession.Clone() if session == nil { @@ -89,7 +46,7 @@ func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq int64, err error) { if err != nil && err != redis.ErrNil { return MinSeq, err } - NB := MaxSeq / singleGocMsgNum + NB = uint32(MaxSeq / singleGocMsgNum) for i = 0; i <= NB; i++ { seqUid = indexGen(uid, i) n, err := c.Find(bson.M{"uid": seqUid}).Count() @@ -97,29 +54,28 @@ func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq int64, err error) { if i == 0 { MinSeq = 1 } else { - MinSeq = i * singleGocMsgNum + MinSeq = uint32(i * singleGocMsgNum) } break } } return MinSeq, nil } -func (d *DataBases) GetMsgBySeqList(uid string, seqList []int64) (SingleMsg []*open_im_sdk.MsgData, GroupMsg []*open_im_sdk.MsgData, MaxSeq int64, MinSeq int64, err error) { - allCount := 0 +func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32) (seqMsg []*open_im_sdk.MsgData, err error) { + var hasSeqList []uint32 singleCount := 0 session := d.mgoSession.Clone() if session == nil { - return nil, nil, MaxSeq, MinSeq, errors.New("session == nil") + return nil, errors.New("session == nil") } defer session.Close() - c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) - m := func(uid string, seqList []int64) map[string][]int64 { - t := make(map[string][]int64) + 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 []int64 + var temp []uint32 t[seqUid] = append(temp, seqList[i]) } else { t[seqUid] = append(value, seqList[i]) @@ -138,24 +94,11 @@ func (d *DataBases) GetMsgBySeqList(uid string, seqList []int64) (SingleMsg []*o msg := new(open_im_sdk.MsgData) if err = proto.Unmarshal(sChat.Msg[i].Msg, msg); err != nil { log.NewError("", "not find seqUid", seqUid, value, uid, seqList) - return nil, nil, MaxSeq, MinSeq, err + return nil, err } - if isContainInt64(msg.Seq, value) { - if msg.Seq > MaxSeq { - MaxSeq = msg.Seq - } - if allCount == 0 { - MinSeq = msg.Seq - } - if msg.Seq < MinSeq { - MinSeq = msg.Seq - } - if msg.SessionType == constant.SingleChatType { - SingleMsg = append(SingleMsg, msg) - } else { - GroupMsg = append(GroupMsg, msg) - } - allCount++ + if isContainInt32(msg.Seq, value) { + seqMsg = append(seqMsg, msg) + hasSeqList = append(hasSeqList, msg.Seq) singleCount++ if singleCount == len(value) { break @@ -163,8 +106,24 @@ func (d *DataBases) GetMsgBySeqList(uid string, seqList []int64) (SingleMsg []*o } } } - return SingleMsg, GroupMsg, MaxSeq, MinSeq, nil + if len(hasSeqList) != len(seqList) { + var diff []uint32 + diff = utils.Difference(hasSeqList, seqList) + exceptionMSg := genExceptionMessageBySeqList(diff) + seqMsg = append(seqMsg, exceptionMSg...) + + } + return seqMsg, nil } +func genExceptionMessageBySeqList(seqList []uint32) (exceptionMsg []*open_im_sdk.MsgData) { + for _, v := range seqList { + msg := new(open_im_sdk.MsgData) + msg.Seq = v + exceptionMsg = append(exceptionMsg, msg) + } + return exceptionMsg +} + func (d *DataBases) SaveUserChat(uid string, sendTime int64, m *pbMsg.MsgDataToDB) error { var seqUid string newTime := getCurrentTimestampByMill() @@ -318,11 +277,11 @@ func (d *DataBases) DelGroupMember(groupID, uid string) error { func getCurrentTimestampByMill() int64 { return time.Now().UnixNano() / 1e6 } -func getSeqUid(uid string, seq int64) string { +func getSeqUid(uid string, seq uint32) string { seqSuffix := seq / singleGocMsgNum return indexGen(uid, seqSuffix) } -func isContainInt64(target int64, List []int64) bool { +func isContainInt32(target uint32, List []uint32) bool { for _, element := range List { @@ -333,6 +292,6 @@ func isContainInt64(target int64, List []int64) bool { return false } -func indexGen(uid string, seqSuffix int64) string { - return uid + ":" + strconv.FormatInt(seqSuffix, 10) +func indexGen(uid string, seqSuffix uint32) string { + return uid + ":" + strconv.FormatInt(int64(seqSuffix), 10) } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 7364d7e68..a3e2ade8e 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -35,28 +35,28 @@ func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (inte } //Perform seq auto-increment operation of user messages -func (d *DataBases) IncrUserSeq(uid string) (int64, error) { +func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { key := userIncrSeq + uid - return redis.Int64(d.Exec("INCR", key)) + return redis.Uint64(d.Exec("INCR", key)) } //Get the largest Seq -func (d *DataBases) GetUserMaxSeq(uid string) (int64, error) { +func (d *DataBases) GetUserMaxSeq(uid string) (uint64, error) { key := userIncrSeq + uid - return redis.Int64(d.Exec("GET", key)) + return redis.Uint64(d.Exec("GET", key)) } //Set the user's minimum seq -func (d *DataBases) SetUserMinSeq(uid string, minSeq int64) (err error) { +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) (int64, error) { +func (d *DataBases) GetUserMinSeq(uid string) (uint64, error) { key := userMinSeq + uid - return redis.Int64(d.Exec("GET", key)) + return redis.Uint64(d.Exec("GET", key)) } //Store Apple's device token to redis diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index 12bac416c..7fe50ddc1 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -47,41 +47,9 @@ message GetMaxAndMinSeqReq { message GetMaxAndMinSeqResp { int32 ErrCode = 1; string ErrMsg = 2; - int64 MaxSeq = 3; - int64 MinSeq = 4; + uint32 MaxSeq = 3; + uint32 MinSeq = 4; } -//message GatherFormat{ -// // @inject_tag: json:"id" -// string ID = 1; -// // @inject_tag: json:"list" -// repeated MsgFormat List = 2;//detail msg -//} -//message MsgFormat{ -// // @inject_tag: json:"sendID" -// string SendID = 1; -// // @inject_tag: json:"recvID" -// string RecvID = 2; -// // @inject_tag: json:"msgFrom" -// int32 MsgFrom = 3; -// // @inject_tag: json:"contentType" -// int32 ContentType = 4; -// // @inject_tag: json:"serverMsgID" -// string ServerMsgID = 5; -// // @inject_tag: json:"content" -// string Content = 6; -// // @inject_tag: json:"seq" -// int64 Seq = 7; -// // @inject_tag: json:"sendTime" -// int64 SendTime = 8; -// // @inject_tag: json:"senderPlatformID" -// int32 SenderPlatformID = 9; -// // @inject_tag: json:"senderNickName" -// string SenderNickName = 10; -// // @inject_tag: json:"senderFaceUrl" -// string SenderFaceURL = 11; -// // @inject_tag: json:"clientMsgID" -// string ClientMsgID = 12; -//} message SendMsgReq { @@ -102,7 +70,6 @@ message SendMsgResp { } service Chat { rpc GetMaxAndMinSeq(GetMaxAndMinSeqReq) returns(GetMaxAndMinSeqResp); - rpc PullMessage(server_api_params.PullMessageReq) returns(server_api_params.PullMessageResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc SendMsg(SendMsgReq) returns(SendMsgResp); } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 5c6263e74..c99165093 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_44bd6efa690189ed, []int{0} + return fileDescriptor_ws_dd0597f97f3a9074, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -164,7 +164,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_44bd6efa690189ed, []int{1} + return fileDescriptor_ws_dd0597f97f3a9074, []int{1} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -269,7 +269,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_44bd6efa690189ed, []int{2} + return fileDescriptor_ws_dd0597f97f3a9074, []int{2} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -344,7 +344,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_44bd6efa690189ed, []int{3} + return fileDescriptor_ws_dd0597f97f3a9074, []int{3} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -451,7 +451,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_44bd6efa690189ed, []int{4} + return fileDescriptor_ws_dd0597f97f3a9074, []int{4} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -536,7 +536,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_44bd6efa690189ed, []int{5} + return fileDescriptor_ws_dd0597f97f3a9074, []int{5} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -617,7 +617,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_44bd6efa690189ed, []int{6} + return fileDescriptor_ws_dd0597f97f3a9074, []int{6} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -725,7 +725,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_44bd6efa690189ed, []int{7} + return fileDescriptor_ws_dd0597f97f3a9074, []int{7} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -851,22 +851,19 @@ func (m *FriendRequest) GetEx() string { } 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"` - MaxSeq int64 `protobuf:"varint,3,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq int64 `protobuf:"varint,4,opt,name=minSeq" json:"minSeq,omitempty"` - SingleUserMsg []*GatherFormat `protobuf:"bytes,5,rep,name=singleUserMsg" json:"singleUserMsg,omitempty"` - GroupUserMsg []*GatherFormat `protobuf:"bytes,6,rep,name=groupUserMsg" json:"groupUserMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + 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"` + 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_44bd6efa690189ed, []int{8} + return fileDescriptor_ws_dd0597f97f3a9074, []int{8} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -900,30 +897,9 @@ func (m *PullMessageBySeqListResp) GetErrMsg() string { return "" } -func (m *PullMessageBySeqListResp) GetMaxSeq() int64 { +func (m *PullMessageBySeqListResp) GetList() []*MsgData { if m != nil { - return m.MaxSeq - } - return 0 -} - -func (m *PullMessageBySeqListResp) GetMinSeq() int64 { - if m != nil { - return m.MinSeq - } - return 0 -} - -func (m *PullMessageBySeqListResp) GetSingleUserMsg() []*GatherFormat { - if m != nil { - return m.SingleUserMsg - } - return nil -} - -func (m *PullMessageBySeqListResp) GetGroupUserMsg() []*GatherFormat { - if m != nil { - return m.GroupUserMsg + return m.List } return nil } @@ -931,7 +907,7 @@ func (m *PullMessageBySeqListResp) GetGroupUserMsg() []*GatherFormat { 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 []int64 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,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:"-"` @@ -941,7 +917,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_44bd6efa690189ed, []int{9} + return fileDescriptor_ws_dd0597f97f3a9074, []int{9} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -975,153 +951,13 @@ func (m *PullMessageBySeqListReq) GetOperationID() string { return "" } -func (m *PullMessageBySeqListReq) GetSeqList() []int64 { +func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { if m != nil { return m.SeqList } return nil } -type PullMessageReq struct { - UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - SeqBegin int64 `protobuf:"varint,2,opt,name=seqBegin" json:"seqBegin,omitempty"` - SeqEnd int64 `protobuf:"varint,3,opt,name=seqEnd" json:"seqEnd,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 *PullMessageReq) Reset() { *m = PullMessageReq{} } -func (m *PullMessageReq) String() string { return proto.CompactTextString(m) } -func (*PullMessageReq) ProtoMessage() {} -func (*PullMessageReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_44bd6efa690189ed, []int{10} -} -func (m *PullMessageReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageReq.Unmarshal(m, b) -} -func (m *PullMessageReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageReq.Marshal(b, m, deterministic) -} -func (dst *PullMessageReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageReq.Merge(dst, src) -} -func (m *PullMessageReq) XXX_Size() int { - return xxx_messageInfo_PullMessageReq.Size(m) -} -func (m *PullMessageReq) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageReq.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageReq proto.InternalMessageInfo - -func (m *PullMessageReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *PullMessageReq) GetSeqBegin() int64 { - if m != nil { - return m.SeqBegin - } - return 0 -} - -func (m *PullMessageReq) GetSeqEnd() int64 { - if m != nil { - return m.SeqEnd - } - return 0 -} - -func (m *PullMessageReq) GetOperationID() string { - if m != nil { - return m.OperationID - } - return "" -} - -type PullMessageResp struct { - ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` - MaxSeq int64 `protobuf:"varint,3,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq int64 `protobuf:"varint,4,opt,name=minSeq" json:"minSeq,omitempty"` - SingleUserMsg []*GatherFormat `protobuf:"bytes,5,rep,name=singleUserMsg" json:"singleUserMsg,omitempty"` - GroupUserMsg []*GatherFormat `protobuf:"bytes,6,rep,name=groupUserMsg" json:"groupUserMsg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PullMessageResp) Reset() { *m = PullMessageResp{} } -func (m *PullMessageResp) String() string { return proto.CompactTextString(m) } -func (*PullMessageResp) ProtoMessage() {} -func (*PullMessageResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_44bd6efa690189ed, []int{11} -} -func (m *PullMessageResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PullMessageResp.Unmarshal(m, b) -} -func (m *PullMessageResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PullMessageResp.Marshal(b, m, deterministic) -} -func (dst *PullMessageResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_PullMessageResp.Merge(dst, src) -} -func (m *PullMessageResp) XXX_Size() int { - return xxx_messageInfo_PullMessageResp.Size(m) -} -func (m *PullMessageResp) XXX_DiscardUnknown() { - xxx_messageInfo_PullMessageResp.DiscardUnknown(m) -} - -var xxx_messageInfo_PullMessageResp proto.InternalMessageInfo - -func (m *PullMessageResp) GetErrCode() int32 { - if m != nil { - return m.ErrCode - } - return 0 -} - -func (m *PullMessageResp) GetErrMsg() string { - if m != nil { - return m.ErrMsg - } - return "" -} - -func (m *PullMessageResp) GetMaxSeq() int64 { - if m != nil { - return m.MaxSeq - } - return 0 -} - -func (m *PullMessageResp) GetMinSeq() int64 { - if m != nil { - return m.MinSeq - } - return 0 -} - -func (m *PullMessageResp) GetSingleUserMsg() []*GatherFormat { - if m != nil { - return m.SingleUserMsg - } - return nil -} - -func (m *PullMessageResp) GetGroupUserMsg() []*GatherFormat { - if m != nil { - return m.GroupUserMsg - } - return nil -} - type GetMaxAndMinSeqReq struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1132,7 +968,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_44bd6efa690189ed, []int{12} + return fileDescriptor_ws_dd0597f97f3a9074, []int{10} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1153,8 +989,8 @@ func (m *GetMaxAndMinSeqReq) XXX_DiscardUnknown() { var xxx_messageInfo_GetMaxAndMinSeqReq proto.InternalMessageInfo type GetMaxAndMinSeqResp struct { - MaxSeq int64 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq int64 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` + 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:"-"` @@ -1164,7 +1000,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_44bd6efa690189ed, []int{13} + return fileDescriptor_ws_dd0597f97f3a9074, []int{11} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1184,68 +1020,20 @@ func (m *GetMaxAndMinSeqResp) XXX_DiscardUnknown() { var xxx_messageInfo_GetMaxAndMinSeqResp proto.InternalMessageInfo -func (m *GetMaxAndMinSeqResp) GetMaxSeq() int64 { +func (m *GetMaxAndMinSeqResp) GetMaxSeq() uint32 { if m != nil { return m.MaxSeq } return 0 } -func (m *GetMaxAndMinSeqResp) GetMinSeq() int64 { +func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { if m != nil { return m.MinSeq } return 0 } -type GatherFormat struct { - // @inject_tag: json:"id" - Id string `protobuf:"bytes,1,opt,name=id" json:"id"` - // @inject_tag: json:"list" - List []*MsgData `protobuf:"bytes,2,rep,name=list" json:"list"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GatherFormat) Reset() { *m = GatherFormat{} } -func (m *GatherFormat) String() string { return proto.CompactTextString(m) } -func (*GatherFormat) ProtoMessage() {} -func (*GatherFormat) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_44bd6efa690189ed, []int{14} -} -func (m *GatherFormat) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GatherFormat.Unmarshal(m, b) -} -func (m *GatherFormat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GatherFormat.Marshal(b, m, deterministic) -} -func (dst *GatherFormat) XXX_Merge(src proto.Message) { - xxx_messageInfo_GatherFormat.Merge(dst, src) -} -func (m *GatherFormat) XXX_Size() int { - return xxx_messageInfo_GatherFormat.Size(m) -} -func (m *GatherFormat) XXX_DiscardUnknown() { - xxx_messageInfo_GatherFormat.DiscardUnknown(m) -} - -var xxx_messageInfo_GatherFormat proto.InternalMessageInfo - -func (m *GatherFormat) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -func (m *GatherFormat) GetList() []*MsgData { - if m != nil { - return m.List - } - 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"` @@ -1259,7 +1047,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_44bd6efa690189ed, []int{15} + return fileDescriptor_ws_dd0597f97f3a9074, []int{12} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1313,7 +1101,7 @@ type MsgData struct { 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 int64 `protobuf:"varint,14,opt,name=seq" json:"seq,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"` @@ -1328,7 +1116,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_44bd6efa690189ed, []int{16} + return fileDescriptor_ws_dd0597f97f3a9074, []int{13} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1432,7 +1220,7 @@ func (m *MsgData) GetContent() []byte { return nil } -func (m *MsgData) GetSeq() int64 { +func (m *MsgData) GetSeq() uint32 { if m != nil { return m.Seq } @@ -1489,7 +1277,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_44bd6efa690189ed, []int{17} + return fileDescriptor_ws_dd0597f97f3a9074, []int{14} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1556,7 +1344,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_44bd6efa690189ed, []int{18} + return fileDescriptor_ws_dd0597f97f3a9074, []int{15} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1606,7 +1394,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_44bd6efa690189ed, []int{19} + return fileDescriptor_ws_dd0597f97f3a9074, []int{16} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1675,7 +1463,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_44bd6efa690189ed, []int{20} + return fileDescriptor_ws_dd0597f97f3a9074, []int{17} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1730,7 +1518,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_44bd6efa690189ed, []int{21} + return fileDescriptor_ws_dd0597f97f3a9074, []int{18} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -1786,7 +1574,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_44bd6efa690189ed, []int{22} + return fileDescriptor_ws_dd0597f97f3a9074, []int{19} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -1841,7 +1629,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_44bd6efa690189ed, []int{23} + return fileDescriptor_ws_dd0597f97f3a9074, []int{20} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -1896,7 +1684,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_44bd6efa690189ed, []int{24} + return fileDescriptor_ws_dd0597f97f3a9074, []int{21} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -1952,7 +1740,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_44bd6efa690189ed, []int{25} + return fileDescriptor_ws_dd0597f97f3a9074, []int{22} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2015,7 +1803,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_44bd6efa690189ed, []int{26} + return fileDescriptor_ws_dd0597f97f3a9074, []int{23} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2078,7 +1866,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_44bd6efa690189ed, []int{27} + return fileDescriptor_ws_dd0597f97f3a9074, []int{24} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2140,7 +1928,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_44bd6efa690189ed, []int{28} + return fileDescriptor_ws_dd0597f97f3a9074, []int{25} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2194,7 +1982,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_44bd6efa690189ed, []int{29} + return fileDescriptor_ws_dd0597f97f3a9074, []int{26} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2247,7 +2035,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_44bd6efa690189ed, []int{30} + return fileDescriptor_ws_dd0597f97f3a9074, []int{27} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2293,7 +2081,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_44bd6efa690189ed, []int{31} + return fileDescriptor_ws_dd0597f97f3a9074, []int{28} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2333,7 +2121,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_44bd6efa690189ed, []int{32} + return fileDescriptor_ws_dd0597f97f3a9074, []int{29} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -2380,7 +2168,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_44bd6efa690189ed, []int{33} + return fileDescriptor_ws_dd0597f97f3a9074, []int{30} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -2428,7 +2216,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_44bd6efa690189ed, []int{34} + return fileDescriptor_ws_dd0597f97f3a9074, []int{31} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -2481,7 +2269,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_44bd6efa690189ed, []int{35} + return fileDescriptor_ws_dd0597f97f3a9074, []int{32} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -2519,7 +2307,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_44bd6efa690189ed, []int{36} + return fileDescriptor_ws_dd0597f97f3a9074, []int{33} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -2557,7 +2345,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_44bd6efa690189ed, []int{37} + return fileDescriptor_ws_dd0597f97f3a9074, []int{34} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -2595,7 +2383,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_44bd6efa690189ed, []int{38} + return fileDescriptor_ws_dd0597f97f3a9074, []int{35} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -2634,7 +2422,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_44bd6efa690189ed, []int{39} + return fileDescriptor_ws_dd0597f97f3a9074, []int{36} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -2672,11 +2460,8 @@ func init() { proto.RegisterType((*FriendRequest)(nil), "server_api_params.FriendRequest") proto.RegisterType((*PullMessageBySeqListResp)(nil), "server_api_params.PullMessageBySeqListResp") proto.RegisterType((*PullMessageBySeqListReq)(nil), "server_api_params.PullMessageBySeqListReq") - proto.RegisterType((*PullMessageReq)(nil), "server_api_params.PullMessageReq") - proto.RegisterType((*PullMessageResp)(nil), "server_api_params.PullMessageResp") proto.RegisterType((*GetMaxAndMinSeqReq)(nil), "server_api_params.GetMaxAndMinSeqReq") proto.RegisterType((*GetMaxAndMinSeqResp)(nil), "server_api_params.GetMaxAndMinSeqResp") - proto.RegisterType((*GatherFormat)(nil), "server_api_params.GatherFormat") 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") @@ -2705,134 +2490,127 @@ func init() { proto.RegisterType((*UserInfoUpdatedTips)(nil), "server_api_params.UserInfoUpdatedTips") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_44bd6efa690189ed) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_dd0597f97f3a9074) } -var fileDescriptor_ws_44bd6efa690189ed = []byte{ - // 2010 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4f, 0x6f, 0x23, 0x49, - 0x15, 0x57, 0x77, 0xc7, 0x8e, 0xfd, 0x6c, 0xc7, 0x99, 0x9e, 0x65, 0x30, 0xc3, 0xec, 0x10, 0x5a, - 0xab, 0x25, 0x42, 0x22, 0x48, 0x83, 0x90, 0x60, 0x10, 0xa0, 0xfc, 0x67, 0x96, 0x38, 0x09, 0x9d, - 0x8c, 0x96, 0x03, 0xd2, 0xa8, 0xe3, 0x2e, 0x3b, 0xbd, 0x69, 0x57, 0xb5, 0xab, 0xbb, 0x33, 0x33, - 0x17, 0x0e, 0x70, 0xe1, 0x0b, 0xc0, 0x91, 0x03, 0x17, 0xc4, 0x05, 0x71, 0x41, 0x5c, 0x38, 0xf2, - 0x05, 0x38, 0xf3, 0x15, 0xb8, 0x72, 0x40, 0x42, 0x5a, 0x54, 0xaf, 0xaa, 0xbb, 0xab, 0xda, 0x4e, - 0xd6, 0x8a, 0xa2, 0x1d, 0x24, 0x6e, 0x7e, 0xbf, 0xae, 0xf7, 0xff, 0xd5, 0xab, 0x57, 0x65, 0xe8, - 0xa7, 0xe1, 0xd5, 0xab, 0xd7, 0xe9, 0x37, 0x5f, 0xa7, 0x5b, 0x09, 0x67, 0x19, 0x73, 0x1f, 0xa4, - 0x84, 0x5f, 0x13, 0xfe, 0x2a, 0x48, 0xa2, 0x57, 0x49, 0xc0, 0x83, 0x69, 0xea, 0xfd, 0xcb, 0x86, - 0xf6, 0x21, 0x67, 0x79, 0xf2, 0x82, 0x8e, 0x99, 0x3b, 0x80, 0xd5, 0x09, 0x12, 0x7b, 0x03, 0x6b, - 0xc3, 0xda, 0x6c, 0xfb, 0x05, 0xe9, 0x3e, 0x81, 0x36, 0xfe, 0x3c, 0x0e, 0xa6, 0x64, 0x60, 0xe3, - 0xb7, 0x0a, 0x70, 0x3d, 0xe8, 0x52, 0x96, 0x45, 0xe3, 0x68, 0x14, 0x64, 0x11, 0xa3, 0x03, 0x07, - 0x17, 0x18, 0x98, 0x58, 0x13, 0xd1, 0x8c, 0xb3, 0x30, 0x1f, 0xe1, 0x9a, 0x15, 0xb9, 0x46, 0xc7, - 0x84, 0xfe, 0x71, 0x30, 0x22, 0x2f, 0xfd, 0xa3, 0x41, 0x43, 0xea, 0x57, 0xa4, 0xbb, 0x01, 0x1d, - 0xf6, 0x9a, 0x12, 0xfe, 0x32, 0x25, 0xfc, 0xc5, 0xde, 0xa0, 0x89, 0x5f, 0x75, 0xc8, 0x7d, 0x0a, - 0x30, 0xe2, 0x24, 0xc8, 0xc8, 0x79, 0x34, 0x25, 0x83, 0xd5, 0x0d, 0x6b, 0xb3, 0xe7, 0x6b, 0x88, - 0x90, 0x30, 0x25, 0xd3, 0x0b, 0xc2, 0x77, 0x59, 0x4e, 0xb3, 0x41, 0x0b, 0x17, 0xe8, 0x90, 0xbb, - 0x06, 0x36, 0x79, 0x33, 0x68, 0xa3, 0x68, 0x9b, 0xbc, 0x71, 0x1f, 0x41, 0x33, 0xcd, 0x82, 0x2c, - 0x4f, 0x07, 0xb0, 0x61, 0x6d, 0x36, 0x7c, 0x45, 0xb9, 0x1f, 0x40, 0x0f, 0xe5, 0xb2, 0xc2, 0x9a, - 0x0e, 0xb2, 0x98, 0x60, 0x19, 0xb1, 0xf3, 0xb7, 0x09, 0x19, 0x74, 0x51, 0x40, 0x05, 0x78, 0x7f, - 0xb1, 0xe1, 0x21, 0xc6, 0x7d, 0x88, 0x06, 0x1c, 0xe4, 0x71, 0xfc, 0x19, 0x19, 0x78, 0x04, 0xcd, - 0x5c, 0xaa, 0x93, 0xe1, 0x57, 0x94, 0xd0, 0xc3, 0x59, 0x4c, 0x8e, 0xc8, 0x35, 0x89, 0x31, 0xf0, - 0x0d, 0xbf, 0x02, 0xdc, 0xc7, 0xd0, 0xfa, 0x84, 0x45, 0x14, 0x63, 0x22, 0x22, 0xee, 0xf8, 0x25, - 0x2d, 0xbe, 0xd1, 0x68, 0x74, 0x45, 0x45, 0x4a, 0x65, 0xb8, 0x4b, 0x5a, 0xcf, 0x44, 0xd3, 0xcc, - 0xc4, 0x87, 0xb0, 0x16, 0x24, 0xc9, 0x30, 0xa0, 0x13, 0xc2, 0xa5, 0xd2, 0x55, 0x54, 0x5a, 0x43, - 0x45, 0x3e, 0x84, 0xa6, 0x33, 0x96, 0xf3, 0x11, 0xc1, 0x70, 0x37, 0x7c, 0x0d, 0x11, 0x72, 0x58, - 0x42, 0xb8, 0x16, 0x46, 0x19, 0xf9, 0x1a, 0xaa, 0xb2, 0x02, 0x45, 0x56, 0xbc, 0xdf, 0x5a, 0xb0, - 0x76, 0x9a, 0x5f, 0xc4, 0xd1, 0x08, 0x17, 0x88, 0xa0, 0x55, 0xa1, 0xb1, 0x8c, 0xd0, 0xe8, 0x0e, - 0xda, 0x37, 0x3b, 0xe8, 0x98, 0x0e, 0x3e, 0x82, 0xe6, 0x84, 0xd0, 0x90, 0x70, 0x0c, 0x58, 0xc3, - 0x57, 0xd4, 0x02, 0xc7, 0x1b, 0x8b, 0x1c, 0xf7, 0x7e, 0x63, 0x43, 0xeb, 0x73, 0x36, 0x6d, 0x03, - 0x3a, 0xc9, 0x25, 0xa3, 0xe4, 0x38, 0x17, 0xc5, 0xa4, 0x92, 0xa9, 0x43, 0xee, 0x7b, 0xd0, 0xb8, - 0x88, 0x78, 0x76, 0x89, 0xd9, 0xec, 0xf9, 0x92, 0x10, 0x28, 0x99, 0x06, 0x91, 0x4c, 0x61, 0xdb, - 0x97, 0x84, 0x8a, 0x78, 0xab, 0xdc, 0x07, 0xe6, 0xce, 0x6a, 0xcf, 0xed, 0xac, 0xf9, 0xc0, 0xc0, - 0xc2, 0xc0, 0xfc, 0xdb, 0x02, 0x38, 0xe0, 0x11, 0xa1, 0x21, 0x86, 0xa6, 0xb6, 0xa5, 0xad, 0xf9, - 0x2d, 0xfd, 0x08, 0x9a, 0x9c, 0x4c, 0x03, 0x7e, 0x55, 0x94, 0xbc, 0xa4, 0x6a, 0x06, 0x39, 0x73, - 0x06, 0x7d, 0x0f, 0x60, 0x8c, 0x7a, 0x84, 0x1c, 0x0c, 0x55, 0xe7, 0xd9, 0x97, 0xb7, 0xe6, 0x9a, - 0xdf, 0x56, 0x91, 0x25, 0x5f, 0x5b, 0x2e, 0xf6, 0x53, 0x10, 0x86, 0xaa, 0x6c, 0x65, 0x86, 0x2b, - 0x60, 0x41, 0xd5, 0x36, 0x6f, 0xa9, 0xda, 0xd5, 0xb2, 0x6a, 0xff, 0x69, 0x41, 0x7b, 0x27, 0x0e, - 0x46, 0x57, 0x4b, 0xba, 0x6e, 0xba, 0x68, 0xcf, 0xb9, 0x78, 0x08, 0xbd, 0x0b, 0x21, 0xae, 0x70, - 0x01, 0xa3, 0xd0, 0x79, 0xf6, 0xd5, 0x05, 0x5e, 0x9a, 0x9b, 0xc5, 0x37, 0xf9, 0x4c, 0x77, 0x57, - 0x3e, 0xdb, 0xdd, 0xc6, 0x2d, 0xee, 0x36, 0x4b, 0x77, 0xff, 0x6e, 0x43, 0x17, 0xdb, 0x9b, 0x4f, - 0x66, 0x39, 0x49, 0x33, 0xf7, 0xfb, 0xd0, 0xca, 0x0b, 0x53, 0xad, 0x65, 0x4d, 0x2d, 0x59, 0xdc, - 0xe7, 0xaa, 0x99, 0x22, 0xbf, 0x8d, 0xfc, 0x4f, 0x16, 0xf0, 0x97, 0x27, 0x99, 0x5f, 0x2d, 0x17, - 0x07, 0xcf, 0x65, 0x40, 0xc3, 0x98, 0xf8, 0x24, 0xcd, 0xe3, 0x4c, 0xf5, 0x48, 0x03, 0x93, 0x95, - 0x36, 0x1b, 0xa6, 0x13, 0x75, 0x2c, 0x29, 0x4a, 0x44, 0x47, 0xae, 0x13, 0x9f, 0xa4, 0xeb, 0x15, - 0x20, 0x36, 0x2a, 0x27, 0x33, 0xcc, 0x90, 0xdc, 0x56, 0x05, 0x59, 0xe9, 0x54, 0x51, 0x93, 0x85, - 0x60, 0x60, 0x22, 0xc5, 0x92, 0x46, 0x01, 0xf2, 0x3c, 0xd2, 0x90, 0xfa, 0x71, 0xe4, 0xfd, 0xc3, - 0x81, 0x9e, 0xdc, 0x3e, 0x45, 0x50, 0x9f, 0x8a, 0x3a, 0x67, 0x53, 0xa3, 0x8a, 0x34, 0x44, 0x58, - 0x21, 0xa8, 0x63, 0xb3, 0xd1, 0x18, 0x98, 0x28, 0x45, 0x41, 0x1f, 0x18, 0x0d, 0x47, 0x87, 0x0a, - 0x2d, 0x87, 0x7a, 0xe3, 0xd1, 0x10, 0xd1, 0xca, 0x32, 0x66, 0x54, 0x47, 0x49, 0x0b, 0xde, 0x8c, - 0x95, 0xfa, 0x65, 0x7d, 0x68, 0x88, 0x88, 0x6f, 0xc6, 0x0a, 0xdd, 0x32, 0x48, 0x15, 0x20, 0x25, - 0x2b, 0xbd, 0xf2, 0x00, 0x29, 0xe9, 0xb9, 0xac, 0xb6, 0x6f, 0xcd, 0x2a, 0x18, 0x59, 0x35, 0x37, - 0x57, 0x67, 0x6e, 0x73, 0x7d, 0x00, 0x3d, 0x29, 0xa7, 0x28, 0xfa, 0xae, 0x3c, 0xe0, 0x0d, 0xd0, - 0xac, 0x8d, 0x5e, 0xbd, 0x36, 0xcc, 0xec, 0xae, 0xdd, 0x90, 0xdd, 0x7e, 0x99, 0xdd, 0x5f, 0xd9, - 0x30, 0x38, 0xcd, 0xe3, 0x78, 0x48, 0xd2, 0x34, 0x98, 0x90, 0x9d, 0xb7, 0x67, 0x64, 0x76, 0x14, - 0xa5, 0x99, 0x4f, 0xd2, 0x44, 0x14, 0x1a, 0xe1, 0x7c, 0x97, 0x85, 0x04, 0xb3, 0xdc, 0xf0, 0x0b, - 0x52, 0xb8, 0x48, 0x38, 0x17, 0x16, 0xa8, 0x16, 0x29, 0x29, 0x81, 0x4f, 0x83, 0x37, 0x67, 0x64, - 0x86, 0x19, 0x75, 0x7c, 0x45, 0x21, 0x1e, 0x51, 0x81, 0xaf, 0x28, 0x1c, 0x29, 0x77, 0x1f, 0x7a, - 0x69, 0x44, 0x27, 0xb2, 0x38, 0x65, 0xb1, 0x3b, 0x9b, 0x9d, 0x67, 0x5f, 0x59, 0xb4, 0xc9, 0x82, - 0xec, 0x92, 0xf0, 0x03, 0xc6, 0xa7, 0x41, 0xe6, 0x9b, 0x5c, 0xee, 0x2e, 0x74, 0x71, 0xe3, 0x15, - 0x52, 0x9a, 0xcb, 0x49, 0x31, 0x98, 0xbc, 0x29, 0x7c, 0x71, 0x71, 0x24, 0x66, 0x37, 0x1e, 0xa7, - 0xa2, 0xa1, 0x62, 0x47, 0x8a, 0x18, 0x2d, 0x27, 0x24, 0x1d, 0x12, 0x21, 0x4c, 0xa5, 0x9c, 0x81, - 0xb3, 0xe1, 0x6c, 0x3a, 0x7e, 0x41, 0x7a, 0x3f, 0x17, 0xf3, 0x44, 0xa9, 0xee, 0x36, 0x2d, 0x8f, - 0xa1, 0x95, 0x92, 0xd9, 0x0e, 0x99, 0x44, 0x14, 0x55, 0x38, 0x7e, 0x49, 0xe3, 0xb0, 0x48, 0x66, - 0xfb, 0x34, 0x2c, 0x02, 0x2e, 0xa9, 0xba, 0x65, 0x2b, 0x73, 0x96, 0x79, 0x9f, 0x5a, 0xd0, 0x37, - 0x0c, 0xf8, 0xbf, 0x4b, 0xf8, 0x7b, 0xe0, 0x1e, 0x92, 0x6c, 0x18, 0xbc, 0xd9, 0xa6, 0xe1, 0x10, - 0xcd, 0xf3, 0xc9, 0xcc, 0xdb, 0x87, 0x87, 0x73, 0x68, 0x9a, 0x68, 0x8e, 0x5a, 0x37, 0x38, 0x6a, - 0xeb, 0x8e, 0x7a, 0xc7, 0xd0, 0xd5, 0x55, 0x8b, 0x8d, 0x17, 0x85, 0x2a, 0xb1, 0x76, 0x14, 0xba, - 0x5b, 0xb0, 0x12, 0x8b, 0xaa, 0xb0, 0xd1, 0xf2, 0xc7, 0x0b, 0x2c, 0x1f, 0xa6, 0x93, 0xbd, 0x20, - 0x0b, 0x7c, 0x5c, 0xe7, 0xcd, 0xa0, 0x2f, 0xec, 0x3e, 0x23, 0x34, 0x1c, 0xa6, 0x13, 0x34, 0x69, - 0x03, 0x3a, 0x92, 0x6b, 0x98, 0x4e, 0xaa, 0xe3, 0x5c, 0x83, 0xc4, 0x8a, 0x51, 0x1c, 0x11, 0x9a, - 0xc9, 0x15, 0xaa, 0x3e, 0x35, 0x48, 0xd6, 0x16, 0x0d, 0xcb, 0x89, 0x06, 0x6b, 0x4b, 0xd2, 0xde, - 0x5f, 0x1b, 0xb0, 0xaa, 0x8c, 0x90, 0x75, 0x46, 0xc3, 0xaa, 0x36, 0x25, 0x25, 0x7b, 0xdd, 0xe8, - 0xba, 0xba, 0x1e, 0x48, 0x4a, 0xbf, 0x50, 0x38, 0xe6, 0x85, 0xa2, 0x66, 0xd3, 0xca, 0xbc, 0x4d, - 0x35, 0xbf, 0x1a, 0xf3, 0x7e, 0x7d, 0x1d, 0xd6, 0x53, 0xec, 0xc7, 0xa7, 0x71, 0x90, 0x8d, 0x19, - 0x9f, 0xaa, 0x81, 0xa8, 0xe1, 0xcf, 0xe1, 0x62, 0x96, 0x90, 0x58, 0x79, 0x1e, 0xc8, 0x86, 0x5f, - 0x43, 0x45, 0xf7, 0x95, 0x48, 0x71, 0x2e, 0xc8, 0x49, 0xd4, 0x04, 0xa5, 0x6d, 0x69, 0x1a, 0x31, - 0x8a, 0x17, 0x2c, 0xd9, 0xfe, 0x75, 0x48, 0x78, 0x3e, 0x4d, 0x27, 0x07, 0x9c, 0x4d, 0xd5, 0x3c, - 0x5a, 0x90, 0xe8, 0x39, 0xa3, 0x19, 0xa1, 0x19, 0xf2, 0x76, 0x24, 0xaf, 0x06, 0x09, 0x5e, 0x45, - 0x62, 0xef, 0xef, 0xfa, 0x05, 0xe9, 0xae, 0x83, 0x93, 0x92, 0x19, 0x36, 0x74, 0xc7, 0x17, 0x3f, - 0x8d, 0xcc, 0xf5, 0xcd, 0xcc, 0xd5, 0x4e, 0x9a, 0x75, 0xfc, 0xaa, 0x9f, 0x34, 0xd5, 0x15, 0xf3, - 0x81, 0x71, 0xc5, 0xdc, 0x86, 0x55, 0x96, 0x88, 0xfe, 0x90, 0x0e, 0x5c, 0xac, 0xcb, 0xaf, 0xdd, - 0x5c, 0x97, 0x5b, 0x27, 0x72, 0xe5, 0x3e, 0xcd, 0xf8, 0x5b, 0xbf, 0xe0, 0x73, 0x8f, 0xa0, 0xcf, - 0xc6, 0xe3, 0x38, 0xa2, 0xe4, 0x34, 0x4f, 0x2f, 0x71, 0x70, 0x7a, 0x88, 0x83, 0x93, 0xb7, 0x40, - 0xd4, 0x89, 0xb9, 0xd2, 0xaf, 0xb3, 0x3e, 0x7e, 0x0e, 0x5d, 0x5d, 0x8d, 0x08, 0xc3, 0x15, 0x79, - 0xab, 0x6a, 0x50, 0xfc, 0x14, 0x77, 0x89, 0xeb, 0x20, 0xce, 0xe5, 0x94, 0xd1, 0xf2, 0x25, 0xf1, - 0xdc, 0xfe, 0x8e, 0xe5, 0xfd, 0xda, 0x82, 0x7e, 0x4d, 0x81, 0x58, 0x9d, 0x45, 0x59, 0x4c, 0x94, - 0x04, 0x49, 0xb8, 0x2e, 0xac, 0x84, 0x24, 0x1d, 0xa9, 0x12, 0xc6, 0xdf, 0xea, 0xa0, 0x74, 0xca, - 0xdb, 0x88, 0x07, 0xdd, 0xe8, 0xe4, 0x4c, 0x08, 0x3a, 0x63, 0x39, 0x0d, 0xcb, 0x77, 0x04, 0x0d, - 0x13, 0x25, 0x14, 0x9d, 0x9c, 0xed, 0x04, 0xe1, 0x84, 0xc8, 0xdb, 0x7e, 0x03, 0x6d, 0x32, 0x41, - 0x6f, 0x0f, 0x5a, 0xe7, 0x51, 0x92, 0xee, 0xb2, 0xe9, 0x54, 0x24, 0x22, 0x24, 0x99, 0xb8, 0x0a, - 0x59, 0x98, 0x6f, 0x45, 0x89, 0x52, 0x09, 0xc9, 0x38, 0xc8, 0xe3, 0x4c, 0x2c, 0x2d, 0x36, 0xae, - 0x06, 0x79, 0x7f, 0xb3, 0x61, 0x1d, 0xe7, 0xce, 0x5d, 0x4c, 0x6b, 0x28, 0x40, 0xf7, 0x19, 0x34, - 0x70, 0x9b, 0xa9, 0x59, 0xf7, 0xf6, 0x59, 0x55, 0x2e, 0x75, 0x7f, 0x00, 0x4d, 0x86, 0x2d, 0x51, - 0x0d, 0xb8, 0x1f, 0xde, 0xc4, 0x64, 0x3e, 0x19, 0xf8, 0x8a, 0xcb, 0x3d, 0x00, 0x90, 0xaf, 0x19, - 0xe5, 0x21, 0xb7, 0xbc, 0x0c, 0x8d, 0x53, 0x04, 0xaf, 0x3c, 0x9e, 0xb4, 0x77, 0x03, 0x13, 0x74, - 0x8f, 0x61, 0x0d, 0xcd, 0x3e, 0x29, 0x2e, 0x2d, 0x18, 0xe3, 0xe5, 0x35, 0xd6, 0xb8, 0xbd, 0xdf, - 0x59, 0x2a, 0x8c, 0xe2, 0xeb, 0x19, 0xc1, 0xd8, 0x6a, 0x21, 0xb1, 0xee, 0x14, 0x92, 0xc7, 0xd0, - 0x9a, 0xe6, 0xda, 0x1d, 0xca, 0xf1, 0x4b, 0xba, 0x4a, 0x91, 0xb3, 0x74, 0x8a, 0xbc, 0xdf, 0x5b, - 0x30, 0xf8, 0x88, 0x45, 0x14, 0x3f, 0x6c, 0x27, 0x49, 0xac, 0x1e, 0xb7, 0xee, 0x9c, 0xf3, 0x1f, - 0x42, 0x3b, 0x90, 0x62, 0x68, 0xa6, 0xd2, 0xbe, 0xc4, 0xbd, 0xa8, 0xe2, 0xd1, 0x46, 0x5c, 0x47, - 0x1f, 0x71, 0xbd, 0x3f, 0x5a, 0xb0, 0x26, 0x83, 0xf2, 0x93, 0x3c, 0xca, 0xee, 0x6c, 0xdf, 0x0e, - 0xb4, 0x66, 0x79, 0x94, 0xdd, 0xa1, 0x2a, 0x4b, 0xbe, 0xf9, 0x7a, 0x72, 0x16, 0xd4, 0x93, 0xf7, - 0x27, 0x0b, 0x9e, 0xd4, 0xc3, 0xba, 0x3d, 0x1a, 0x91, 0xe4, 0x5d, 0x6e, 0x29, 0x63, 0xc4, 0x5f, - 0xa9, 0x8d, 0xf8, 0x0b, 0x4d, 0xf6, 0xc9, 0x27, 0x64, 0xf4, 0xbf, 0x6b, 0xf2, 0x2f, 0x6d, 0xf8, - 0xd2, 0x61, 0xb9, 0xf1, 0xce, 0x79, 0x40, 0xd3, 0x31, 0xe1, 0xfc, 0x1d, 0xda, 0x7b, 0x04, 0x3d, - 0x4a, 0x5e, 0x57, 0x36, 0xa9, 0xed, 0xb8, 0xac, 0x18, 0x93, 0x79, 0xb9, 0xde, 0xe5, 0xfd, 0xc7, - 0x82, 0x75, 0x29, 0xe7, 0xc7, 0xd1, 0xe8, 0xea, 0x1d, 0x3a, 0x7f, 0x0c, 0x6b, 0x57, 0x68, 0x81, - 0xa0, 0xee, 0xd0, 0xb6, 0x6b, 0xdc, 0x4b, 0xba, 0xff, 0xa9, 0x05, 0x0f, 0xa4, 0xa0, 0x17, 0xf4, - 0x3a, 0x7a, 0x97, 0xc5, 0x7a, 0x0a, 0xfd, 0x48, 0x9a, 0x70, 0xc7, 0x00, 0xd4, 0xd9, 0x97, 0x8c, - 0xc0, 0x9f, 0x2d, 0xe8, 0x4b, 0x49, 0xfb, 0x34, 0x23, 0xfc, 0xce, 0xfe, 0xff, 0x08, 0x3a, 0x84, - 0x66, 0x3c, 0xa0, 0x77, 0xe9, 0x90, 0x3a, 0xeb, 0x92, 0x4d, 0xf2, 0x0a, 0x1e, 0xc8, 0x17, 0x20, - 0xad, 0xe3, 0x88, 0x59, 0x35, 0x08, 0xe5, 0xf8, 0x29, 0x6f, 0x44, 0x05, 0x69, 0xbe, 0xed, 0xa9, - 0x3f, 0x6d, 0xaa, 0xb7, 0xbd, 0xa7, 0x00, 0x41, 0x18, 0x7e, 0xcc, 0x78, 0x18, 0xd1, 0xe2, 0xf8, - 0xd0, 0x10, 0xef, 0x23, 0xe8, 0x8a, 0x69, 0xf9, 0x5c, 0x7b, 0xcb, 0xb9, 0xf5, 0xb5, 0x49, 0x7f, - 0x07, 0xb2, 0xcd, 0x77, 0x20, 0xef, 0x67, 0xf0, 0x85, 0x39, 0xc3, 0x31, 0xea, 0xbb, 0xf2, 0x89, - 0xaa, 0x50, 0xa2, 0x82, 0xbf, 0xe8, 0xfe, 0xa8, 0xdb, 0xe2, 0x1b, 0x4c, 0xde, 0x2f, 0x2c, 0x78, - 0x7f, 0x4e, 0xfc, 0x76, 0x92, 0x70, 0x76, 0xad, 0x8a, 0xfb, 0x3e, 0xd4, 0x98, 0xad, 0xd5, 0xae, - 0xb7, 0xd6, 0x85, 0x46, 0x18, 0xc7, 0xc1, 0xe7, 0x60, 0xc4, 0x1f, 0x2c, 0xe8, 0x2b, 0x23, 0xc2, - 0x50, 0xa9, 0xfd, 0x36, 0x34, 0xe5, 0xf3, 0xb6, 0x52, 0xf8, 0xfe, 0x42, 0x85, 0xc5, 0xb3, 0xbc, - 0xaf, 0x16, 0xcf, 0x57, 0xa4, 0xbd, 0x68, 0x0c, 0xfc, 0x6e, 0xd9, 0x01, 0x96, 0x7e, 0x80, 0x56, - 0x0c, 0xde, 0x4f, 0x8b, 0x62, 0xde, 0x23, 0x31, 0xb9, 0xcf, 0x18, 0x79, 0x2f, 0x61, 0x0d, 0xdf, - 0xda, 0xab, 0x18, 0xdc, 0x8b, 0xd8, 0x8f, 0x61, 0x1d, 0xc5, 0xde, 0xbb, 0xbd, 0xe5, 0xee, 0x10, - 0xf1, 0xd9, 0xbd, 0x0c, 0xe8, 0xe4, 0x3e, 0xa5, 0x7f, 0x03, 0x1e, 0x16, 0xb1, 0x7f, 0x99, 0x84, - 0xe5, 0x15, 0xe5, 0x86, 0x47, 0xae, 0x8b, 0x26, 0xfe, 0x57, 0xfc, 0xad, 0xff, 0x06, 0x00, 0x00, - 0xff, 0xff, 0xaf, 0x96, 0xca, 0x38, 0x3e, 0x1e, 0x00, 0x00, +var fileDescriptor_ws_dd0597f97f3a9074 = []byte{ + // 1901 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x4f, 0x6f, 0x23, 0x4b, + 0x11, 0xd7, 0xd8, 0xb1, 0x63, 0x97, 0xe3, 0x38, 0x3b, 0xfb, 0x58, 0xcc, 0xb2, 0x6f, 0x09, 0xa3, + 0xa7, 0xc7, 0x0a, 0x89, 0x20, 0x2d, 0x42, 0x82, 0x45, 0x80, 0xb2, 0xc9, 0x26, 0xec, 0x23, 0x4e, + 0xc2, 0x38, 0xab, 0xc7, 0x01, 0x69, 0x35, 0xf1, 0xb4, 0x9d, 0x79, 0x19, 0x77, 0x8f, 0xbb, 0x67, + 0xb2, 0xbb, 0x12, 0x27, 0xf8, 0x0c, 0x70, 0xe4, 0xc0, 0x05, 0x71, 0x41, 0x5c, 0x10, 0x17, 0x8e, + 0x7c, 0x01, 0xce, 0x7c, 0x05, 0xae, 0x1c, 0x90, 0x90, 0x40, 0x5d, 0xdd, 0x33, 0xd3, 0x3d, 0x76, + 0xf2, 0x2c, 0x2b, 0xda, 0xbc, 0x9b, 0xab, 0xa6, 0xab, 0xba, 0xea, 0x57, 0x7f, 0xba, 0xba, 0x0d, + 0x3d, 0x11, 0x5e, 0xbe, 0x7e, 0x23, 0xbe, 0xfd, 0x46, 0xec, 0x24, 0x9c, 0xa5, 0xcc, 0xbd, 0x27, + 0x08, 0xbf, 0x22, 0xfc, 0x75, 0x90, 0x44, 0xaf, 0x93, 0x80, 0x07, 0x53, 0xe1, 0xfd, 0xbb, 0x06, + 0xed, 0x43, 0xce, 0xb2, 0xe4, 0x25, 0x1d, 0x33, 0xb7, 0x0f, 0xeb, 0x13, 0x24, 0xf6, 0xfb, 0xce, + 0xb6, 0xf3, 0xa4, 0xed, 0xe7, 0xa4, 0xfb, 0x08, 0xda, 0xf8, 0xf3, 0x38, 0x98, 0x92, 0x7e, 0x0d, + 0xbf, 0x95, 0x0c, 0xd7, 0x83, 0x0d, 0xca, 0xd2, 0x68, 0x1c, 0x8d, 0x82, 0x34, 0x62, 0xb4, 0x5f, + 0xc7, 0x05, 0x16, 0x4f, 0xae, 0x89, 0x68, 0xca, 0x59, 0x98, 0x8d, 0x70, 0xcd, 0x9a, 0x5a, 0x63, + 0xf2, 0xe4, 0xfe, 0xe3, 0x60, 0x44, 0x5e, 0xf9, 0x47, 0xfd, 0x86, 0xda, 0x5f, 0x93, 0xee, 0x36, + 0x74, 0xd8, 0x1b, 0x4a, 0xf8, 0x2b, 0x41, 0xf8, 0xcb, 0xfd, 0x7e, 0x13, 0xbf, 0x9a, 0x2c, 0xf7, + 0x31, 0xc0, 0x88, 0x93, 0x20, 0x25, 0x67, 0xd1, 0x94, 0xf4, 0xd7, 0xb7, 0x9d, 0x27, 0x5d, 0xdf, + 0xe0, 0x48, 0x0d, 0x53, 0x32, 0x3d, 0x27, 0x7c, 0x8f, 0x65, 0x34, 0xed, 0xb7, 0x70, 0x81, 0xc9, + 0x72, 0x37, 0xa1, 0x46, 0xde, 0xf6, 0xdb, 0xa8, 0xba, 0x46, 0xde, 0xba, 0x0f, 0xa0, 0x29, 0xd2, + 0x20, 0xcd, 0x44, 0x1f, 0xb6, 0x9d, 0x27, 0x0d, 0x5f, 0x53, 0xee, 0x47, 0xd0, 0x45, 0xbd, 0x2c, + 0xb7, 0xa6, 0x83, 0x22, 0x36, 0xb3, 0x40, 0xec, 0xec, 0x5d, 0x42, 0xfa, 0x1b, 0xa8, 0xa0, 0x64, + 0x78, 0x7f, 0xad, 0xc1, 0x7d, 0xc4, 0x7d, 0x80, 0x06, 0x1c, 0x64, 0x71, 0xfc, 0x39, 0x11, 0x78, + 0x00, 0xcd, 0x4c, 0x6d, 0xa7, 0xe0, 0xd7, 0x94, 0xdc, 0x87, 0xb3, 0x98, 0x1c, 0x91, 0x2b, 0x12, + 0x23, 0xf0, 0x0d, 0xbf, 0x64, 0xb8, 0x0f, 0xa1, 0xf5, 0x19, 0x8b, 0x28, 0x62, 0x22, 0x11, 0xaf, + 0xfb, 0x05, 0x2d, 0xbf, 0xd1, 0x68, 0x74, 0x49, 0x65, 0x48, 0x15, 0xdc, 0x05, 0x6d, 0x46, 0xa2, + 0x69, 0x47, 0xe2, 0x63, 0xd8, 0x0c, 0x92, 0x64, 0x10, 0xd0, 0x09, 0xe1, 0x6a, 0xd3, 0x75, 0xdc, + 0xb4, 0xc2, 0x95, 0xf1, 0x90, 0x3b, 0x0d, 0x59, 0xc6, 0x47, 0x04, 0xe1, 0x6e, 0xf8, 0x06, 0x47, + 0xea, 0x61, 0x09, 0xe1, 0x06, 0x8c, 0x0a, 0xf9, 0x0a, 0x57, 0x47, 0x05, 0xf2, 0xa8, 0x78, 0xbf, + 0x73, 0x60, 0xf3, 0x34, 0x3b, 0x8f, 0xa3, 0x11, 0x2e, 0x90, 0xa0, 0x95, 0xd0, 0x38, 0x16, 0x34, + 0xa6, 0x83, 0xb5, 0xeb, 0x1d, 0xac, 0xdb, 0x0e, 0x3e, 0x80, 0xe6, 0x84, 0xd0, 0x90, 0x70, 0x04, + 0xac, 0xe1, 0x6b, 0x6a, 0x81, 0xe3, 0x8d, 0x45, 0x8e, 0x7b, 0xbf, 0xad, 0x41, 0xeb, 0x3d, 0x9b, + 0xb6, 0x0d, 0x9d, 0xe4, 0x82, 0x51, 0x72, 0x9c, 0xc9, 0x64, 0xd2, 0xc1, 0x34, 0x59, 0xee, 0x07, + 0xd0, 0x38, 0x8f, 0x78, 0x7a, 0x81, 0xd1, 0xec, 0xfa, 0x8a, 0x90, 0x5c, 0x32, 0x0d, 0x22, 0x15, + 0xc2, 0xb6, 0xaf, 0x08, 0x8d, 0x78, 0xab, 0xa8, 0x03, 0xbb, 0xb2, 0xda, 0x73, 0x95, 0x35, 0x0f, + 0x0c, 0x2c, 0x04, 0xe6, 0x3f, 0x0e, 0xc0, 0x01, 0x8f, 0x08, 0x0d, 0x11, 0x9a, 0x4a, 0x49, 0x3b, + 0xf3, 0x25, 0xfd, 0x00, 0x9a, 0x9c, 0x4c, 0x03, 0x7e, 0x99, 0xa7, 0xbc, 0xa2, 0x2a, 0x06, 0xd5, + 0xe7, 0x0c, 0xfa, 0x01, 0xc0, 0x18, 0xf7, 0x91, 0x7a, 0x10, 0xaa, 0xce, 0xd3, 0xaf, 0xee, 0xcc, + 0x35, 0xbf, 0x9d, 0x3c, 0x4a, 0xbe, 0xb1, 0x5c, 0xd6, 0x53, 0x10, 0x86, 0x3a, 0x6d, 0x55, 0x84, + 0x4b, 0xc6, 0x82, 0xac, 0x6d, 0xde, 0x90, 0xb5, 0xeb, 0x45, 0xd6, 0xfe, 0xcb, 0x81, 0xf6, 0xf3, + 0x38, 0x18, 0x5d, 0x2e, 0xe9, 0xba, 0xed, 0x62, 0x6d, 0xce, 0xc5, 0x43, 0xe8, 0x9e, 0x4b, 0x75, + 0xb9, 0x0b, 0x88, 0x42, 0xe7, 0xe9, 0xd7, 0x17, 0x78, 0x69, 0x17, 0x8b, 0x6f, 0xcb, 0xd9, 0xee, + 0xae, 0x7d, 0xbe, 0xbb, 0x8d, 0x1b, 0xdc, 0x6d, 0x16, 0xee, 0xfe, 0xa3, 0x06, 0x1b, 0xd8, 0xde, + 0x7c, 0x32, 0xcb, 0x88, 0x48, 0xdd, 0x1f, 0x42, 0x2b, 0xcb, 0x4d, 0x75, 0x96, 0x35, 0xb5, 0x10, + 0x71, 0x9f, 0xe9, 0x66, 0x8a, 0xf2, 0x35, 0x94, 0x7f, 0xb4, 0x40, 0xbe, 0x38, 0xc9, 0xfc, 0x72, + 0xb9, 0x3c, 0x78, 0x2e, 0x02, 0x1a, 0xc6, 0xc4, 0x27, 0x22, 0x8b, 0x53, 0xdd, 0x23, 0x2d, 0x9e, + 0xca, 0xb4, 0xd9, 0x40, 0x4c, 0xf4, 0xb1, 0xa4, 0x29, 0x89, 0x8e, 0x5a, 0x27, 0x3f, 0x29, 0xd7, + 0x4b, 0x86, 0x2c, 0x54, 0x4e, 0x66, 0x18, 0x21, 0x55, 0x56, 0x39, 0x59, 0xee, 0xa9, 0x51, 0x53, + 0x89, 0x60, 0xf1, 0x64, 0x88, 0x15, 0x8d, 0x0a, 0xd4, 0x79, 0x64, 0x70, 0xaa, 0xc7, 0x91, 0xf7, + 0xcf, 0x3a, 0x74, 0x55, 0xf9, 0xe4, 0xa0, 0x3e, 0x96, 0x79, 0xce, 0xa6, 0x56, 0x16, 0x19, 0x1c, + 0x69, 0x85, 0xa4, 0x8e, 0xed, 0x46, 0x63, 0xf1, 0x64, 0x2a, 0x4a, 0xfa, 0xc0, 0x6a, 0x38, 0x26, + 0x2b, 0xdf, 0xe5, 0xd0, 0x6c, 0x3c, 0x06, 0x47, 0xb6, 0xb2, 0x94, 0x59, 0xd9, 0x51, 0xd0, 0x52, + 0x36, 0x65, 0xc5, 0xfe, 0x2a, 0x3f, 0x0c, 0x8e, 0xc4, 0x37, 0x65, 0xf9, 0xde, 0x0a, 0xa4, 0x92, + 0xa1, 0x34, 0xeb, 0x7d, 0xd5, 0x01, 0x52, 0xd0, 0x73, 0x51, 0x6d, 0xdf, 0x18, 0x55, 0xb0, 0xa2, + 0x6a, 0x17, 0x57, 0x67, 0xae, 0xb8, 0x3e, 0x82, 0xae, 0xd2, 0x93, 0x27, 0xfd, 0x86, 0x3a, 0xe0, + 0x2d, 0xa6, 0x9d, 0x1b, 0xdd, 0x6a, 0x6e, 0xd8, 0xd1, 0xdd, 0xbc, 0x26, 0xba, 0xbd, 0x22, 0xba, + 0xbf, 0x84, 0xfe, 0x69, 0x16, 0xc7, 0x03, 0x22, 0x44, 0x30, 0x21, 0xcf, 0xdf, 0x0d, 0xc9, 0xec, + 0x28, 0x12, 0xa9, 0x4f, 0x44, 0x22, 0xf3, 0x8c, 0x70, 0xbe, 0xc7, 0x42, 0x82, 0x41, 0x6e, 0xf8, + 0x39, 0x29, 0x3d, 0x24, 0x9c, 0x4b, 0x03, 0x74, 0x87, 0x54, 0x94, 0xbb, 0x03, 0x6b, 0x71, 0x24, + 0x64, 0xae, 0xd7, 0x9f, 0x74, 0x9e, 0x3e, 0x5c, 0x50, 0x2a, 0x03, 0x31, 0xd9, 0x0f, 0xd2, 0xc0, + 0xc7, 0x75, 0xde, 0x14, 0xbe, 0xbc, 0x78, 0xf7, 0xd9, 0xb5, 0x27, 0x98, 0xec, 0x61, 0xd8, 0x04, + 0x22, 0x46, 0x8b, 0xa1, 0xc4, 0x64, 0x49, 0xb3, 0x85, 0xd2, 0x83, 0x76, 0x74, 0xfd, 0x9c, 0xf4, + 0x3e, 0x00, 0xf7, 0x90, 0xa4, 0x83, 0xe0, 0xed, 0x2e, 0x0d, 0x07, 0x11, 0x1d, 0x92, 0x99, 0x4f, + 0x66, 0xde, 0x0b, 0xb8, 0x3f, 0xc7, 0x15, 0x89, 0x34, 0x60, 0x1a, 0xbc, 0x1d, 0x92, 0x19, 0x1a, + 0xd0, 0xf5, 0x35, 0x85, 0x7c, 0x5c, 0xa5, 0xdb, 0xa3, 0xa6, 0xbc, 0x19, 0xf4, 0x64, 0x84, 0x86, + 0x84, 0x86, 0x03, 0x31, 0x41, 0x15, 0xdb, 0xd0, 0x51, 0x08, 0x0c, 0xc4, 0xa4, 0xec, 0xb7, 0x06, + 0x4b, 0xae, 0x18, 0xc5, 0x11, 0xa1, 0xa9, 0x5a, 0xa1, 0xbd, 0x31, 0x58, 0x32, 0x19, 0x05, 0xa1, + 0x61, 0x71, 0xe4, 0xd4, 0xfd, 0x82, 0xf6, 0xfe, 0xd6, 0x80, 0x75, 0x0d, 0x28, 0x4e, 0x8d, 0xf2, + 0x88, 0x2b, 0xf0, 0x52, 0x94, 0x4a, 0xc6, 0xd1, 0x55, 0x39, 0xbf, 0x29, 0xca, 0x9c, 0xf8, 0xea, + 0xf6, 0xc4, 0x57, 0xb1, 0x69, 0x6d, 0xde, 0xa6, 0x8a, 0x5f, 0x8d, 0x79, 0xbf, 0xbe, 0x09, 0x5b, + 0x02, 0x0b, 0xe6, 0x34, 0x0e, 0xd2, 0x31, 0xe3, 0x53, 0x7d, 0x62, 0x35, 0xfc, 0x39, 0xbe, 0x6c, + 0xf6, 0x8a, 0x57, 0x14, 0xac, 0xaa, 0xc8, 0x0a, 0x57, 0x96, 0x87, 0xe2, 0xe4, 0x85, 0xab, 0x46, + 0x05, 0x9b, 0xa9, 0x6c, 0x13, 0x22, 0x62, 0x14, 0x27, 0x60, 0x55, 0x9f, 0x26, 0x4b, 0x7a, 0x3e, + 0x15, 0x93, 0x03, 0xce, 0xa6, 0x7a, 0x60, 0xc8, 0x49, 0xf4, 0x9c, 0xd1, 0x94, 0xd0, 0x14, 0x65, + 0x3b, 0x4a, 0xd6, 0x60, 0x49, 0x59, 0x4d, 0x62, 0x71, 0x6e, 0xf8, 0x39, 0xe9, 0x6e, 0x41, 0x5d, + 0x90, 0x99, 0xae, 0x38, 0xf9, 0xd3, 0x8a, 0x5c, 0xcf, 0x8e, 0x5c, 0xa5, 0x15, 0x6c, 0xe1, 0x57, + 0xb3, 0x15, 0x94, 0x77, 0x80, 0x7b, 0xd6, 0x1d, 0x60, 0x17, 0xd6, 0x59, 0x22, 0xf3, 0x5c, 0xf4, + 0x5d, 0xac, 0xb1, 0x6f, 0x5c, 0x5f, 0x63, 0x3b, 0x27, 0x6a, 0xe5, 0x0b, 0x9a, 0xf2, 0x77, 0x7e, + 0x2e, 0xe7, 0x1e, 0x41, 0x8f, 0x8d, 0xc7, 0x71, 0x44, 0xc9, 0x69, 0x26, 0x2e, 0xf0, 0x64, 0xbb, + 0x8f, 0x27, 0x9b, 0xb7, 0x40, 0xd5, 0x89, 0xbd, 0xd2, 0xaf, 0x8a, 0x3e, 0x7c, 0x06, 0x1b, 0xe6, + 0x36, 0x12, 0x86, 0x4b, 0xf2, 0x4e, 0xe7, 0xa0, 0xfc, 0x29, 0x87, 0xbd, 0xab, 0x20, 0xce, 0xd4, + 0x31, 0xd0, 0xf2, 0x15, 0xf1, 0xac, 0xf6, 0x3d, 0xc7, 0xfb, 0x8d, 0x03, 0xbd, 0xca, 0x06, 0x72, + 0x75, 0x1a, 0xa5, 0x31, 0xd1, 0x1a, 0x14, 0xe1, 0xba, 0xb0, 0x16, 0x12, 0x31, 0xd2, 0x29, 0x8c, + 0xbf, 0x75, 0x27, 0xab, 0x17, 0xe3, 0xa2, 0xbc, 0xe8, 0x9d, 0x0c, 0xa5, 0xa2, 0x21, 0xcb, 0x68, + 0x58, 0x5c, 0xf4, 0x0c, 0x9e, 0x4c, 0xa1, 0xe8, 0x64, 0xf8, 0x3c, 0x08, 0x27, 0x44, 0x5d, 0xc7, + 0x1a, 0x68, 0x93, 0xcd, 0xf4, 0xf6, 0xa1, 0x75, 0x16, 0x25, 0x62, 0x8f, 0x4d, 0xa7, 0x32, 0x10, + 0x21, 0x49, 0xe5, 0xac, 0xea, 0x60, 0xbc, 0x35, 0x25, 0x53, 0x25, 0x24, 0xe3, 0x20, 0x8b, 0x53, + 0xb9, 0x34, 0x2f, 0x5c, 0x83, 0xe5, 0xfd, 0xbd, 0x06, 0x5b, 0x38, 0x18, 0xec, 0x61, 0x58, 0x43, + 0xc9, 0x74, 0x9f, 0x42, 0x03, 0xcb, 0x4c, 0x0f, 0x23, 0x37, 0x0f, 0x13, 0x6a, 0xa9, 0xfb, 0x23, + 0x68, 0xb2, 0x04, 0x47, 0x4a, 0x35, 0x81, 0x7c, 0x7c, 0x9d, 0x90, 0x7d, 0xa7, 0xf3, 0xb5, 0x94, + 0x7b, 0x00, 0xa0, 0xae, 0x9b, 0x47, 0x65, 0x6b, 0x5e, 0x56, 0x87, 0x21, 0x29, 0xc1, 0x2b, 0xda, + 0xac, 0x71, 0xb1, 0xb3, 0x99, 0xee, 0x31, 0x6c, 0xa2, 0xd9, 0x27, 0xf9, 0x54, 0x89, 0x18, 0x2f, + 0xbf, 0x63, 0x45, 0xda, 0xfb, 0xbd, 0xa3, 0x61, 0x94, 0x5f, 0x87, 0x04, 0xb1, 0x35, 0x20, 0x71, + 0x56, 0x82, 0xe4, 0x21, 0xb4, 0xa6, 0x99, 0x31, 0xe4, 0xd6, 0xfd, 0x82, 0x2e, 0x43, 0x54, 0x5f, + 0x3a, 0x44, 0xde, 0x1f, 0x1c, 0xe8, 0x7f, 0xc2, 0x22, 0x8a, 0x1f, 0x76, 0x93, 0x24, 0xd6, 0xaf, + 0x0f, 0x2b, 0xc7, 0xfc, 0xc7, 0xd0, 0x0e, 0x94, 0x1a, 0x9a, 0xea, 0xb0, 0x2f, 0x31, 0xb8, 0x96, + 0x32, 0xc6, 0x0c, 0x52, 0x37, 0x67, 0x10, 0xef, 0x4f, 0x0e, 0x6c, 0x2a, 0x50, 0x7e, 0x96, 0x45, + 0xe9, 0xca, 0xf6, 0x3d, 0x87, 0xd6, 0x2c, 0x8b, 0xd2, 0x15, 0xb2, 0xb2, 0x90, 0x9b, 0xcf, 0xa7, + 0xfa, 0x82, 0x7c, 0xf2, 0xfe, 0xec, 0xc0, 0xa3, 0x2a, 0xac, 0xbb, 0xa3, 0x11, 0x49, 0xee, 0xb2, + 0xa4, 0xac, 0x19, 0x6c, 0xad, 0x32, 0x83, 0x2d, 0x34, 0xd9, 0x27, 0x9f, 0x91, 0xd1, 0x17, 0xd7, + 0xe4, 0x5f, 0xd7, 0xe0, 0x2b, 0x87, 0x45, 0xe1, 0x9d, 0xf1, 0x80, 0x8a, 0x31, 0xe1, 0xfc, 0x0e, + 0xed, 0x3d, 0x82, 0x2e, 0x25, 0x6f, 0x4a, 0x9b, 0x74, 0x39, 0x2e, 0xab, 0xc6, 0x16, 0x5e, 0xae, + 0x77, 0x79, 0xff, 0x75, 0x60, 0x4b, 0xe9, 0xf9, 0x69, 0x34, 0xba, 0xbc, 0x43, 0xe7, 0x8f, 0x61, + 0xf3, 0x12, 0x2d, 0x90, 0xd4, 0x0a, 0x6d, 0xbb, 0x22, 0xbd, 0xa4, 0xfb, 0xff, 0x73, 0xe0, 0x9e, + 0x52, 0xf4, 0x92, 0x5e, 0x45, 0x77, 0x99, 0xac, 0xa7, 0xd0, 0x8b, 0x94, 0x09, 0x2b, 0x02, 0x50, + 0x15, 0x5f, 0x12, 0x81, 0xbf, 0x38, 0xd0, 0x53, 0x9a, 0x5e, 0xd0, 0x94, 0xf0, 0x95, 0xfd, 0xff, + 0x09, 0x74, 0x08, 0x4d, 0x79, 0x40, 0x57, 0xe9, 0x90, 0xa6, 0xe8, 0x92, 0x4d, 0xf2, 0x12, 0xee, + 0xa9, 0x2b, 0xba, 0xd1, 0x71, 0xe4, 0xac, 0x1a, 0x84, 0x6a, 0xfc, 0x74, 0x50, 0x28, 0x27, 0xed, + 0xc7, 0x17, 0xfd, 0xaa, 0x5e, 0x3e, 0xbe, 0x3c, 0x06, 0x08, 0xc2, 0xf0, 0x53, 0xc6, 0xc3, 0x88, + 0xe6, 0xc7, 0x87, 0xc1, 0xf1, 0x3e, 0x81, 0x0d, 0x39, 0x2d, 0x9f, 0x19, 0x97, 0xed, 0x1b, 0x9f, + 0x03, 0xcc, 0x8b, 0x7a, 0xcd, 0xbe, 0xa8, 0x7b, 0xbf, 0x80, 0x2f, 0xcd, 0x19, 0x8e, 0xa8, 0xef, + 0xa9, 0x37, 0x84, 0x7c, 0x13, 0x0d, 0xfe, 0xd7, 0x16, 0x40, 0x68, 0xda, 0xe2, 0x5b, 0x42, 0xde, + 0xaf, 0x1c, 0xf8, 0x70, 0x4e, 0xfd, 0x6e, 0x92, 0x70, 0x76, 0xa5, 0x93, 0xfb, 0x36, 0xb6, 0xb1, + 0x5b, 0x6b, 0xad, 0xda, 0x5a, 0x17, 0x1a, 0x61, 0x1d, 0x07, 0xef, 0xc1, 0x88, 0x3f, 0x3a, 0xd0, + 0xd3, 0x46, 0x84, 0xa1, 0xde, 0xf6, 0xbb, 0xd0, 0x54, 0xef, 0x8f, 0x7a, 0xc3, 0x0f, 0x17, 0x6e, + 0x98, 0xbf, 0x9b, 0xfa, 0x7a, 0xf1, 0x7c, 0x46, 0xd6, 0x16, 0x8d, 0x81, 0xdf, 0x2f, 0x3a, 0xc0, + 0xd2, 0x2f, 0x84, 0x5a, 0xc0, 0xfb, 0x79, 0x9e, 0xcc, 0xfb, 0x24, 0x26, 0xb7, 0x89, 0x91, 0xf7, + 0x0a, 0x36, 0xf1, 0x31, 0xb4, 0xc4, 0xe0, 0x56, 0xd4, 0x7e, 0x0a, 0x5b, 0xa8, 0xf6, 0xd6, 0xed, + 0x2d, 0xaa, 0x43, 0xe2, 0xb3, 0x77, 0x11, 0xd0, 0xc9, 0x6d, 0x6a, 0xff, 0x16, 0xdc, 0xcf, 0xb1, + 0x7f, 0x95, 0x84, 0xc5, 0x15, 0xe5, 0x9a, 0x87, 0x97, 0xf3, 0x26, 0xfe, 0x99, 0xf7, 0x9d, 0xff, + 0x07, 0x00, 0x00, 0xff, 0xff, 0x5a, 0xb7, 0x8c, 0x6a, 0xdf, 0x1b, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index cc4c70054..a3f018db3 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -115,61 +115,14 @@ message PullMessageBySeqListResp { message PullMessageBySeqListReq{ string userID = 1; string operationID = 2; - repeated int64 seqList = 3; -} -message PullMessageReq { - string userID = 1; - int64 seqBegin = 2; - int64 seqEnd = 3; - string operationID = 4; -} -message PullMessageResp { - int32 errCode = 1; - string errMsg = 2; - int64 maxSeq = 3; - int64 minSeq = 4; - repeated GatherFormat singleUserMsg = 5; - repeated GatherFormat groupUserMsg = 6; + repeated uint32 seqList = 3; } message GetMaxAndMinSeqReq { } message GetMaxAndMinSeqResp { - int64 maxSeq = 1; - int64 minSeq = 2; + uint32 maxSeq = 1; + uint32 minSeq = 2; } -message GatherFormat{ - // @inject_tag: json:"id" - string id = 1; - // @inject_tag: json:"list" - repeated MsgData list = 2;//detail msg -} -//message MsgFormat{ -// // @inject_tag: json:"sendID" -// string SendID = 1; -// // @inject_tag: json:"recvID" -// string RecvID = 2; -// // @inject_tag: json:"msgFrom" -// int32 MsgFrom = 3; -// // @inject_tag: json:"contentType" -// int32 ContentType = 4; -// // @inject_tag: json:"serverMsgID" -// string ServerMsgID = 5; -// // @inject_tag: json:"content" -// string Content = 6; -// // @inject_tag: json:"seq" -// int64 Seq = 7; -// // @inject_tag: json:"sendTime" -// int64 SendTime = 8; -// // @inject_tag: json:"senderPlatformID" -// int32 SenderPlatformID = 9; -// // @inject_tag: json:"senderNickName" -// string SenderNickName = 10; -// // @inject_tag: json:"senderFaceUrl" -// string SenderFaceURL = 11; -// // @inject_tag: json:"clientMsgID" -// string ClientMsgID = 12; -//} - message UserSendMsgResp { string serverMsgID = 1; @@ -190,7 +143,7 @@ message MsgData { int32 msgFrom = 10; int32 contentType = 11; bytes content = 12; - int64 seq = 14; + uint32 seq = 14; int64 sendTime = 15; int64 createTime = 16; int32 status = 17; diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index f175255ab..440d3a993 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -37,3 +37,37 @@ func cleanUpFuncName(funcName string) string { } return funcName[end+1:] } +func Intersect(slice1, slice2 []uint32) []uint32 { + m := make(map[uint32]bool) + n := make([]uint32, 0) + for _, v := range slice1 { + m[v] = true + } + for _, v := range slice2 { + flag, _ := m[v] + if flag { + n = append(n, v) + } + } + return n +} +func Difference(slice1, slice2 []uint32) []uint32 { + m := make(map[uint32]bool) + n := make([]uint32, 0) + inter := Intersect(slice1, slice2) + for _, v := range inter { + m[v] = true + } + for _, v := range slice1 { + if !m[v] { + n = append(n, v) + } + } + + for _, v := range slice2 { + if !m[v] { + n = append(n, v) + } + } + return n +} From e7c7784fec6b80b3230de24689a3e280a7ff7b47 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 11:37:14 +0800 Subject: [PATCH 05/19] protocol modify --- pkg/proto/chat/chat.pb.go | 122 ++++++++++++++------------------------ 1 file changed, 44 insertions(+), 78 deletions(-) diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index 2a52e2c37..5d4fd0bec 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_1eadc66417ed93b5, []int{0} + return fileDescriptor_chat_68ff093a75fc0634, []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_1eadc66417ed93b5, []int{1} + return fileDescriptor_chat_68ff093a75fc0634, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -136,7 +136,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_1eadc66417ed93b5, []int{2} + return fileDescriptor_chat_68ff093a75fc0634, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -202,7 +202,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_1eadc66417ed93b5, []int{3} + return fileDescriptor_chat_68ff093a75fc0634, []int{3} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -239,8 +239,8 @@ func (m *GetMaxAndMinSeqReq) GetOperationID() string { type GetMaxAndMinSeqResp struct { ErrCode int32 `protobuf:"varint,1,opt,name=ErrCode" json:"ErrCode,omitempty"` ErrMsg string `protobuf:"bytes,2,opt,name=ErrMsg" json:"ErrMsg,omitempty"` - MaxSeq int64 `protobuf:"varint,3,opt,name=MaxSeq" json:"MaxSeq,omitempty"` - MinSeq int64 `protobuf:"varint,4,opt,name=MinSeq" json:"MinSeq,omitempty"` + MaxSeq uint32 `protobuf:"varint,3,opt,name=MaxSeq" json:"MaxSeq,omitempty"` + MinSeq uint32 `protobuf:"varint,4,opt,name=MinSeq" json:"MinSeq,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -250,7 +250,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_1eadc66417ed93b5, []int{4} + return fileDescriptor_chat_68ff093a75fc0634, []int{4} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -284,14 +284,14 @@ func (m *GetMaxAndMinSeqResp) GetErrMsg() string { return "" } -func (m *GetMaxAndMinSeqResp) GetMaxSeq() int64 { +func (m *GetMaxAndMinSeqResp) GetMaxSeq() uint32 { if m != nil { return m.MaxSeq } return 0 } -func (m *GetMaxAndMinSeqResp) GetMinSeq() int64 { +func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { if m != nil { return m.MinSeq } @@ -311,7 +311,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_1eadc66417ed93b5, []int{5} + return fileDescriptor_chat_68ff093a75fc0634, []int{5} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -367,7 +367,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_1eadc66417ed93b5, []int{6} + return fileDescriptor_chat_68ff093a75fc0634, []int{6} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -444,7 +444,6 @@ const _ = grpc.SupportPackageIsVersion4 type ChatClient interface { GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*GetMaxAndMinSeqResp, error) - PullMessage(ctx context.Context, in *sdk_ws.PullMessageReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageResp, 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) } @@ -466,15 +465,6 @@ func (c *chatClient) GetMaxAndMinSeq(ctx context.Context, in *GetMaxAndMinSeqReq return out, nil } -func (c *chatClient) PullMessage(ctx context.Context, in *sdk_ws.PullMessageReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageResp, error) { - out := new(sdk_ws.PullMessageResp) - err := grpc.Invoke(ctx, "/pbChat.Chat/PullMessage", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *chatClient) PullMessageBySeqList(ctx context.Context, in *sdk_ws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdk_ws.PullMessageBySeqListResp, error) { out := new(sdk_ws.PullMessageBySeqListResp) err := grpc.Invoke(ctx, "/pbChat.Chat/PullMessageBySeqList", in, out, c.cc, opts...) @@ -497,7 +487,6 @@ func (c *chatClient) SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.C type ChatServer interface { GetMaxAndMinSeq(context.Context, *GetMaxAndMinSeqReq) (*GetMaxAndMinSeqResp, error) - PullMessage(context.Context, *sdk_ws.PullMessageReq) (*sdk_ws.PullMessageResp, error) PullMessageBySeqList(context.Context, *sdk_ws.PullMessageBySeqListReq) (*sdk_ws.PullMessageBySeqListResp, error) SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error) } @@ -524,24 +513,6 @@ func _Chat_GetMaxAndMinSeq_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } -func _Chat_PullMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(sdk_ws.PullMessageReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ChatServer).PullMessage(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pbChat.Chat/PullMessage", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ChatServer).PullMessage(ctx, req.(*sdk_ws.PullMessageReq)) - } - return interceptor(ctx, in, info, handler) -} - func _Chat_PullMessageBySeqList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(sdk_ws.PullMessageBySeqListReq) if err := dec(in); err != nil { @@ -586,10 +557,6 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ MethodName: "GetMaxAndMinSeq", Handler: _Chat_GetMaxAndMinSeq_Handler, }, - { - MethodName: "PullMessage", - Handler: _Chat_PullMessage_Handler, - }, { MethodName: "PullMessageBySeqList", Handler: _Chat_PullMessageBySeqList_Handler, @@ -603,39 +570,38 @@ var _Chat_serviceDesc = grpc.ServiceDesc{ Metadata: "chat/chat.proto", } -func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_1eadc66417ed93b5) } +func init() { proto.RegisterFile("chat/chat.proto", fileDescriptor_chat_68ff093a75fc0634) } -var fileDescriptor_chat_1eadc66417ed93b5 = []byte{ - // 482 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0x4d, 0x6f, 0xd3, 0x40, - 0x10, 0x95, 0xd3, 0x26, 0xa1, 0x63, 0xa1, 0x48, 0xdb, 0x0a, 0x59, 0xe6, 0x92, 0xfa, 0x54, 0x81, - 0x64, 0x4b, 0x81, 0x1b, 0x27, 0xd2, 0x54, 0x28, 0x88, 0xa5, 0xc5, 0x09, 0x17, 0x2e, 0xd1, 0xb6, - 0x1e, 0x39, 0x56, 0x12, 0x7b, 0xb3, 0xe3, 0x92, 0x02, 0x3f, 0x86, 0x5f, 0xc4, 0x7f, 0x42, 0xde, - 0x75, 0xd2, 0x6d, 0x03, 0x24, 0x27, 0x2e, 0x96, 0xde, 0x9b, 0xe7, 0x37, 0xf3, 0xf6, 0x0b, 0x3a, - 0x37, 0x53, 0x51, 0x46, 0xd5, 0x27, 0x94, 0xaa, 0x28, 0x0b, 0xd6, 0x92, 0xd7, 0xe7, 0x53, 0x51, - 0xfa, 0xa7, 0x97, 0x12, 0xf3, 0xc9, 0x90, 0x47, 0x72, 0x96, 0x46, 0xba, 0x14, 0x51, 0x32, 0x9b, - 0xac, 0x28, 0x5a, 0x91, 0x91, 0x06, 0x3f, 0xc0, 0xe5, 0x94, 0x0e, 0x44, 0x29, 0xc6, 0x05, 0xff, - 0xc4, 0x4e, 0xa0, 0x59, 0x16, 0x33, 0xcc, 0x3d, 0xa7, 0xeb, 0x9c, 0x1d, 0xc5, 0x06, 0xb0, 0x2e, - 0xb8, 0x85, 0x44, 0x25, 0xca, 0xac, 0xc8, 0x87, 0x03, 0xaf, 0xa1, 0x6b, 0x36, 0xc5, 0x5e, 0x43, - 0x7b, 0x61, 0x6c, 0xbc, 0x83, 0xae, 0x73, 0xe6, 0xf6, 0xfc, 0x90, 0x50, 0x7d, 0x45, 0x35, 0x11, - 0x32, 0x9b, 0x48, 0xa1, 0xc4, 0x82, 0xc2, 0xba, 0x51, 0xbc, 0x96, 0x06, 0x68, 0x35, 0x1f, 0xf4, - 0x6d, 0x13, 0x67, 0x6f, 0x93, 0xdd, 0xc3, 0x05, 0x19, 0x74, 0xae, 0x6e, 0x69, 0x6a, 0xe7, 0xec, - 0x82, 0x7b, 0x69, 0xfd, 0x64, 0xd2, 0xda, 0x94, 0x3d, 0x4c, 0x63, 0xff, 0x44, 0x1f, 0x81, 0xbd, - 0xc3, 0x92, 0x8b, 0xbb, 0xb7, 0x79, 0xc2, 0xb3, 0x7c, 0x84, 0xcb, 0x18, 0x97, 0xec, 0x19, 0xb4, - 0x3e, 0x13, 0xaa, 0x4d, 0xa3, 0x1a, 0x3d, 0x9e, 0xa2, 0xb1, 0x35, 0x45, 0xb0, 0x82, 0xe3, 0x2d, - 0x3f, 0x92, 0xcc, 0x83, 0xf6, 0x85, 0x52, 0xe7, 0x45, 0x82, 0xda, 0xb1, 0x19, 0xaf, 0x61, 0xd5, - 0xea, 0x42, 0x29, 0x4e, 0x69, 0xed, 0x56, 0xa3, 0x8a, 0xe7, 0xe2, 0x6e, 0x84, 0x4b, 0xbd, 0x3f, - 0x07, 0x71, 0x8d, 0x34, 0xaf, 0x7d, 0xbd, 0xc3, 0x9a, 0xd7, 0x28, 0xf8, 0x0e, 0x30, 0xc2, 0x3c, - 0xe1, 0x94, 0x56, 0x01, 0xfe, 0xef, 0xb1, 0xf8, 0xe9, 0x80, 0xbb, 0x69, 0x6e, 0xd2, 0xe2, 0xc3, - 0xb4, 0x78, 0x9f, 0x16, 0x1f, 0xa4, 0x35, 0xa8, 0x9a, 0xcc, 0xf4, 0xe1, 0x94, 0x0e, 0x07, 0x3a, - 0xda, 0x51, 0x6c, 0x53, 0x95, 0xe2, 0x66, 0x9e, 0x61, 0x5e, 0x1a, 0x45, 0xd3, 0x28, 0x2c, 0x8a, - 0xf9, 0xf0, 0x84, 0x30, 0x4f, 0xc6, 0xd9, 0x02, 0xbd, 0x96, 0x5e, 0x9b, 0x0d, 0xee, 0xfd, 0x6a, - 0xc0, 0x61, 0x75, 0xc3, 0xd8, 0x7b, 0xe8, 0x3c, 0xda, 0x1f, 0xe6, 0x87, 0xe6, 0xf6, 0x85, 0xdb, - 0x07, 0xc1, 0x7f, 0xfe, 0xd7, 0x1a, 0x49, 0x36, 0x06, 0xf7, 0xea, 0x76, 0x3e, 0xe7, 0x48, 0x24, - 0x52, 0x64, 0xa7, 0x7f, 0x58, 0x2a, 0xab, 0x5e, 0xd9, 0x05, 0xbb, 0x24, 0x24, 0x59, 0x01, 0x27, - 0x16, 0xd5, 0xff, 0x36, 0xc2, 0xe5, 0x87, 0x8c, 0x4a, 0xf6, 0xe2, 0xdf, 0xff, 0x6e, 0x84, 0x55, - 0x9f, 0x97, 0x7b, 0x6b, 0x49, 0xb2, 0x1e, 0xb4, 0xeb, 0xcd, 0x63, 0x6c, 0x1d, 0xf7, 0xfe, 0x28, - 0xf9, 0xc7, 0x5b, 0x1c, 0xc9, 0x7e, 0xe7, 0xcb, 0xd3, 0x50, 0x3f, 0x60, 0x6f, 0x4c, 0xf1, 0xba, - 0xa5, 0x5f, 0xa7, 0x57, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xb4, 0x87, 0x05, 0xdb, 0x04, - 0x00, 0x00, +var fileDescriptor_chat_68ff093a75fc0634 = []byte{ + // 469 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0x4f, 0x6f, 0xd3, 0x4e, + 0x10, 0x95, 0xd3, 0x26, 0xf9, 0x75, 0xac, 0x2a, 0xd2, 0xb6, 0xfa, 0xc9, 0x32, 0x17, 0xe3, 0x53, + 0x04, 0x92, 0x2d, 0x05, 0x6e, 0x9c, 0x48, 0x53, 0xa1, 0x20, 0x96, 0x16, 0xa7, 0x5c, 0xb8, 0x44, + 0xdb, 0x7a, 0xe4, 0x58, 0x49, 0xec, 0xcd, 0x8e, 0x4b, 0x0a, 0x7c, 0x18, 0x3e, 0x26, 0x57, 0xe4, + 0x5d, 0x27, 0xdd, 0x36, 0x45, 0xe4, 0xc4, 0xc5, 0xd2, 0x7b, 0x33, 0x7e, 0x6f, 0xde, 0xfe, 0x83, + 0xde, 0xcd, 0x4c, 0x54, 0x71, 0xfd, 0x89, 0xa4, 0x2a, 0xab, 0x92, 0x75, 0xe4, 0xf5, 0xd9, 0x4c, + 0x54, 0xfe, 0xf3, 0x0b, 0x89, 0xc5, 0x74, 0xcc, 0x63, 0x39, 0xcf, 0x62, 0x5d, 0x8a, 0x29, 0x9d, + 0x4f, 0xd7, 0x14, 0xaf, 0xc9, 0xb4, 0x86, 0x3f, 0xc0, 0xe5, 0x94, 0x8d, 0x44, 0x25, 0xae, 0x4a, + 0xfe, 0x89, 0x9d, 0x42, 0xbb, 0x2a, 0xe7, 0x58, 0x78, 0x4e, 0xe0, 0xf4, 0x8f, 0x12, 0x03, 0x58, + 0x00, 0x6e, 0x29, 0x51, 0x89, 0x2a, 0x2f, 0x8b, 0xf1, 0xc8, 0x6b, 0xe9, 0x9a, 0x4d, 0xb1, 0xd7, + 0xd0, 0x5d, 0x1a, 0x19, 0xef, 0x20, 0x70, 0xfa, 0xee, 0xc0, 0x8f, 0x08, 0xd5, 0x57, 0x54, 0x53, + 0x21, 0xf3, 0xa9, 0x14, 0x4a, 0x2c, 0x29, 0x6a, 0x8c, 0x92, 0x4d, 0x6b, 0x88, 0x96, 0xf9, 0x68, + 0x68, 0x8b, 0x38, 0x7b, 0x8b, 0xfc, 0x7d, 0xb8, 0x30, 0x87, 0xde, 0xe5, 0x2d, 0xcd, 0xec, 0x9c, + 0x01, 0xb8, 0x17, 0xd6, 0x4f, 0x26, 0xad, 0x4d, 0xd9, 0xc3, 0xb4, 0xf6, 0x4f, 0xf4, 0x11, 0xd8, + 0x3b, 0xac, 0xb8, 0xb8, 0x7b, 0x5b, 0xa4, 0x3c, 0x2f, 0x26, 0xb8, 0x4a, 0x70, 0xc5, 0xfe, 0x87, + 0xce, 0x67, 0x42, 0xb5, 0x35, 0x6a, 0xd0, 0xe3, 0x29, 0x5a, 0x3b, 0x53, 0x84, 0x6b, 0x38, 0xd9, + 0xd1, 0x23, 0xc9, 0x3c, 0xe8, 0x9e, 0x2b, 0x75, 0x56, 0xa6, 0xa8, 0x15, 0xdb, 0xc9, 0x06, 0xd6, + 0x56, 0xe7, 0x4a, 0x71, 0xca, 0x1a, 0xb5, 0x06, 0xd5, 0x3c, 0x17, 0x77, 0x13, 0x5c, 0xe9, 0xfd, + 0x39, 0x4e, 0x1a, 0xa4, 0x79, 0xad, 0xeb, 0x1d, 0x36, 0xbc, 0x46, 0xe1, 0x77, 0x80, 0x09, 0x16, + 0x29, 0xa7, 0xac, 0x0e, 0xf0, 0x6f, 0x8f, 0xc5, 0x4f, 0x07, 0xdc, 0xad, 0xb9, 0x49, 0x8b, 0x0f, + 0xd3, 0xe2, 0x7d, 0x5a, 0x7c, 0x90, 0xd6, 0xa0, 0x7a, 0x32, 0xe3, 0xc3, 0x29, 0x1b, 0x8f, 0x74, + 0xb4, 0xa3, 0xc4, 0xa6, 0xea, 0x8e, 0x9b, 0x45, 0x8e, 0x45, 0x65, 0x3a, 0xda, 0xa6, 0xc3, 0xa2, + 0x98, 0x0f, 0xff, 0x11, 0x16, 0xe9, 0x55, 0xbe, 0x44, 0xaf, 0x13, 0x38, 0xfd, 0x83, 0x64, 0x8b, + 0x07, 0xbf, 0x1c, 0x38, 0xac, 0x6f, 0x18, 0x7b, 0x0f, 0xbd, 0x47, 0xfb, 0xc3, 0xfc, 0xc8, 0xdc, + 0xbe, 0x68, 0xf7, 0x20, 0xf8, 0xcf, 0xfe, 0x58, 0x23, 0xc9, 0x4a, 0x38, 0xbd, 0xbc, 0x5d, 0x2c, + 0x38, 0x12, 0x89, 0x0c, 0x87, 0xdf, 0x26, 0xb8, 0xfa, 0x90, 0x53, 0xc5, 0x5e, 0x3c, 0xb1, 0x66, + 0x4f, 0x35, 0xd6, 0x06, 0x2f, 0xf7, 0xee, 0x25, 0xc9, 0x06, 0xd0, 0x6d, 0x96, 0x99, 0xb1, 0xcd, + 0x60, 0xf7, 0x9b, 0xee, 0x9f, 0xec, 0x70, 0x24, 0x87, 0xbd, 0x2f, 0xc7, 0x91, 0x7e, 0x6a, 0xde, + 0x98, 0xe2, 0x75, 0x47, 0xbf, 0x23, 0xaf, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x3a, 0xe6, 0x81, + 0xce, 0x85, 0x04, 0x00, 0x00, } From ff779fcc7cfa3e4a43829e5c8be488e798c5be15 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 11:42:43 +0800 Subject: [PATCH 06/19] protocol modify --- internal/msg_transfer/logic/db.go | 2 +- internal/push/logic/push_to_client.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index 0c09e0c8e..b9ce8b589 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -14,7 +14,7 @@ func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { log.NewError(msg.OperationID, "data insert to redis err", err.Error(), msg.String()) return err } - msg.MsgData.Seq = seq + msg.MsgData.Seq = uint32(seq) pbSaveData := pbMsg.MsgDataToDB{} pbSaveData.MsgData = msg.MsgData log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 7d566a10a..803bb5b3b 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -24,7 +24,7 @@ type OpenIMContent struct { SessionType int `json:"sessionType"` From string `json:"from"` To string `json:"to"` - Seq int64 `json:"seq"` + Seq uint32 `json:"seq"` } type AtContent struct { Text string `json:"text"` From e4f87b53b485237d56eb1d7cf82e4c10962291d3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 11:53:57 +0800 Subject: [PATCH 07/19] protocol modify --- cmd/open_im_api/main.go | 1 - internal/api/chat/pull_msg.go | 77 +++-------------------------------- 2 files changed, 6 insertions(+), 72 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 7f8fd7db2..817042f5c 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -81,7 +81,6 @@ func main() { chatGroup := r.Group("/msg") { chatGroup.POST("/newest_seq", apiChat.GetSeq) - chatGroup.POST("/pull_msg", apiChat.PullMsg) chatGroup.POST("/send_msg", apiChat.SendMsg) chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) } diff --git a/internal/api/chat/pull_msg.go b/internal/api/chat/pull_msg.go index 56903f5cc..0872319c6 100644 --- a/internal/api/chat/pull_msg.go +++ b/internal/api/chat/pull_msg.go @@ -23,61 +23,11 @@ type paramsUserPullMsg struct { } } -func PullMsg(c *gin.Context) { - params := paramsUserPullMsg{} - if err := c.BindJSON(¶ms); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) - return - } - - token := c.Request.Header.Get("token") - if ok, err := token_verify.VerifyToken(token, params.SendID); !ok { - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "token validate err" + err.Error()}) - return - } - pbData := open_im_sdk.PullMessageReq{} - pbData.UserID = params.SendID - pbData.OperationID = params.OperationID - pbData.SeqBegin = *params.Data.SeqBegin - pbData.SeqEnd = *params.Data.SeqEnd - grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) - msgClient := pbChat.NewChatClient(grpcConn) - reply, err := msgClient.PullMessage(context.Background(), &pbData) - if err != nil { - log.NewError(params.OperationID, "UserPullMsg rpc failed, ", params, err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "UserPullMsg rpc failed, " + err.Error()}) - return - } - log.InfoByKv("rpc call success to pullMsgRep", pbData.OperationID, "ReplyArgs", reply.String(), "maxSeq", reply.GetMaxSeq(), - "MinSeq", reply.GetMinSeq(), "singLen", len(reply.GetSingleUserMsg()), "groupLen", len(reply.GetGroupUserMsg())) - - msg := make(map[string]interface{}) - if v := reply.GetSingleUserMsg(); v != nil { - msg["single"] = v - } else { - msg["single"] = []open_im_sdk.GatherFormat{} - } - if v := reply.GetGroupUserMsg(); v != nil { - msg["group"] = v - } else { - msg["group"] = []open_im_sdk.GatherFormat{} - } - msg["maxSeq"] = reply.GetMaxSeq() - msg["minSeq"] = reply.GetMinSeq() - c.JSON(http.StatusOK, gin.H{ - "errCode": reply.ErrCode, - "errMsg": reply.ErrMsg, - "reqIdentifier": *params.ReqIdentifier, - "data": msg, - }) - -} - type paramsUserPullMsgBySeqList struct { - ReqIdentifier int `json:"reqIdentifier" binding:"required"` - SendID string `json:"sendID" binding:"required"` - OperationID string `json:"operationID" binding:"required"` - SeqList []int64 `json:"seqList"` + ReqIdentifier int `json:"reqIdentifier" binding:"required"` + SendID string `json:"sendID" binding:"required"` + OperationID string `json:"operationID" binding:"required"` + SeqList []uint32 `json:"seqList"` } func PullMsgBySeqList(c *gin.Context) { @@ -104,26 +54,11 @@ func PullMsgBySeqList(c *gin.Context) { log.ErrorByKv("PullMessageBySeqList error", pbData.OperationID, "err", err.Error()) return } - log.InfoByKv("rpc call success to PullMessageBySeqList", pbData.OperationID, "ReplyArgs", reply.String(), "maxSeq", reply.GetMaxSeq(), - "MinSeq", reply.GetMinSeq(), "singLen", len(reply.GetSingleUserMsg()), "groupLen", len(reply.GetGroupUserMsg())) - - msg := make(map[string]interface{}) - if v := reply.GetSingleUserMsg(); v != nil { - msg["single"] = v - } else { - msg["single"] = []open_im_sdk.GatherFormat{} - } - if v := reply.GetGroupUserMsg(); v != nil { - msg["group"] = v - } else { - msg["group"] = []open_im_sdk.GatherFormat{} - } - msg["maxSeq"] = reply.GetMaxSeq() - msg["minSeq"] = reply.GetMinSeq() + log.InfoByKv("rpc call success to PullMessageBySeqList", pbData.OperationID, "ReplyArgs", reply.String(), len(reply.List)) c.JSON(http.StatusOK, gin.H{ "errCode": reply.ErrCode, "errMsg": reply.ErrMsg, "reqIdentifier": params.ReqIdentifier, - "data": msg, + "data": reply.List, }) } From 3c64d8498007d837cf2acdd239075fb7ea7d3d88 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 11:55:08 +0800 Subject: [PATCH 08/19] protocol modify --- internal/rpc/msg/pull_message.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 6f6a614d1..d4b8ec0e6 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -22,7 +22,6 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq resp.MaxSeq = 0 } else { log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err1.Error()) - resp.MaxSeq = -1 resp.ErrCode = 200 resp.ErrMsg = "redis get err" } @@ -32,7 +31,6 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq resp.MinSeq = 0 } else { log.NewError(in.OperationID, "getMaxSeq from redis error", in.String(), err2.Error()) - resp.MinSeq = -1 resp.ErrCode = 201 resp.ErrMsg = "redis get err" } From 911100923fae94f90af0a996394dedc2ac31798f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 17:18:41 +0800 Subject: [PATCH 09/19] chat log model update --- pkg/common/db/model_struct.go | 19 +++++++++++ pkg/common/db/mysql.go | 2 +- .../im_mysql_msg_model/chat_log_model.go | 33 ++++--------------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 8dd0ab3a2..eabc26668 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -165,3 +165,22 @@ type Black struct { OperatorUserID string `gorm:"column:operator_user_id;size:64"` Ex string `gorm:"column:ex;size:1024"` } + +type ChatLog struct { + ServerMsgID string `gorm:"column:server_msg_id;primary_key;type:char(64)" json:"serverMsgID"` + ClientMsgID string `gorm:"column:client_msg_id;type:char(64)" json:"clientMsgID"` + SendID string `gorm:"column:send_id;type:char(64)" json:"sendID"` + RecvID string `gorm:"column:recv_id;type:char(64)" json:"recvID"` + SenderPlatformID int32 `gorm:"column:sender_platform_id" json:"senderPlatformID"` + SenderNickname string `gorm:"column:sender_nick_name;type:varchar(255)" json:"senderNickname"` + SenderFaceURL string `gorm:"column:sender_face_url;type:varchar(255)" json:"senderFaceURL"` + SessionType int32 `gorm:"column:session_type" json:"sessionType"` + MsgFrom int32 `gorm:"column:msg_from" json:"msgFrom"` + ContentType int32 `gorm:"column:content_type" json:"contentType"` + Content string `gorm:"column:content;type:varchar(1000)" json:"content"` + Status int32 `gorm:"column:status" json:"status"` + Seq uint32 `gorm:"column:seq;index:index_seq;default:0" json:"seq"` + SendTime time.Time `gorm:"column:send_time" json:"sendTime"` + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` + Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"` +} diff --git a/pkg/common/db/mysql.go b/pkg/common/db/mysql.go index 9731a1716..56ca3648c 100644 --- a/pkg/common/db/mysql.go +++ b/pkg/common/db/mysql.go @@ -58,7 +58,7 @@ func initMysqlDB() { &GroupMember{}, &GroupRequest{}, &User{}, - &Black{}) + &Black{}, &ChatLog{}) db.Set("gorm:table_options", "CHARSET=utf8") // 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 5a80e6bb2..58f60b0c0 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 @@ -11,45 +11,24 @@ import ( "Open_IM/pkg/common/db" pbMsg "Open_IM/pkg/proto/chat" "Open_IM/pkg/utils" - "database/sql" - "time" + "github.com/jinzhu/copier" ) -// ChatLog Chat information table structure -type ChatLog struct { - MsgId string `gorm:"primary_key"` // Chat history primary key ID - SendID string `gorm:"column:send_id"` // Send ID - RecvID string `gorm:"column:recv_id"` //Receive ID - SendTime time.Time `gorm:"column:send_time"` // Send time - SessionType int32 `gorm:"column:session_type"` // Session type - ContentType int32 `gorm:"column:content_type"` // Message content type - MsgFrom int32 `gorm:"column:msg_from"` // Source, user, system - Content string `gorm:"column:content"` // Chat content - SenderPlatformID int32 `gorm:"column:sender_platform_id"` //The sender's platform ID - Remark sql.NullString `gorm:"column:remark"` // remark -} - func InsertMessageToChatLog(msg pbMsg.MsgDataToMQ) error { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return err } - chatLog := ChatLog{ - MsgId: msg.MsgData.ServerMsgID, - SendID: msg.MsgData.SendID, - SendTime: utils.UnixNanoSecondToTime(msg.MsgData.SendTime), - SessionType: msg.MsgData.SessionType, - ContentType: msg.MsgData.ContentType, - MsgFrom: msg.MsgData.MsgFrom, - Content: string(msg.MsgData.Content), - SenderPlatformID: msg.MsgData.SenderPlatformID, - } + chatLog := new(db.ChatLog) + copier.Copy(chatLog, msg.MsgData) switch msg.MsgData.SessionType { case constant.GroupChatType: chatLog.RecvID = msg.MsgData.GroupID case constant.SingleChatType: chatLog.RecvID = msg.MsgData.RecvID } - + chatLog.Content = string(msg.MsgData.Content) + chatLog.CreateTime = utils.UnixNanoSecondToTime(msg.MsgData.CreateTime) + chatLog.SendTime = utils.UnixNanoSecondToTime(msg.MsgData.SendTime) return dbConn.Table("chat_log").Create(chatLog).Error } From aa7b89115062a25eaeb8b4f3c33ed3593348c55e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 17:29:38 +0800 Subject: [PATCH 10/19] chat log model update --- pkg/utils/map.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/utils/map.go b/pkg/utils/map.go index 05712fe64..fc24cc87d 100644 --- a/pkg/utils/map.go +++ b/pkg/utils/map.go @@ -121,6 +121,9 @@ func GetSwitchFromOptions(Options map[string]bool, key string) (result bool) { } return false } -func SetSwitchFromOptions(Options map[string]bool, key string, value bool) { - Options[key] = value +func SetSwitchFromOptions(options map[string]bool, key string, value bool) { + if options == nil { + options = make(map[string]bool, 5) + } + options[key] = value } From f7ab90724e71d0aa0d0cb76a04e4d2d9043e7119 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 18:04:24 +0800 Subject: [PATCH 11/19] msg test --- internal/rpc/msg/send_msg.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index d6e8c20a1..8b91a3c39 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -210,7 +210,7 @@ func modifyMessageByUserMessageReceiveOpt(userID, sourceID string, sessionType i conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) opt, err := db.DB.GetSingleConversationMsgOpt(userID, conversationID) if err != nil || err != redis.ErrNil { - log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", pb.String()) + log.NewError(pb.OperationID, "GetSingleConversationMsgOpt from redis err", conversationID, pb.String(), err.Error()) return true } switch opt { From cd7efee49c550cf824707ed472057b15da5428a5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 18:28:45 +0800 Subject: [PATCH 12/19] msg test --- pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 58f60b0c0..8455e3885 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 @@ -30,5 +30,5 @@ func InsertMessageToChatLog(msg pbMsg.MsgDataToMQ) error { chatLog.Content = string(msg.MsgData.Content) chatLog.CreateTime = utils.UnixNanoSecondToTime(msg.MsgData.CreateTime) chatLog.SendTime = utils.UnixNanoSecondToTime(msg.MsgData.SendTime) - return dbConn.Table("chat_log").Create(chatLog).Error + return dbConn.Table("chat_logs").Create(chatLog).Error } From cbed698a1c50e11af1a00806e5bbfc9998fcda1c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 18:36:30 +0800 Subject: [PATCH 13/19] msg test --- internal/rpc/msg/pull_message.go | 4 ++-- pkg/common/db/mongoModel.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index d4b8ec0e6..05f1dad39 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -39,10 +39,10 @@ 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) - msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList) + msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) if err != nil { log.ErrorByKv("PullMessageBySeqList data error", in.OperationID, in.String()) - resp.ErrCode = 1 + resp.ErrCode = 201 resp.ErrMsg = err.Error() return resp, nil } diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 6538d17f4..1ea86d004 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -61,7 +61,7 @@ func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq uint32, err error) { } return MinSeq, nil } -func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32) (seqMsg []*open_im_sdk.MsgData, err error) { +func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) { var hasSeqList []uint32 singleCount := 0 session := d.mgoSession.Clone() @@ -86,14 +86,14 @@ func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32) (seqMsg []*ope sChat := UserChat{} for seqUid, value := range m { if err = c.Find(bson.M{"uid": seqUid}).One(&sChat); err != nil { - log.NewError("", "not find seqUid", seqUid, value, uid, seqList) + log.NewError(operationID, "not find seqUid", seqUid, value, uid, 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("", "not find seqUid", seqUid, value, uid, seqList) + log.NewError(operationID, "Unmarshal err", seqUid, value, uid, seqList, err.Error()) return nil, err } if isContainInt32(msg.Seq, value) { From 64f2fb9e734567a9d13066c773c82b9dac11733b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 18:38:20 +0800 Subject: [PATCH 14/19] msg test --- 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 1ea86d004..98318dd65 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -142,7 +142,7 @@ func (d *DataBases) SaveUserChat(uid string, sendTime int64, m *pbMsg.MsgDataToD log.NewDebug("", "find mgo uid cost time", getCurrentTimestampByMill()-newTime) sMsg := MsgInfo{} sMsg.SendTime = sendTime - if sMsg.Msg, err = proto.Marshal(m); err != nil { + if sMsg.Msg, err = proto.Marshal(m.MsgData); err != nil { return err } if n == 0 { From 5a9f3f1f5e6fa93c7d873c54f55bdb3c78d5a3d5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 19:20:56 +0800 Subject: [PATCH 15/19] msg test --- .../db/mysql_model/im_mysql_msg_model/chat_log_model.go | 4 ++-- pkg/utils/time_format.go | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) 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 8455e3885..96d03a7c7 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 @@ -28,7 +28,7 @@ func InsertMessageToChatLog(msg pbMsg.MsgDataToMQ) error { chatLog.RecvID = msg.MsgData.RecvID } chatLog.Content = string(msg.MsgData.Content) - chatLog.CreateTime = utils.UnixNanoSecondToTime(msg.MsgData.CreateTime) - chatLog.SendTime = utils.UnixNanoSecondToTime(msg.MsgData.SendTime) + chatLog.CreateTime = utils.UnixMillSecondToTime(msg.MsgData.CreateTime) + chatLog.SendTime = utils.UnixMillSecondToTime(msg.MsgData.SendTime) return dbConn.Table("chat_logs").Create(chatLog).Error } diff --git a/pkg/utils/time_format.go b/pkg/utils/time_format.go index 3accd0567..0587db531 100644 --- a/pkg/utils/time_format.go +++ b/pkg/utils/time_format.go @@ -30,6 +30,11 @@ func UnixSecondToTime(second int64) time.Time { func UnixNanoSecondToTime(nanoSecond int64) time.Time { return time.Unix(0, nanoSecond) } +func UnixMillSecondToTime(millSecond int64) time.Time { + sec := millSecond / 1000 + msec := millSecond % 1000 + return time.Unix(sec, msec*int64(time.Millisecond)) +} //Get the current timestamp by Nano func GetCurrentTimestampByNano() int64 { From 8e105336811a9982c85e7205ff8a02c2aaab4085 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 20 Jan 2022 19:23:20 +0800 Subject: [PATCH 16/19] msg test --- pkg/utils/time_format.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/utils/time_format.go b/pkg/utils/time_format.go index 0587db531..b24d11398 100644 --- a/pkg/utils/time_format.go +++ b/pkg/utils/time_format.go @@ -31,9 +31,7 @@ func UnixNanoSecondToTime(nanoSecond int64) time.Time { return time.Unix(0, nanoSecond) } func UnixMillSecondToTime(millSecond int64) time.Time { - sec := millSecond / 1000 - msec := millSecond % 1000 - return time.Unix(sec, msec*int64(time.Millisecond)) + return time.Unix(0, millSecond*1e6) } //Get the current timestamp by Nano From 1944b24fba7b9b5d2c2381adfd02a318b3ba22b3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Fri, 21 Jan 2022 09:39:09 +0800 Subject: [PATCH 17/19] push message modify --- internal/msg_gateway/gate/rpc_server.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_gateway/gate/rpc_server.go b/internal/msg_gateway/gate/rpc_server.go index 450cb1c73..240934d3b 100644 --- a/internal/msg_gateway/gate/rpc_server.go +++ b/internal/msg_gateway/gate/rpc_server.go @@ -94,8 +94,8 @@ func (r *RPCServer) OnlinePushMsg(_ context.Context, in *pbRelay.OnlinePushMsgRe } //Single chat sender synchronization message if in.MsgData.GetSessionType() == constant.SingleChatType { - for k, v := range ws.getSingleUserAllConn(recvID) { - _ = sendMsgToUser(v, replyBytes.Bytes(), in, k, recvID) + for k, v := range ws.getSingleUserAllConn(in.MsgData.SendID) { + _ = sendMsgToUser(v, replyBytes.Bytes(), in, k, in.MsgData.SendID) } } if !tag { From 8525dcb376e8efc0d4e1ebda3c3803f40740df4e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 24 Jan 2022 16:44:14 +0800 Subject: [PATCH 18/19] fix time convert --- 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 a0c451026..147bf2d86 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -80,6 +80,7 @@ func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq continue } utils.CopyStructFields(&userInfo, user) + userInfo.Birth = uint32(user.Birth.Unix()) userInfoList = append(userInfoList, &userInfo) } } else { From 6cbdc958cd0f2b432bb8fb147bd695f49c7e6b2d Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Fri, 28 Jan 2022 11:18:31 +0800 Subject: [PATCH 19/19] notification --- internal/rpc/msg/friend_notification.go | 1 - internal/rpc/msg/group_notification.go | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/rpc/msg/friend_notification.go b/internal/rpc/msg/friend_notification.go index b0377c854..e44bc0ff0 100644 --- a/internal/rpc/msg/friend_notification.go +++ b/internal/rpc/msg/friend_notification.go @@ -101,7 +101,6 @@ func FriendApplicationRejectedNotification(req *pbFriend.AddFriendResponseReq) { } func FriendAddedNotification(operationID, opUserID, fromUserID, toUserID string) { - return friendAddedTips := open_im_sdk.FriendAddedTips{Friend: &open_im_sdk.FriendInfo{}, OpUser: &open_im_sdk.PublicUserInfo{}} user, err := imdb.GetUserByUserID(opUserID) if err != nil { diff --git a/internal/rpc/msg/group_notification.go b/internal/rpc/msg/group_notification.go index 5893a9781..f9c428d18 100644 --- a/internal/rpc/msg/group_notification.go +++ b/internal/rpc/msg/group_notification.go @@ -218,7 +218,7 @@ func MemberQuitNotification(req *pbGroup.QuitGroupReq) { } groupNotification(constant.MemberQuitNotification, &MemberQuitTips, req.OpUserID, req.GroupID, "", req.OperationID) - groupNotification(constant.MemberQuitNotification, &MemberQuitTips, req.OpUserID, "", req.OpUserID, req.OperationID) + // groupNotification(constant.MemberQuitNotification, &MemberQuitTips, req.OpUserID, "", req.OpUserID, req.OperationID) }