Parcourir la source

add 礼物列表

master
DengBiao il y a 2 ans
Parent
révision
1b85ffe0b5
8 fichiers modifiés avec 457 ajouts et 154 suppressions
  1. +14
    -0
      internal/business/api/business_ext.go
  2. +20
    -0
      internal/business/comm/db/db_emoticon.go
  3. +28
    -0
      internal/business/comm/db/model/emoticon.go
  4. +18
    -0
      internal/logic/domain/message/service/emoticon_service.go
  5. +362
    -151
      pkg/pb/business.ext.pb.go
  6. +12
    -1
      pkg/proto/business.ext.proto
  7. +2
    -1
      pkg/urlwhitelist/urlwhitelist.go
  8. +1
    -1
      test/tcp_conn/main.go

+ 14
- 0
internal/business/api/business_ext.go Voir le fichier

@@ -5,6 +5,7 @@ import (
"gim/internal/business/app"
comm "gim/internal/business/comm"
"gim/internal/business/comm/utils"
"gim/internal/logic/domain/message/service"
"gim/pkg/grpclib"
"gim/pkg/pb"
"strconv"
@@ -12,6 +13,19 @@ import (

type BusinessExtServer struct{}

func (s *BusinessExtServer) EmoticonList(ctx context.Context, empty *pb.Empty) (*pb.EmoticonListResp, error) {
masterId, err := grpclib.GetCtxMasterId(ctx)
if err != nil {
return nil, err
}
list, err := service.EmoticonList(masterId)
if err != nil {
return nil, err
}

return &pb.EmoticonListResp{Emoticons: list}, err
}

func (s *BusinessExtServer) SignIn(ctx context.Context, req *pb.SignInReq) (*pb.SignInResp, error) {
isNew, userId, token, masterId, err := app.AuthApp.SignIn(ctx, req.PhoneNumber, req.Code, req.MasterId, req.DeviceId, req.PushAlia)
if err != nil {


+ 20
- 0
internal/business/comm/db/db_emoticon.go Voir le fichier

@@ -0,0 +1,20 @@
package db

import (
"gim/internal/business/comm/db/model"
"gim/pkg/db"
"gim/pkg/gerrors"
)

type dbEmoticon struct{}

var DbEmoticon = new(dbEmoticon)

// EmoticonFind 获取记录
func (*dbEmoticon) EmoticonFind(masterId string) (*[]model.Emoticon, error) {
var list []model.Emoticon
if err := db.DB.Where("`state` = 1 and `master_id` = ?", masterId).Order("sort desc").Find(&list).Error; err != nil {
return nil, gerrors.WrapError(err)
}
return &list, nil
}

+ 28
- 0
internal/business/comm/db/model/emoticon.go Voir le fichier

@@ -0,0 +1,28 @@
package model

import "gim/pkg/pb"

type Emoticon struct {
Id int64
MasterId int64 // 站长id
Name string // 名称
ImgUrl string // 图片地址
Memo string // 备注
Sort int // 排序
State int // 状态0关闭,1开启
CreateAt string // 创建时间
UpdateAt string // 更新时间
}

func (e *Emoticon) ToProto() *pb.Emoticon {
if e == nil {
return nil
}

return &pb.Emoticon{
Name: e.Name,
ImgUrl: e.ImgUrl,
Memo: e.Memo,
Sort: int32(e.Sort),
}
}

+ 18
- 0
internal/logic/domain/message/service/emoticon_service.go Voir le fichier

@@ -0,0 +1,18 @@
package service

import (
"gim/internal/business/comm/db"
"gim/pkg/pb"
)

func EmoticonList(masterId string) ([]*pb.Emoticon, error) {
emoticons, err := db.DbEmoticon.EmoticonFind(masterId)
if err != nil {
return nil, err
}
pbEmoticons := make([]*pb.Emoticon, len(*emoticons))
for i, v := range *emoticons {
pbEmoticons[i] = v.ToProto()
}
return pbEmoticons, nil
}

+ 362
- 151
pkg/pb/business.ext.pb.go Voir le fichier

@@ -8,9 +8,9 @@ package pb

import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -24,6 +24,124 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type Emoticon struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // 名称
ImgUrl string `protobuf:"bytes,2,opt,name=img_url,json=imgUrl,proto3" json:"img_url,omitempty"` // 图片地址
Memo string `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"` // 备注
Sort int32 `protobuf:"varint,4,opt,name=sort,proto3" json:"sort,omitempty"` // 排序
}

func (x *Emoticon) Reset() {
*x = Emoticon{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}

func (x *Emoticon) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*Emoticon) ProtoMessage() {}

func (x *Emoticon) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}

// Deprecated: Use Emoticon.ProtoReflect.Descriptor instead.
func (*Emoticon) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{0}
}

func (x *Emoticon) GetName() string {
if x != nil {
return x.Name
}
return ""
}

func (x *Emoticon) GetImgUrl() string {
if x != nil {
return x.ImgUrl
}
return ""
}

func (x *Emoticon) GetMemo() string {
if x != nil {
return x.Memo
}
return ""
}

func (x *Emoticon) GetSort() int32 {
if x != nil {
return x.Sort
}
return 0
}

type EmoticonListResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

Emoticons []*Emoticon `protobuf:"bytes,1,rep,name=emoticons,proto3" json:"emoticons,omitempty"`
}

func (x *EmoticonListResp) Reset() {
*x = EmoticonListResp{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}

func (x *EmoticonListResp) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*EmoticonListResp) ProtoMessage() {}

func (x *EmoticonListResp) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}

// Deprecated: Use EmoticonListResp.ProtoReflect.Descriptor instead.
func (*EmoticonListResp) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{1}
}

func (x *EmoticonListResp) GetEmoticons() []*Emoticon {
if x != nil {
return x.Emoticons
}
return nil
}

type SignInReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -33,13 +151,13 @@ type SignInReq struct {
Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 验证码
DeviceId int64 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id
MasterId int64 `protobuf:"varint,4,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` // 站长id
PushAlia string `protobuf:"varint,5,opt,name=push_alia,json=pushAlia,proto3" json:"push_alia,omitempty"` // 极光推送-别名
PushAlia string `protobuf:"bytes,5,opt,name=push_alia,json=pushAlia,proto3" json:"push_alia,omitempty"` // 极光推送-别名
}

func (x *SignInReq) Reset() {
*x = SignInReq{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[0]
mi := &file_business_ext_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -52,7 +170,7 @@ func (x *SignInReq) String() string {
func (*SignInReq) ProtoMessage() {}

func (x *SignInReq) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[0]
mi := &file_business_ext_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -65,7 +183,7 @@ func (x *SignInReq) ProtoReflect() protoreflect.Message {

// Deprecated: Use SignInReq.ProtoReflect.Descriptor instead.
func (*SignInReq) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{0}
return file_business_ext_proto_rawDescGZIP(), []int{2}
}

func (x *SignInReq) GetPhoneNumber() string {
@@ -96,6 +214,13 @@ func (x *SignInReq) GetMasterId() int64 {
return 0
}

func (x *SignInReq) GetPushAlia() string {
if x != nil {
return x.PushAlia
}
return ""
}

type SignInResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -110,7 +235,7 @@ type SignInResp struct {
func (x *SignInResp) Reset() {
*x = SignInResp{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[1]
mi := &file_business_ext_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -123,7 +248,7 @@ func (x *SignInResp) String() string {
func (*SignInResp) ProtoMessage() {}

func (x *SignInResp) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[1]
mi := &file_business_ext_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -136,7 +261,7 @@ func (x *SignInResp) ProtoReflect() protoreflect.Message {

// Deprecated: Use SignInResp.ProtoReflect.Descriptor instead.
func (*SignInResp) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{1}
return file_business_ext_proto_rawDescGZIP(), []int{3}
}

func (x *SignInResp) GetIsNew() bool {
@@ -180,7 +305,7 @@ type CloudUploadFileReq struct {
func (x *CloudUploadFileReq) Reset() {
*x = CloudUploadFileReq{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[2]
mi := &file_business_ext_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -193,7 +318,7 @@ func (x *CloudUploadFileReq) String() string {
func (*CloudUploadFileReq) ProtoMessage() {}

func (x *CloudUploadFileReq) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[2]
mi := &file_business_ext_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -206,7 +331,7 @@ func (x *CloudUploadFileReq) ProtoReflect() protoreflect.Message {

// Deprecated: Use CloudUploadFileReq.ProtoReflect.Descriptor instead.
func (*CloudUploadFileReq) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{2}
return file_business_ext_proto_rawDescGZIP(), []int{4}
}

func (x *CloudUploadFileReq) GetDir() string {
@@ -244,7 +369,7 @@ type CloudUploadFileResp struct {
func (x *CloudUploadFileResp) Reset() {
*x = CloudUploadFileResp{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[3]
mi := &file_business_ext_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -257,7 +382,7 @@ func (x *CloudUploadFileResp) String() string {
func (*CloudUploadFileResp) ProtoMessage() {}

func (x *CloudUploadFileResp) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[3]
mi := &file_business_ext_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -270,7 +395,7 @@ func (x *CloudUploadFileResp) ProtoReflect() protoreflect.Message {

// Deprecated: Use CloudUploadFileResp.ProtoReflect.Descriptor instead.
func (*CloudUploadFileResp) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{3}
return file_business_ext_proto_rawDescGZIP(), []int{5}
}

func (x *CloudUploadFileResp) GetMethod() string {
@@ -319,7 +444,7 @@ type User struct {
func (x *User) Reset() {
*x = User{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[4]
mi := &file_business_ext_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -332,7 +457,7 @@ func (x *User) String() string {
func (*User) ProtoMessage() {}

func (x *User) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[4]
mi := &file_business_ext_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -345,7 +470,7 @@ func (x *User) ProtoReflect() protoreflect.Message {

// Deprecated: Use User.ProtoReflect.Descriptor instead.
func (*User) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{4}
return file_business_ext_proto_rawDescGZIP(), []int{6}
}

func (x *User) GetUserId() int64 {
@@ -415,7 +540,7 @@ type GetUserReq struct {
func (x *GetUserReq) Reset() {
*x = GetUserReq{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[5]
mi := &file_business_ext_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -428,7 +553,7 @@ func (x *GetUserReq) String() string {
func (*GetUserReq) ProtoMessage() {}

func (x *GetUserReq) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[5]
mi := &file_business_ext_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -441,7 +566,7 @@ func (x *GetUserReq) ProtoReflect() protoreflect.Message {

// Deprecated: Use GetUserReq.ProtoReflect.Descriptor instead.
func (*GetUserReq) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{5}
return file_business_ext_proto_rawDescGZIP(), []int{7}
}

func (x *GetUserReq) GetUserId() int64 {
@@ -462,7 +587,7 @@ type GetUserResp struct {
func (x *GetUserResp) Reset() {
*x = GetUserResp{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[6]
mi := &file_business_ext_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -475,7 +600,7 @@ func (x *GetUserResp) String() string {
func (*GetUserResp) ProtoMessage() {}

func (x *GetUserResp) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[6]
mi := &file_business_ext_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -488,7 +613,7 @@ func (x *GetUserResp) ProtoReflect() protoreflect.Message {

// Deprecated: Use GetUserResp.ProtoReflect.Descriptor instead.
func (*GetUserResp) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{6}
return file_business_ext_proto_rawDescGZIP(), []int{8}
}

func (x *GetUserResp) GetUser() *User {
@@ -512,7 +637,7 @@ type UpdateUserReq struct {
func (x *UpdateUserReq) Reset() {
*x = UpdateUserReq{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[7]
mi := &file_business_ext_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -525,7 +650,7 @@ func (x *UpdateUserReq) String() string {
func (*UpdateUserReq) ProtoMessage() {}

func (x *UpdateUserReq) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[7]
mi := &file_business_ext_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -538,7 +663,7 @@ func (x *UpdateUserReq) ProtoReflect() protoreflect.Message {

// Deprecated: Use UpdateUserReq.ProtoReflect.Descriptor instead.
func (*UpdateUserReq) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{7}
return file_business_ext_proto_rawDescGZIP(), []int{9}
}

func (x *UpdateUserReq) GetNickname() string {
@@ -581,7 +706,7 @@ type SearchUserReq struct {
func (x *SearchUserReq) Reset() {
*x = SearchUserReq{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[8]
mi := &file_business_ext_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -594,7 +719,7 @@ func (x *SearchUserReq) String() string {
func (*SearchUserReq) ProtoMessage() {}

func (x *SearchUserReq) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[8]
mi := &file_business_ext_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -607,7 +732,7 @@ func (x *SearchUserReq) ProtoReflect() protoreflect.Message {

// Deprecated: Use SearchUserReq.ProtoReflect.Descriptor instead.
func (*SearchUserReq) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{8}
return file_business_ext_proto_rawDescGZIP(), []int{10}
}

func (x *SearchUserReq) GetKey() string {
@@ -635,7 +760,7 @@ type SearchUserResp struct {
func (x *SearchUserResp) Reset() {
*x = SearchUserResp{}
if protoimpl.UnsafeEnabled {
mi := &file_business_ext_proto_msgTypes[9]
mi := &file_business_ext_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -648,7 +773,7 @@ func (x *SearchUserResp) String() string {
func (*SearchUserResp) ProtoMessage() {}

func (x *SearchUserResp) ProtoReflect() protoreflect.Message {
mi := &file_business_ext_proto_msgTypes[9]
mi := &file_business_ext_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -661,7 +786,7 @@ func (x *SearchUserResp) ProtoReflect() protoreflect.Message {

// Deprecated: Use SearchUserResp.ProtoReflect.Descriptor instead.
func (*SearchUserResp) Descriptor() ([]byte, []int) {
return file_business_ext_proto_rawDescGZIP(), []int{9}
return file_business_ext_proto_rawDescGZIP(), []int{11}
}

func (x *SearchUserResp) GetUsers() []*User {
@@ -676,85 +801,100 @@ var File_business_ext_proto protoreflect.FileDescriptor
var file_business_ext_proto_rawDesc = []byte{
0x0a, 0x12, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7c, 0x0a, 0x09, 0x53, 0x69,
0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65,
0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70,
0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f,
0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1b,
0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d,
0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5f, 0x0a, 0x08, 0x45, 0x6d,
0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6d,
0x67, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x67,
0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18,
0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x3e, 0x0a, 0x10, 0x45,
0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12,
0x2a, 0x0a, 0x09, 0x65, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e,
0x52, 0x09, 0x65, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x09,
0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f,
0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04,
0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65,
0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a,
0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x75,
0x73, 0x68, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
0x75, 0x73, 0x68, 0x41, 0x6c, 0x69, 0x61, 0x22, 0x6f, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x49,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x6e, 0x65, 0x77, 0x18,
0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x17, 0x0a, 0x07,
0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75,
0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d,
0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e,
0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x6e, 0x65, 0x77,
0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x17, 0x0a,
0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09,
0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x60, 0x0a, 0x12, 0x43, 0x6c, 0x6f,
0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12,
0x10, 0x0a, 0x03, 0x64, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69,
0x72, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b,
0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x69, 0x0a, 0x13, 0x43,
0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65,
0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f,
0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x10,
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xe1, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12,
0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b,
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28,
0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74,
0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a,
0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03,
0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x25, 0x0a, 0x0a, 0x47, 0x65,
0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72,
0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
0x64, 0x22, 0x2b, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
0x12, 0x1c, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08,
0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x72,
0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12,
0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73,
0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a,
0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05,
0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74,
0x72, 0x61, 0x22, 0x3e, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72,
0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f,
0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72,
0x49, 0x64, 0x22, 0x30, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72,
0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75,
0x73, 0x65, 0x72, 0x73, 0x32, 0x87, 0x02, 0x0a, 0x0b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73,
0x73, 0x45, 0x78, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x12, 0x0d,
0x2e, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e,
0x70, 0x62, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a,
0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65,
0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65,
0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x0a, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e,
0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55,
0x73, 0x65, 0x72, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55,
0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x61, 0x72,
0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0f, 0x43, 0x6c,
0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e,
0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69,
0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64,
0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0d,
0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x60, 0x0a, 0x12, 0x43, 0x6c, 0x6f, 0x75,
0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x10,
0x0a, 0x03, 0x64, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x72,
0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a,
0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x69, 0x0a, 0x13, 0x43, 0x6c,
0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73,
0x70, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xe1, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x17,
0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e,
0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f,
0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61,
0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72,
0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52,
0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75,
0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09,
0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52,
0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x25, 0x0a, 0x0a, 0x47, 0x65, 0x74,
0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
0x22, 0x2b, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12,
0x1c, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e,
0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x72, 0x0a,
0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x1a,
0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65,
0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a,
0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65,
0x78, 0x74, 0x72, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72,
0x61, 0x22, 0x3e, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x52,
0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49,
0x64, 0x22, 0x30, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x52,
0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73,
0x65, 0x72, 0x73, 0x32, 0xb8, 0x02, 0x0a, 0x0b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73,
0x45, 0x78, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x12, 0x0d, 0x2e,
0x70, 0x62, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x70,
0x62, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x07,
0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74,
0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74,
0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45,
0x6d, 0x70, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73,
0x65, 0x72, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73,
0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63,
0x68, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0f, 0x43, 0x6c, 0x6f,
0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x70,
0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c,
0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55,
0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a,
0x0c, 0x45, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x09, 0x2e,
0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d,
0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0d,
0x5a, 0x0b, 0x67, 0x69, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}
@@ -771,38 +911,43 @@ func file_business_ext_proto_rawDescGZIP() []byte {
return file_business_ext_proto_rawDescData
}

var file_business_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
var file_business_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_business_ext_proto_goTypes = []interface{}{
(*SignInReq)(nil), // 0: pb.SignInReq
(*SignInResp)(nil), // 1: pb.SignInResp
(*CloudUploadFileReq)(nil), // 2: pb.CloudUploadFileReq
(*CloudUploadFileResp)(nil), // 3: pb.CloudUploadFileResp
(*User)(nil), // 4: pb.User
(*GetUserReq)(nil), // 5: pb.GetUserReq
(*GetUserResp)(nil), // 6: pb.GetUserResp
(*UpdateUserReq)(nil), // 7: pb.UpdateUserReq
(*SearchUserReq)(nil), // 8: pb.SearchUserReq
(*SearchUserResp)(nil), // 9: pb.SearchUserResp
(*Empty)(nil), // 10: pb.Empty
(*Emoticon)(nil), // 0: pb.Emoticon
(*EmoticonListResp)(nil), // 1: pb.EmoticonListResp
(*SignInReq)(nil), // 2: pb.SignInReq
(*SignInResp)(nil), // 3: pb.SignInResp
(*CloudUploadFileReq)(nil), // 4: pb.CloudUploadFileReq
(*CloudUploadFileResp)(nil), // 5: pb.CloudUploadFileResp
(*User)(nil), // 6: pb.User
(*GetUserReq)(nil), // 7: pb.GetUserReq
(*GetUserResp)(nil), // 8: pb.GetUserResp
(*UpdateUserReq)(nil), // 9: pb.UpdateUserReq
(*SearchUserReq)(nil), // 10: pb.SearchUserReq
(*SearchUserResp)(nil), // 11: pb.SearchUserResp
(*Empty)(nil), // 12: pb.Empty
}
var file_business_ext_proto_depIdxs = []int32{
4, // 0: pb.GetUserResp.user:type_name -> pb.User
4, // 1: pb.SearchUserResp.users:type_name -> pb.User
0, // 2: pb.BusinessExt.SignIn:input_type -> pb.SignInReq
5, // 3: pb.BusinessExt.GetUser:input_type -> pb.GetUserReq
7, // 4: pb.BusinessExt.UpdateUser:input_type -> pb.UpdateUserReq
8, // 5: pb.BusinessExt.SearchUser:input_type -> pb.SearchUserReq
2, // 6: pb.BusinessExt.CloudUploadFile:input_type -> pb.CloudUploadFileReq
1, // 7: pb.BusinessExt.SignIn:output_type -> pb.SignInResp
6, // 8: pb.BusinessExt.GetUser:output_type -> pb.GetUserResp
10, // 9: pb.BusinessExt.UpdateUser:output_type -> pb.Empty
9, // 10: pb.BusinessExt.SearchUser:output_type -> pb.SearchUserResp
3, // 11: pb.BusinessExt.CloudUploadFile:output_type -> pb.CloudUploadFileResp
7, // [7:12] is the sub-list for method output_type
2, // [2:7] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
0, // 0: pb.EmoticonListResp.emoticons:type_name -> pb.Emoticon
6, // 1: pb.GetUserResp.user:type_name -> pb.User
6, // 2: pb.SearchUserResp.users:type_name -> pb.User
2, // 3: pb.BusinessExt.SignIn:input_type -> pb.SignInReq
7, // 4: pb.BusinessExt.GetUser:input_type -> pb.GetUserReq
9, // 5: pb.BusinessExt.UpdateUser:input_type -> pb.UpdateUserReq
10, // 6: pb.BusinessExt.SearchUser:input_type -> pb.SearchUserReq
4, // 7: pb.BusinessExt.CloudUploadFile:input_type -> pb.CloudUploadFileReq
12, // 8: pb.BusinessExt.EmoticonList:input_type -> pb.Empty
3, // 9: pb.BusinessExt.SignIn:output_type -> pb.SignInResp
8, // 10: pb.BusinessExt.GetUser:output_type -> pb.GetUserResp
12, // 11: pb.BusinessExt.UpdateUser:output_type -> pb.Empty
11, // 12: pb.BusinessExt.SearchUser:output_type -> pb.SearchUserResp
5, // 13: pb.BusinessExt.CloudUploadFile:output_type -> pb.CloudUploadFileResp
1, // 14: pb.BusinessExt.EmoticonList:output_type -> pb.EmoticonListResp
9, // [9:15] is the sub-list for method output_type
3, // [3:9] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
}

func init() { file_business_ext_proto_init() }
@@ -813,7 +958,7 @@ func file_business_ext_proto_init() {
file_common_ext_proto_init()
if !protoimpl.UnsafeEnabled {
file_business_ext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SignInReq); i {
switch v := v.(*Emoticon); i {
case 0:
return &v.state
case 1:
@@ -825,7 +970,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SignInResp); i {
switch v := v.(*EmoticonListResp); i {
case 0:
return &v.state
case 1:
@@ -837,7 +982,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CloudUploadFileReq); i {
switch v := v.(*SignInReq); i {
case 0:
return &v.state
case 1:
@@ -849,7 +994,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CloudUploadFileResp); i {
switch v := v.(*SignInResp); i {
case 0:
return &v.state
case 1:
@@ -861,7 +1006,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*User); i {
switch v := v.(*CloudUploadFileReq); i {
case 0:
return &v.state
case 1:
@@ -873,7 +1018,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetUserReq); i {
switch v := v.(*CloudUploadFileResp); i {
case 0:
return &v.state
case 1:
@@ -885,7 +1030,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetUserResp); i {
switch v := v.(*User); i {
case 0:
return &v.state
case 1:
@@ -897,7 +1042,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateUserReq); i {
switch v := v.(*GetUserReq); i {
case 0:
return &v.state
case 1:
@@ -909,7 +1054,7 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchUserReq); i {
switch v := v.(*GetUserResp); i {
case 0:
return &v.state
case 1:
@@ -921,6 +1066,30 @@ func file_business_ext_proto_init() {
}
}
file_business_ext_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateUserReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_business_ext_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchUserReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_business_ext_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchUserResp); i {
case 0:
return &v.state
@@ -939,7 +1108,7 @@ func file_business_ext_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_business_ext_proto_rawDesc,
NumEnums: 0,
NumMessages: 10,
NumMessages: 12,
NumExtensions: 0,
NumServices: 1,
},
@@ -953,6 +1122,10 @@ func file_business_ext_proto_init() {
file_business_ext_proto_depIdxs = nil
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
@@ -972,6 +1145,8 @@ type BusinessExtClient interface {
SearchUser(ctx context.Context, in *SearchUserReq, opts ...grpc.CallOption) (*SearchUserResp, error)
// 上传文件至云端
CloudUploadFile(ctx context.Context, in *CloudUploadFileReq, opts ...grpc.CallOption) (*CloudUploadFileResp, error)
// 获取表情
EmoticonList(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*EmoticonListResp, error)
}

type businessExtClient struct {
@@ -1027,6 +1202,15 @@ func (c *businessExtClient) CloudUploadFile(ctx context.Context, in *CloudUpload
return out, nil
}

func (c *businessExtClient) EmoticonList(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*EmoticonListResp, error) {
out := new(EmoticonListResp)
err := c.cc.Invoke(ctx, "/pb.BusinessExt/EmoticonList", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}

// BusinessExtServer is the server API for BusinessExt service.
// All implementations must embed UnimplementedBusinessExtServer
// for forward compatibility
@@ -1041,6 +1225,8 @@ type BusinessExtServer interface {
SearchUser(context.Context, *SearchUserReq) (*SearchUserResp, error)
// 上传文件至云端
CloudUploadFile(context.Context, *CloudUploadFileReq) (*CloudUploadFileResp, error)
// 获取表情
EmoticonList(context.Context, *Empty) (*EmoticonListResp, error)
}

// UnimplementedBusinessExtServer must be embedded to have forward compatible implementations.
@@ -1062,6 +1248,9 @@ func (UnimplementedBusinessExtServer) SearchUser(context.Context, *SearchUserReq
func (UnimplementedBusinessExtServer) CloudUploadFile(context.Context, *CloudUploadFileReq) (*CloudUploadFileResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method CloudUploadFile not implemented")
}
func (UnimplementedBusinessExtServer) EmoticonList(context.Context, *Empty) (*EmoticonListResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method EmoticonList not implemented")
}

func RegisterBusinessExtServer(s grpc.ServiceRegistrar, srv BusinessExtServer) {
s.RegisterService(&BusinessExt_ServiceDesc, srv)
@@ -1157,6 +1346,24 @@ func _BusinessExt_CloudUploadFile_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}

func _BusinessExt_EmoticonList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(BusinessExtServer).EmoticonList(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pb.BusinessExt/EmoticonList",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(BusinessExtServer).EmoticonList(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}

// BusinessExt_ServiceDesc is the grpc.ServiceDesc for BusinessExt service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -1184,6 +1391,10 @@ var BusinessExt_ServiceDesc = grpc.ServiceDesc{
MethodName: "CloudUploadFile",
Handler: _BusinessExt_CloudUploadFile_Handler,
},
{
MethodName: "EmoticonList",
Handler: _BusinessExt_EmoticonList_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "business.ext.proto",


+ 12
- 1
pkg/proto/business.ext.proto Voir le fichier

@@ -2,7 +2,7 @@ syntax = "proto3";
package pb;
option go_package = "gim/pkg/pb/";

message Empty{}
import "common.ext.proto";

service BusinessExt {
// 登录
@@ -15,8 +15,19 @@ service BusinessExt {
rpc SearchUser (SearchUserReq) returns (SearchUserResp);
// 上传文件至云端
rpc CloudUploadFile (CloudUploadFileReq) returns (CloudUploadFileResp);
// 获取表情
rpc EmoticonList (Empty) returns (EmoticonListResp);
}

message Emoticon {
string name = 1; // 名称
string img_url = 2; // 图片地址
string memo = 3; // 备注
int32 sort = 4; // 排序
}
message EmoticonListResp {
repeated Emoticon emoticons = 1;
}
message SignInReq {
string phone_number = 1; // 手机号
string code = 2; // 验证码


+ 2
- 1
pkg/urlwhitelist/urlwhitelist.go Voir le fichier

@@ -1,7 +1,8 @@
package urlwhitelist

var Business = map[string]int{
"/pb.BusinessExt/SignIn": 0,
"/pb.BusinessExt/SignIn": 0,
"/pb.BusinessExt/EmoticonList": 1,
}

var Logic = map[string]int{


+ 1
- 1
test/tcp_conn/main.go Voir le fichier

@@ -87,7 +87,7 @@ func (c *TcpClient) SignIn() {
signIn := pb.SignInInput{
UserId: c.UserId,
DeviceId: c.DeviceId,
Token: "KGDPGQAQDEXXFXFLPMHDWHJEDYTOVCSGIZNILPRP",
Token: "HBMHCHQOVQDTPUVSBBCDEWGGOVPKFRAAZGQXKJNA",
}
c.Output(pb.PackageType_PT_SIGN_IN, time.Now().UnixNano(), &signIn)
}


Chargement…
Annuler
Enregistrer