From 1b85ffe0b53f755457ffa626602e87dc69306763 Mon Sep 17 00:00:00 2001 From: DengBiao <2319963317@qq.com> Date: Fri, 2 Dec 2022 19:35:01 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E7=A4=BC=E7=89=A9=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/business/api/business_ext.go | 14 + internal/business/comm/db/db_emoticon.go | 20 + internal/business/comm/db/model/emoticon.go | 28 + .../message/service/emoticon_service.go | 18 + pkg/pb/business.ext.pb.go | 513 ++++++++++++------ pkg/proto/business.ext.proto | 13 +- pkg/urlwhitelist/urlwhitelist.go | 3 +- test/tcp_conn/main.go | 2 +- 8 files changed, 457 insertions(+), 154 deletions(-) create mode 100644 internal/business/comm/db/db_emoticon.go create mode 100644 internal/business/comm/db/model/emoticon.go create mode 100644 internal/logic/domain/message/service/emoticon_service.go diff --git a/internal/business/api/business_ext.go b/internal/business/api/business_ext.go index 1cc896c..178003e 100644 --- a/internal/business/api/business_ext.go +++ b/internal/business/api/business_ext.go @@ -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 { diff --git a/internal/business/comm/db/db_emoticon.go b/internal/business/comm/db/db_emoticon.go new file mode 100644 index 0000000..bf91df2 --- /dev/null +++ b/internal/business/comm/db/db_emoticon.go @@ -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 +} diff --git a/internal/business/comm/db/model/emoticon.go b/internal/business/comm/db/model/emoticon.go new file mode 100644 index 0000000..aa24cc3 --- /dev/null +++ b/internal/business/comm/db/model/emoticon.go @@ -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), + } +} diff --git a/internal/logic/domain/message/service/emoticon_service.go b/internal/logic/domain/message/service/emoticon_service.go new file mode 100644 index 0000000..e16e13f --- /dev/null +++ b/internal/logic/domain/message/service/emoticon_service.go @@ -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 +} diff --git a/pkg/pb/business.ext.pb.go b/pkg/pb/business.ext.pb.go index 083b0d1..fd217fc 100644 --- a/pkg/pb/business.ext.pb.go +++ b/pkg/pb/business.ext.pb.go @@ -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", diff --git a/pkg/proto/business.ext.proto b/pkg/proto/business.ext.proto index bc01a31..4454e03 100644 --- a/pkg/proto/business.ext.proto +++ b/pkg/proto/business.ext.proto @@ -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; // 验证码 diff --git a/pkg/urlwhitelist/urlwhitelist.go b/pkg/urlwhitelist/urlwhitelist.go index a34c9a2..25f755f 100644 --- a/pkg/urlwhitelist/urlwhitelist.go +++ b/pkg/urlwhitelist/urlwhitelist.go @@ -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{ diff --git a/test/tcp_conn/main.go b/test/tcp_conn/main.go index 5fb6176..427eb68 100644 --- a/test/tcp_conn/main.go +++ b/test/tcp_conn/main.go @@ -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) }