feat: implement plugin options management and enhance plugin lifecycle handling

This commit is contained in:
tt
2025-02-15 23:03:11 +08:00
parent 22ad77f052
commit 66e7278f74
9 changed files with 548 additions and 261 deletions

2
go.sum
View File

@@ -276,8 +276,6 @@ github.com/WuKongIM/crypto v0.0.0-20240416072338-b872b70b395f h1:erzPrCjuS7yvfpM
github.com/WuKongIM/crypto v0.0.0-20240416072338-b872b70b395f/go.mod h1:gS8ErzMrBY+zJfxwFFzUzR9S2jFo/FTyEVr4pedbfbA=
github.com/WuKongIM/wklog v0.0.0-20250123094253-32484fb54d05 h1:z6Zu0VFnXA/+IcNAI/G0QgvIZZlU4aF6pf/fPP780hY=
github.com/WuKongIM/wklog v0.0.0-20250123094253-32484fb54d05/go.mod h1:/juNjLcqcoW/NkNi4rxnhDvDAUo76w3qIZ4dgLkZvH0=
github.com/WuKongIM/wkrpc v0.0.0-20250204085136-fb738073a53a h1:mgHtjUNdAz5YibfOxuyIXBUj3F89jrpodceuvQ2w4OU=
github.com/WuKongIM/wkrpc v0.0.0-20250204085136-fb738073a53a/go.mod h1:V/m/6c8aNqXDvmu8NGx7HDct1Y62yQAkvJA43uEOObk=
github.com/WuKongIM/wkrpc v0.0.0-20250213045413-645e58badfbf h1:ngIAMjSPdrstBkJ0yRvmGccI2yVBGv7DlghUvsFT5t8=
github.com/WuKongIM/wkrpc v0.0.0-20250213045413-645e58badfbf/go.mod h1:V/m/6c8aNqXDvmu8NGx7HDct1Y62yQAkvJA43uEOObk=
github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw=

View File

@@ -2,7 +2,7 @@ package plugin
import (
"encoding/json"
"path"
"fmt"
"github.com/WuKongIM/WuKongIM/internal/service"
"github.com/WuKongIM/WuKongIM/internal/types/pluginproto"
@@ -30,7 +30,8 @@ func (a *api) conversationChannels(c *wkrpc.Context) {
}
// 请求对应节点的用户最近会话频道接口
forwardUrl := path.Join(leaderInfo.ApiServerAddr, "conversation", "channels")
forwardUrl := fmt.Sprintf("%s/conversation/channels", leaderInfo.ApiServerAddr)
reqBodyMap := map[string]interface{}{
"uid": req.Uid,
}
@@ -87,7 +88,7 @@ func (a *api) conversationChannels(c *wkrpc.Context) {
func (a *api) post(url string, body []byte) (*rest.Response, error) {
req := rest.Request{
Method: rest.Method("post"),
Method: rest.Post,
BaseURL: url,
Body: body,
}

View File

@@ -3,7 +3,9 @@ package plugin
import (
"context"
"fmt"
"os"
"path"
"path/filepath"
"strings"
"time"
@@ -29,11 +31,51 @@ func (a *api) pluginStart(c *wkrpc.Context) {
c.WriteErr(err)
return
}
if strings.TrimSpace(pluginInfo.No) == "" {
a.Error("plugin start failed, plugin no is empty")
c.WriteErr(fmt.Errorf("plugin no is empty"))
return
}
a.s.pluginManager.add(newPlugin(a.s, c.Conn(), pluginInfo))
a.Info("plugin start", zap.Any("pluginInfo", pluginInfo))
c.WriteOk()
sandboxDir := path.Join(a.s.sandboxDir, pluginInfo.No)
// 沙盒如果是相对路径则转换为绝对路径
if !path.IsAbs(sandboxDir) {
sandboxDir, err = filepath.Abs(sandboxDir)
if err != nil {
a.Error("plugin start failed, get abs path failed", zap.Error(err))
c.WriteErr(err)
return
}
}
// 如果沙盒目录不存在则创建
if _, err := os.Stat(sandboxDir); os.IsNotExist(err) {
err := os.MkdirAll(sandboxDir, os.ModePerm)
if err != nil {
panic(err)
}
}
startupResp := &pluginproto.StartupResp{
NodeId: options.G.Cluster.NodeId,
Success: true,
SandboxDir: sandboxDir,
}
data, err := startupResp.Marshal()
if err != nil {
a.Error("StartupResp marshal failed", zap.Error(err))
c.WriteErr(err)
return
}
c.Write(data)
}
// 插件停止
@@ -66,7 +108,7 @@ func (a *api) pluginHttpForward(c *wkrpc.Context) {
c.WriteErr(fmt.Errorf("node not found"))
return
}
pluginUrl := path.Join(node.ApiServerAddr, "plugins", forwardReq.PluginNo, forwardReq.Request.Path)
pluginUrl := fmt.Sprintf("%s/plugins/%s%s", node.ApiServerAddr, forwardReq.PluginNo, forwardReq.Request.Path)
resp, err := a.ForwardWithBody(pluginUrl, forwardReq.Request)
if err != nil {
a.Error("plugin http forward failed", zap.Error(err))

View File

@@ -0,0 +1,24 @@
package plugin
type Options struct {
Dir string // 插件目录
}
func NewOptions(opt ...Option) *Options {
opts := &Options{
Dir: "./plugindir",
}
for _, f := range opt {
f(opts)
}
return opts
}
type Option func(*Options)
func WithDir(dir string) Option {
return func(o *Options) {
o.Dir = dir
}
}

View File

@@ -2,11 +2,13 @@ package plugin
import (
"context"
"errors"
"fmt"
"io"
"log"
"net/http"
"os"
"os/exec"
"path"
"time"
@@ -24,9 +26,11 @@ type Server struct {
pluginManager *pluginManager
api *api
wklog.Log
opts *Options
sandboxDir string // 沙箱目录
}
func NewServer() *Server {
func NewServer(opts *Options) *Server {
addr, err := getUnixSocket()
if err != nil {
@@ -34,10 +38,34 @@ func NewServer() *Server {
}
rpcServer := wkrpc.New(addr)
// 如果插件目录不存在则创建
if _, err := os.Stat(opts.Dir); os.IsNotExist(err) {
err := os.MkdirAll(opts.Dir, os.ModePerm)
if err != nil {
panic(err)
}
}
// 如果沙箱目录不存在则创建
sandboxDir := path.Join(opts.Dir, "plugindata")
if _, err := os.Stat(sandboxDir); os.IsNotExist(err) {
err := os.MkdirAll(sandboxDir, os.ModePerm)
if err != nil {
panic(err)
}
}
// 插件目录权限为只读,防止插件在目录下创建文件
if err = os.Chmod(opts.Dir, 0555); err != nil {
return nil
}
s := &Server{
rpcServer: rpcServer,
opts: opts,
pluginManager: newPluginManager(),
Log: wklog.NewWKLog("plugin.server"),
sandboxDir: sandboxDir,
}
s.api = newApi(s)
return s
@@ -48,11 +76,19 @@ func (s *Server) Start() error {
return err
}
s.api.routes()
if err := s.startPlugins(); err != nil {
s.Error("start plugins error", zap.Error(err))
return err
}
return nil
}
func (s *Server) Stop() {
s.rpcServer.Stop()
s.stopPlugins()
}
func (s *Server) SetRoute(r *wkhttp.WKHttp) {
@@ -203,3 +239,85 @@ func (s *Server) handlePluginRoute(c *wkhttp.Context) {
s.Error("write response error", zap.Error(err), zap.String("plugin", pluginNo), zap.String("path", pluginPath))
}
}
// 启动插件执行文件
func (s *Server) startPlugins() error {
pluginDir := s.opts.Dir
// 获取插件目录下的所有文件
files, err := os.ReadDir(pluginDir)
if err != nil {
return err
}
for _, file := range files {
if file.IsDir() {
continue
}
// 启动插件
s.Info("Plugin start", zap.String("plugin", file.Name()))
err := s.startPluginApp(file.Name())
if err != nil {
s.Error("start plugin error", zap.Error(err))
continue
}
}
return nil
}
func (s *Server) stopPlugins() error {
pluginDir := s.opts.Dir
// 获取插件目录下的所有文件
files, err := os.ReadDir(pluginDir)
if err != nil {
return err
}
for _, file := range files {
if file.IsDir() {
continue
}
// 停止插件
err := s.stopPluginApp(file.Name())
if err != nil {
s.Error("stop plugin error", zap.Error(err))
continue
}
}
return nil
}
// 启动插件程序
func (s *Server) startPluginApp(name string) error {
cmd := exec.Command("./" + name)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Dir = s.opts.Dir
// 允许相对路径运行
if errors.Is(cmd.Err, exec.ErrDot) {
cmd.Err = nil
}
// start the process
err := cmd.Start()
if err != nil {
s.Error("starting plugin process failed", zap.Error(err), zap.String("plugin", name))
return err
}
fmt.Println("pluginPath-222->", name)
return nil
}
// 停止插件程序
func (s *Server) stopPluginApp(name string) error {
pluginPath := path.Join(s.opts.Dir, name)
cmd := exec.Command("pkill", "-f", pluginPath)
err := cmd.Run()
if err != nil {
return err
}
return nil
}

View File

@@ -224,7 +224,9 @@ func New(opts *options.Options) *Server {
s.apiServer = api.New()
// plugin server
s.pluginServer = plugin.NewServer()
s.pluginServer = plugin.NewServer(
plugin.NewOptions(plugin.WithDir(path.Join(s.opts.RootDir, "plugins"))),
)
service.PluginManager = s.pluginServer
return s
}

View File

@@ -136,3 +136,11 @@ func (c *ConversationChannelResp) Marshal() ([]byte, error) {
func (c *ConversationChannelResp) Unmarshal(data []byte) error {
return proto.Unmarshal(data, c)
}
func (s *StartupResp) Marshal() ([]byte, error) {
return proto.Marshal(s)
}
func (s *StartupResp) Unmarshal(data []byte) error {
return proto.Unmarshal(data, s)
}

View File

@@ -138,6 +138,79 @@ func (x *PluginInfo) GetGetPaths() []string {
return nil
}
// 插件启动返回
type StartupResp struct {
state protoimpl.MessageState `protogen:"open.v1"`
// 节点id
NodeId uint64 `protobuf:"varint,1,opt,name=nodeId,proto3" json:"nodeId,omitempty"`
// 是否成功
Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"`
// 错误信息
ErrMsg string `protobuf:"bytes,3,opt,name=errMsg,proto3" json:"errMsg,omitempty"`
// 沙盒路径
SandboxDir string `protobuf:"bytes,4,opt,name=sandboxDir,proto3" json:"sandboxDir,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StartupResp) Reset() {
*x = StartupResp{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StartupResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StartupResp) ProtoMessage() {}
func (x *StartupResp) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StartupResp.ProtoReflect.Descriptor instead.
func (*StartupResp) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{1}
}
func (x *StartupResp) GetNodeId() uint64 {
if x != nil {
return x.NodeId
}
return 0
}
func (x *StartupResp) GetSuccess() bool {
if x != nil {
return x.Success
}
return false
}
func (x *StartupResp) GetErrMsg() string {
if x != nil {
return x.ErrMsg
}
return ""
}
func (x *StartupResp) GetSandboxDir() string {
if x != nil {
return x.SandboxDir
}
return ""
}
type SendPacket struct {
state protoimpl.MessageState `protogen:"open.v1"`
// 发送者
@@ -154,7 +227,7 @@ type SendPacket struct {
func (x *SendPacket) Reset() {
*x = SendPacket{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[1]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -166,7 +239,7 @@ func (x *SendPacket) String() string {
func (*SendPacket) ProtoMessage() {}
func (x *SendPacket) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[1]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -179,7 +252,7 @@ func (x *SendPacket) ProtoReflect() protoreflect.Message {
// Deprecated: Use SendPacket.ProtoReflect.Descriptor instead.
func (*SendPacket) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{1}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{2}
}
func (x *SendPacket) GetFrom() string {
@@ -240,7 +313,7 @@ type Message struct {
func (x *Message) Reset() {
*x = Message{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[2]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -252,7 +325,7 @@ func (x *Message) String() string {
func (*Message) ProtoMessage() {}
func (x *Message) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[2]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -265,7 +338,7 @@ func (x *Message) ProtoReflect() protoreflect.Message {
// Deprecated: Use Message.ProtoReflect.Descriptor instead.
func (*Message) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{2}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{3}
}
func (x *Message) GetMessageId() int64 {
@@ -354,7 +427,7 @@ type MessageBatch struct {
func (x *MessageBatch) Reset() {
*x = MessageBatch{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[3]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -366,7 +439,7 @@ func (x *MessageBatch) String() string {
func (*MessageBatch) ProtoMessage() {}
func (x *MessageBatch) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[3]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -379,7 +452,7 @@ func (x *MessageBatch) ProtoReflect() protoreflect.Message {
// Deprecated: Use MessageBatch.ProtoReflect.Descriptor instead.
func (*MessageBatch) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{3}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{4}
}
func (x *MessageBatch) GetMessages() []*Message {
@@ -408,7 +481,7 @@ type HttpRequest struct {
func (x *HttpRequest) Reset() {
*x = HttpRequest{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[4]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -420,7 +493,7 @@ func (x *HttpRequest) String() string {
func (*HttpRequest) ProtoMessage() {}
func (x *HttpRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[4]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -433,7 +506,7 @@ func (x *HttpRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use HttpRequest.ProtoReflect.Descriptor instead.
func (*HttpRequest) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{4}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{5}
}
func (x *HttpRequest) GetMethod() string {
@@ -486,7 +559,7 @@ type HttpResponse struct {
func (x *HttpResponse) Reset() {
*x = HttpResponse{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[5]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -498,7 +571,7 @@ func (x *HttpResponse) String() string {
func (*HttpResponse) ProtoMessage() {}
func (x *HttpResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[5]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -511,7 +584,7 @@ func (x *HttpResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use HttpResponse.ProtoReflect.Descriptor instead.
func (*HttpResponse) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{5}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{6}
}
func (x *HttpResponse) GetStatus() int32 {
@@ -552,7 +625,7 @@ type ChannelMessageReq struct {
func (x *ChannelMessageReq) Reset() {
*x = ChannelMessageReq{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[6]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -564,7 +637,7 @@ func (x *ChannelMessageReq) String() string {
func (*ChannelMessageReq) ProtoMessage() {}
func (x *ChannelMessageReq) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[6]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -577,7 +650,7 @@ func (x *ChannelMessageReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChannelMessageReq.ProtoReflect.Descriptor instead.
func (*ChannelMessageReq) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{6}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{7}
}
func (x *ChannelMessageReq) GetChannelId() string {
@@ -617,7 +690,7 @@ type ChannelMessageBatchReq struct {
func (x *ChannelMessageBatchReq) Reset() {
*x = ChannelMessageBatchReq{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[7]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -629,7 +702,7 @@ func (x *ChannelMessageBatchReq) String() string {
func (*ChannelMessageBatchReq) ProtoMessage() {}
func (x *ChannelMessageBatchReq) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[7]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -642,7 +715,7 @@ func (x *ChannelMessageBatchReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChannelMessageBatchReq.ProtoReflect.Descriptor instead.
func (*ChannelMessageBatchReq) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{7}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{8}
}
func (x *ChannelMessageBatchReq) GetChannelMessageReqs() []*ChannelMessageReq {
@@ -671,7 +744,7 @@ type ChannelMessageResp struct {
func (x *ChannelMessageResp) Reset() {
*x = ChannelMessageResp{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[8]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -683,7 +756,7 @@ func (x *ChannelMessageResp) String() string {
func (*ChannelMessageResp) ProtoMessage() {}
func (x *ChannelMessageResp) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[8]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -696,7 +769,7 @@ func (x *ChannelMessageResp) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChannelMessageResp.ProtoReflect.Descriptor instead.
func (*ChannelMessageResp) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{8}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{9}
}
func (x *ChannelMessageResp) GetChannelId() string {
@@ -743,7 +816,7 @@ type ChannelMessageBatchResp struct {
func (x *ChannelMessageBatchResp) Reset() {
*x = ChannelMessageBatchResp{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[9]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -755,7 +828,7 @@ func (x *ChannelMessageBatchResp) String() string {
func (*ChannelMessageBatchResp) ProtoMessage() {}
func (x *ChannelMessageBatchResp) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[9]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -768,7 +841,7 @@ func (x *ChannelMessageBatchResp) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChannelMessageBatchResp.ProtoReflect.Descriptor instead.
func (*ChannelMessageBatchResp) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{9}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{10}
}
func (x *ChannelMessageBatchResp) GetChannelMessageResps() []*ChannelMessageResp {
@@ -789,7 +862,7 @@ type ClusterConfig struct {
func (x *ClusterConfig) Reset() {
*x = ClusterConfig{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[10]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -801,7 +874,7 @@ func (x *ClusterConfig) String() string {
func (*ClusterConfig) ProtoMessage() {}
func (x *ClusterConfig) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[10]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -814,7 +887,7 @@ func (x *ClusterConfig) ProtoReflect() protoreflect.Message {
// Deprecated: Use ClusterConfig.ProtoReflect.Descriptor instead.
func (*ClusterConfig) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{10}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{11}
}
func (x *ClusterConfig) GetNodes() []*Node {
@@ -844,7 +917,7 @@ type Node struct {
func (x *Node) Reset() {
*x = Node{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[11]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -856,7 +929,7 @@ func (x *Node) String() string {
func (*Node) ProtoMessage() {}
func (x *Node) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[11]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -869,7 +942,7 @@ func (x *Node) ProtoReflect() protoreflect.Message {
// Deprecated: Use Node.ProtoReflect.Descriptor instead.
func (*Node) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{11}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{12}
}
func (x *Node) GetId() uint64 {
@@ -913,7 +986,7 @@ type Slot struct {
func (x *Slot) Reset() {
*x = Slot{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[12]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -925,7 +998,7 @@ func (x *Slot) String() string {
func (*Slot) ProtoMessage() {}
func (x *Slot) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[12]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[13]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -938,7 +1011,7 @@ func (x *Slot) ProtoReflect() protoreflect.Message {
// Deprecated: Use Slot.ProtoReflect.Descriptor instead.
func (*Slot) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{12}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{13}
}
func (x *Slot) GetId() uint32 {
@@ -980,7 +1053,7 @@ type Channel struct {
func (x *Channel) Reset() {
*x = Channel{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[13]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -992,7 +1065,7 @@ func (x *Channel) String() string {
func (*Channel) ProtoMessage() {}
func (x *Channel) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[13]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[14]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1005,7 +1078,7 @@ func (x *Channel) ProtoReflect() protoreflect.Message {
// Deprecated: Use Channel.ProtoReflect.Descriptor instead.
func (*Channel) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{13}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{14}
}
func (x *Channel) GetChannelId() string {
@@ -1032,7 +1105,7 @@ type ClusterChannelBelongNodeReq struct {
func (x *ClusterChannelBelongNodeReq) Reset() {
*x = ClusterChannelBelongNodeReq{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[14]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1044,7 +1117,7 @@ func (x *ClusterChannelBelongNodeReq) String() string {
func (*ClusterChannelBelongNodeReq) ProtoMessage() {}
func (x *ClusterChannelBelongNodeReq) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[14]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[15]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1057,7 +1130,7 @@ func (x *ClusterChannelBelongNodeReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use ClusterChannelBelongNodeReq.ProtoReflect.Descriptor instead.
func (*ClusterChannelBelongNodeReq) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{14}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{15}
}
func (x *ClusterChannelBelongNodeReq) GetChannels() []*Channel {
@@ -1078,7 +1151,7 @@ type ClusterChannelBelongNodeResp struct {
func (x *ClusterChannelBelongNodeResp) Reset() {
*x = ClusterChannelBelongNodeResp{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[15]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1090,7 +1163,7 @@ func (x *ClusterChannelBelongNodeResp) String() string {
func (*ClusterChannelBelongNodeResp) ProtoMessage() {}
func (x *ClusterChannelBelongNodeResp) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[15]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[16]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1103,7 +1176,7 @@ func (x *ClusterChannelBelongNodeResp) ProtoReflect() protoreflect.Message {
// Deprecated: Use ClusterChannelBelongNodeResp.ProtoReflect.Descriptor instead.
func (*ClusterChannelBelongNodeResp) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{15}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{16}
}
func (x *ClusterChannelBelongNodeResp) GetNodeId() uint64 {
@@ -1130,7 +1203,7 @@ type ClusterChannelBelongNodeBatchResp struct {
func (x *ClusterChannelBelongNodeBatchResp) Reset() {
*x = ClusterChannelBelongNodeBatchResp{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[16]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1142,7 +1215,7 @@ func (x *ClusterChannelBelongNodeBatchResp) String() string {
func (*ClusterChannelBelongNodeBatchResp) ProtoMessage() {}
func (x *ClusterChannelBelongNodeBatchResp) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[16]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[17]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1155,7 +1228,7 @@ func (x *ClusterChannelBelongNodeBatchResp) ProtoReflect() protoreflect.Message
// Deprecated: Use ClusterChannelBelongNodeBatchResp.ProtoReflect.Descriptor instead.
func (*ClusterChannelBelongNodeBatchResp) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{16}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{17}
}
func (x *ClusterChannelBelongNodeBatchResp) GetClusterChannelBelongNodeResps() []*ClusterChannelBelongNodeResp {
@@ -1177,7 +1250,7 @@ type ForwardHttpReq struct {
func (x *ForwardHttpReq) Reset() {
*x = ForwardHttpReq{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[17]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1189,7 +1262,7 @@ func (x *ForwardHttpReq) String() string {
func (*ForwardHttpReq) ProtoMessage() {}
func (x *ForwardHttpReq) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[17]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[18]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1202,7 +1275,7 @@ func (x *ForwardHttpReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use ForwardHttpReq.ProtoReflect.Descriptor instead.
func (*ForwardHttpReq) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{17}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{18}
}
func (x *ForwardHttpReq) GetPluginNo() string {
@@ -1236,7 +1309,7 @@ type ConversationChannelReq struct {
func (x *ConversationChannelReq) Reset() {
*x = ConversationChannelReq{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[18]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1248,7 +1321,7 @@ func (x *ConversationChannelReq) String() string {
func (*ConversationChannelReq) ProtoMessage() {}
func (x *ConversationChannelReq) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[18]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[19]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1261,7 +1334,7 @@ func (x *ConversationChannelReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use ConversationChannelReq.ProtoReflect.Descriptor instead.
func (*ConversationChannelReq) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{18}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{19}
}
func (x *ConversationChannelReq) GetUid() string {
@@ -1281,7 +1354,7 @@ type ConversationChannelResp struct {
func (x *ConversationChannelResp) Reset() {
*x = ConversationChannelResp{}
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[19]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1293,7 +1366,7 @@ func (x *ConversationChannelResp) String() string {
func (*ConversationChannelResp) ProtoMessage() {}
func (x *ConversationChannelResp) ProtoReflect() protoreflect.Message {
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[19]
mi := &file_internal_types_pluginproto_plugin_proto_msgTypes[20]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1306,7 +1379,7 @@ func (x *ConversationChannelResp) ProtoReflect() protoreflect.Message {
// Deprecated: Use ConversationChannelResp.ProtoReflect.Descriptor instead.
func (*ConversationChannelResp) Descriptor() ([]byte, []int) {
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{19}
return file_internal_types_pluginproto_plugin_proto_rawDescGZIP(), []int{20}
}
func (x *ConversationChannelResp) GetChannels() []*Channel {
@@ -1338,169 +1411,177 @@ var file_internal_types_pluginproto_plugin_proto_rawDesc = []byte{
0x79, 0x6e, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73,
0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68,
0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x09, 0x20,
0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x7a, 0x0a,
0x0a, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66,
0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12,
0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x77, 0x0a,
0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06,
0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x6f,
0x64, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18,
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x16,
0x0a, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f,
0x78, 0x44, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x61, 0x6e, 0x64,
0x62, 0x6f, 0x78, 0x44, 0x69, 0x72, 0x22, 0x7a, 0x0a, 0x0a, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61,
0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e,
0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c,
0x6f, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f,
0x61, 0x64, 0x22, 0xc5, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c,
0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a,
0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b,
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x12, 0x1a,
0x0a, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74,
0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73,
0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x69, 0x6d,
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x07,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e,
0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63,
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f,
0x70, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63,
0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70,
0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xbf, 0x02, 0x0a,
0x0b, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3f, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64,
0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x6c, 0x75, 0x67,
0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x05, 0x71, 0x75, 0x65,
0x72, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69,
0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x71,
0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64,
0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb8,
0x01, 0x0a, 0x0c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65,
0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69,
0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64,
0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x3a, 0x0a,
0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, 0x0a, 0x11, 0x43, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12,
0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a,
0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01,
0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12,
0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c,
0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc5, 0x02, 0x0a, 0x07, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65,
0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x53, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67,
0x4e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
0x4d, 0x73, 0x67, 0x4e, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e,
0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e,
0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x71, 0x18, 0x05,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x71, 0x12,
0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a,
0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f,
0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x08,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12,
0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70,
0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f,
0x61, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61,
0x64, 0x22, 0x40, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, 0x63,
0x68, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x73, 0x22, 0xbf, 0x02, 0x0a, 0x0b, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 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, 0x70,
0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12,
0x3f, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x25, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48,
0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65,
0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
0x12, 0x39, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x23, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74,
0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62,
0x6f, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a,
0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x51,
0x75, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb8, 0x01, 0x0a, 0x0c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40,
0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74,
0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65,
0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04,
0x62, 0x6f, 0x64, 0x79, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
0x22, 0x93, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53,
0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d,
0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22,
0x68, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x12, 0x4e, 0x0a, 0x12, 0x63, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x52, 0x65, 0x71, 0x52, 0x12, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x12, 0x43, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70,
0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x20,
0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65,
0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69,
0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a,
0x13, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
0x65, 0x73, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6c, 0x75,
0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x52, 0x13, 0x63, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x73,
0x22, 0x61, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x12, 0x27, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x11, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e,
0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x6c,
0x6f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6c, 0x75, 0x67,
0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x05, 0x73, 0x6c,
0x6f, 0x74, 0x73, 0x22, 0x76, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x24, 0x0a,
0x0d, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41,
0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20,
0x01, 0x28, 0x08, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x5e, 0x0a, 0x04, 0x53,
0x6c, 0x6f, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20,
0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74,
0x65, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x12,
0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
0x04, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x49, 0x0a, 0x07, 0x43,
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e,
0x65, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54,
0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e,
0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52,
0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x71,
0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x68, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71,
0x12, 0x4e, 0x0a, 0x12, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x52, 0x65, 0x71, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70,
0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e,
0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x52, 0x12, 0x63, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x73,
0x22, 0xc6, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e,
0x65, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e,
0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e,
0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04,
0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65,
0x71, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67,
0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x43, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68,
0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65,
0x73, 0x70, 0x52, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x73, 0x22, 0x61, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65,
0x73, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x11, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53,
0x6c, 0x6f, 0x74, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x74, 0x73, 0x22, 0x76, 0x0a, 0x04, 0x4e, 0x6f,
0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02,
0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64,
0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x41, 0x64, 0x64, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65,
0x72, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69,
0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e,
0x6c, 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69,
0x6e, 0x65, 0x22, 0x5e, 0x0a, 0x04, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65,
0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64,
0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x73, 0x22, 0x49, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1c, 0x0a,
0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63,
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x22, 0x4f, 0x0a,
0x1b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42,
0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x08,
0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14,
0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x22, 0x68,
0x0a, 0x1c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16,
0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06,
0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69,
0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08,
0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x21, 0x43, 0x6c, 0x75,
0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x22, 0x4f, 0x0a, 0x1b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e, 0x6f,
0x64, 0x65, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63,
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x22, 0x68, 0x0a, 0x1c, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e,
0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12,
0x30, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x73, 0x22, 0x94, 0x01, 0x0a, 0x21, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x61,
0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6f, 0x0a, 0x1d, 0x63, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e,
0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29,
0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x65, 0x6c, 0x6f, 0x6e,
0x67, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6f,
0x0a, 0x1d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e,
0x65, 0x6c, 0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70,
0x52, 0x1d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x73, 0x22,
0x7c, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65,
0x71, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x6f, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x6f, 0x12, 0x1a, 0x0a,
0x08, 0x74, 0x6f, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
0x08, 0x74, 0x6f, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x07, 0x72, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x6c, 0x75,
0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2a, 0x0a,
0x16, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x17, 0x43, 0x6f, 0x6e,
0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x42, 0x10, 0x5a, 0x0e, 0x2e, 0x2f, 0x3b, 0x70, 0x6c, 0x75,
0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x67, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x52, 0x1d, 0x63, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x4e,
0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x73, 0x22, 0x7c, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x77,
0x61, 0x72, 0x64, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c,
0x75, 0x67, 0x69, 0x6e, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c,
0x75, 0x67, 0x69, 0x6e, 0x4e, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x6f, 0x4e, 0x6f, 0x64, 0x65,
0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x6f, 0x4e, 0x6f, 0x64, 0x65,
0x49, 0x64, 0x12, 0x32, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2a, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71,
0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
0x69, 0x64, 0x22, 0x4b, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a,
0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x14, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x42,
0x10, 0x5a, 0x0e, 0x2e, 0x2f, 0x3b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1515,47 +1596,48 @@ func file_internal_types_pluginproto_plugin_proto_rawDescGZIP() []byte {
return file_internal_types_pluginproto_plugin_proto_rawDescData
}
var file_internal_types_pluginproto_plugin_proto_msgTypes = make([]protoimpl.MessageInfo, 23)
var file_internal_types_pluginproto_plugin_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
var file_internal_types_pluginproto_plugin_proto_goTypes = []any{
(*PluginInfo)(nil), // 0: pluginproto.PluginInfo
(*SendPacket)(nil), // 1: pluginproto.SendPacket
(*Message)(nil), // 2: pluginproto.Message
(*MessageBatch)(nil), // 3: pluginproto.MessageBatch
(*HttpRequest)(nil), // 4: pluginproto.HttpRequest
(*HttpResponse)(nil), // 5: pluginproto.HttpResponse
(*ChannelMessageReq)(nil), // 6: pluginproto.ChannelMessageReq
(*ChannelMessageBatchReq)(nil), // 7: pluginproto.ChannelMessageBatchReq
(*ChannelMessageResp)(nil), // 8: pluginproto.ChannelMessageResp
(*ChannelMessageBatchResp)(nil), // 9: pluginproto.ChannelMessageBatchResp
(*ClusterConfig)(nil), // 10: pluginproto.ClusterConfig
(*Node)(nil), // 11: pluginproto.Node
(*Slot)(nil), // 12: pluginproto.Slot
(*Channel)(nil), // 13: pluginproto.Channel
(*ClusterChannelBelongNodeReq)(nil), // 14: pluginproto.ClusterChannelBelongNodeReq
(*ClusterChannelBelongNodeResp)(nil), // 15: pluginproto.ClusterChannelBelongNodeResp
(*ClusterChannelBelongNodeBatchResp)(nil), // 16: pluginproto.ClusterChannelBelongNodeBatchResp
(*ForwardHttpReq)(nil), // 17: pluginproto.ForwardHttpReq
(*ConversationChannelReq)(nil), // 18: pluginproto.ConversationChannelReq
(*ConversationChannelResp)(nil), // 19: pluginproto.ConversationChannelResp
nil, // 20: pluginproto.HttpRequest.HeadersEntry
nil, // 21: pluginproto.HttpRequest.QueryEntry
nil, // 22: pluginproto.HttpResponse.HeadersEntry
(*StartupResp)(nil), // 1: pluginproto.StartupResp
(*SendPacket)(nil), // 2: pluginproto.SendPacket
(*Message)(nil), // 3: pluginproto.Message
(*MessageBatch)(nil), // 4: pluginproto.MessageBatch
(*HttpRequest)(nil), // 5: pluginproto.HttpRequest
(*HttpResponse)(nil), // 6: pluginproto.HttpResponse
(*ChannelMessageReq)(nil), // 7: pluginproto.ChannelMessageReq
(*ChannelMessageBatchReq)(nil), // 8: pluginproto.ChannelMessageBatchReq
(*ChannelMessageResp)(nil), // 9: pluginproto.ChannelMessageResp
(*ChannelMessageBatchResp)(nil), // 10: pluginproto.ChannelMessageBatchResp
(*ClusterConfig)(nil), // 11: pluginproto.ClusterConfig
(*Node)(nil), // 12: pluginproto.Node
(*Slot)(nil), // 13: pluginproto.Slot
(*Channel)(nil), // 14: pluginproto.Channel
(*ClusterChannelBelongNodeReq)(nil), // 15: pluginproto.ClusterChannelBelongNodeReq
(*ClusterChannelBelongNodeResp)(nil), // 16: pluginproto.ClusterChannelBelongNodeResp
(*ClusterChannelBelongNodeBatchResp)(nil), // 17: pluginproto.ClusterChannelBelongNodeBatchResp
(*ForwardHttpReq)(nil), // 18: pluginproto.ForwardHttpReq
(*ConversationChannelReq)(nil), // 19: pluginproto.ConversationChannelReq
(*ConversationChannelResp)(nil), // 20: pluginproto.ConversationChannelResp
nil, // 21: pluginproto.HttpRequest.HeadersEntry
nil, // 22: pluginproto.HttpRequest.QueryEntry
nil, // 23: pluginproto.HttpResponse.HeadersEntry
}
var file_internal_types_pluginproto_plugin_proto_depIdxs = []int32{
2, // 0: pluginproto.MessageBatch.messages:type_name -> pluginproto.Message
20, // 1: pluginproto.HttpRequest.headers:type_name -> pluginproto.HttpRequest.HeadersEntry
21, // 2: pluginproto.HttpRequest.query:type_name -> pluginproto.HttpRequest.QueryEntry
22, // 3: pluginproto.HttpResponse.headers:type_name -> pluginproto.HttpResponse.HeadersEntry
6, // 4: pluginproto.ChannelMessageBatchReq.channelMessageReqs:type_name -> pluginproto.ChannelMessageReq
2, // 5: pluginproto.ChannelMessageResp.messages:type_name -> pluginproto.Message
8, // 6: pluginproto.ChannelMessageBatchResp.channelMessageResps:type_name -> pluginproto.ChannelMessageResp
11, // 7: pluginproto.ClusterConfig.nodes:type_name -> pluginproto.Node
12, // 8: pluginproto.ClusterConfig.slots:type_name -> pluginproto.Slot
13, // 9: pluginproto.ClusterChannelBelongNodeReq.channels:type_name -> pluginproto.Channel
13, // 10: pluginproto.ClusterChannelBelongNodeResp.channels:type_name -> pluginproto.Channel
15, // 11: pluginproto.ClusterChannelBelongNodeBatchResp.clusterChannelBelongNodeResps:type_name -> pluginproto.ClusterChannelBelongNodeResp
4, // 12: pluginproto.ForwardHttpReq.request:type_name -> pluginproto.HttpRequest
13, // 13: pluginproto.ConversationChannelResp.channels:type_name -> pluginproto.Channel
3, // 0: pluginproto.MessageBatch.messages:type_name -> pluginproto.Message
21, // 1: pluginproto.HttpRequest.headers:type_name -> pluginproto.HttpRequest.HeadersEntry
22, // 2: pluginproto.HttpRequest.query:type_name -> pluginproto.HttpRequest.QueryEntry
23, // 3: pluginproto.HttpResponse.headers:type_name -> pluginproto.HttpResponse.HeadersEntry
7, // 4: pluginproto.ChannelMessageBatchReq.channelMessageReqs:type_name -> pluginproto.ChannelMessageReq
3, // 5: pluginproto.ChannelMessageResp.messages:type_name -> pluginproto.Message
9, // 6: pluginproto.ChannelMessageBatchResp.channelMessageResps:type_name -> pluginproto.ChannelMessageResp
12, // 7: pluginproto.ClusterConfig.nodes:type_name -> pluginproto.Node
13, // 8: pluginproto.ClusterConfig.slots:type_name -> pluginproto.Slot
14, // 9: pluginproto.ClusterChannelBelongNodeReq.channels:type_name -> pluginproto.Channel
14, // 10: pluginproto.ClusterChannelBelongNodeResp.channels:type_name -> pluginproto.Channel
16, // 11: pluginproto.ClusterChannelBelongNodeBatchResp.clusterChannelBelongNodeResps:type_name -> pluginproto.ClusterChannelBelongNodeResp
5, // 12: pluginproto.ForwardHttpReq.request:type_name -> pluginproto.HttpRequest
14, // 13: pluginproto.ConversationChannelResp.channels:type_name -> pluginproto.Channel
14, // [14:14] is the sub-list for method output_type
14, // [14:14] is the sub-list for method input_type
14, // [14:14] is the sub-list for extension type_name
@@ -1574,7 +1656,7 @@ func file_internal_types_pluginproto_plugin_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_internal_types_pluginproto_plugin_proto_rawDesc,
NumEnums: 0,
NumMessages: 23,
NumMessages: 24,
NumExtensions: 0,
NumServices: 0,
},

View File

@@ -27,6 +27,18 @@ message PluginInfo {
repeated string getPaths = 9;
}
// 插件启动返回
message StartupResp {
// 节点id
uint64 nodeId = 1;
// 是否成功
bool success = 2;
// 错误信息
string errMsg = 3;
// 沙盒路径
string sandboxDir = 4;
}
message SendPacket {
// 发送者
string from = 1;