protobuf changes

This commit is contained in:
Daniel 2024-10-19 14:14:15 -04:00
parent 943e3ae2ac
commit acb7d44657
5 changed files with 380 additions and 259 deletions

View file

@ -12,6 +12,7 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
) )
type Client interface { type Client interface {
@ -35,11 +36,15 @@ type client struct {
nexus *Nexus nexus *Nexus
} }
type ToClient interface {
protoreflect.ProtoMessage
}
type Connection interface { type Connection interface {
io.Closer io.Closer
CloseCh() CloseCh()
Send(*pb.Message) (closed bool) Send(ToClient) (closed bool)
} }
func (n *Nexus) NewClient(conn Connection) Client { func (n *Nexus) NewClient(conn Connection) Client {

View file

@ -13,7 +13,25 @@ import (
"google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/structpb"
) )
type CommandIDKeyT int64
const CommandIDKey CommandIDKeyT = 0
func CtxWithCID(ctx context.Context, cmd *pb.Command) context.Context {
return context.WithValue(ctx, CommandIDKey, cmd.CommandId)
}
func CommandID(ctx context.Context) *int64 {
id, has := ctx.Value(CommandIDKey).(*int64)
if !has {
return nil
}
return id
}
func (c *client) HandleCommand(ctx context.Context, cmd *pb.Command) { func (c *client) HandleCommand(ctx context.Context, cmd *pb.Command) {
ctx = CtxWithCID(ctx, cmd)
var err error var err error
switch cc := cmd.Command.(type) { switch cc := cmd.Command.(type) {
case *pb.Command_LiveCommand: case *pb.Command_LiveCommand:
@ -77,8 +95,8 @@ func (c *client) Talkgroup(ctx context.Context, tg *pb.Talkgroup) error {
SystemName: tgi.SystemName, SystemName: tgi.SystemName,
} }
c.Send(&pb.Message{ c.Send(&pb.Response{
ToClientMessage: &pb.Message_TgInfo{ CommandResponse: &pb.Response_TgInfo{
TgInfo: resp, TgInfo: resp,
}, },
}) })

View file

@ -7,7 +7,6 @@ import (
"time" "time"
"dynatron.me/x/stillbox/pkg/gordio/database" "dynatron.me/x/stillbox/pkg/gordio/database"
"dynatron.me/x/stillbox/pkg/pb"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
@ -38,10 +37,10 @@ func newWsManager(r Registry) *wsManager {
type wsConn struct { type wsConn struct {
*websocket.Conn *websocket.Conn
out chan *pb.Message out chan ToClient
} }
func (w *wsConn) Send(msg *pb.Message) (closed bool) { func (w *wsConn) Send(msg ToClient) (closed bool) {
select { select {
case w.out <- msg: case w.out <- msg:
default: default:
@ -56,7 +55,7 @@ func (w *wsConn) Send(msg *pb.Message) (closed bool) {
func newWsConn(c *websocket.Conn) *wsConn { func newWsConn(c *websocket.Conn) *wsConn {
wc := &wsConn{ wc := &wsConn{
Conn: c, Conn: c,
out: make(chan *pb.Message, qSize), out: make(chan ToClient, qSize),
} }
return wc return wc
@ -149,7 +148,7 @@ func (conn *wsConn) writePump() {
return return
} }
conn.writeMessage(w, msg) conn.writeToClient(w, msg)
if err := w.Close(); err != nil { if err := w.Close(); err != nil {
log.Debug().Err(err).Str("conn", conn.RemoteAddr().String()).Msg("close error") log.Debug().Err(err).Str("conn", conn.RemoteAddr().String()).Msg("close error")
@ -168,8 +167,8 @@ func (conn *wsConn) writePump() {
} }
} }
func (conn *wsConn) writeMessage(w io.WriteCloser, msg *pb.Message) { func (conn *wsConn) writeToClient(w io.WriteCloser, msg ToClient) {
packWrite := func(msg *pb.Message) { packWrite := func(msg ToClient) {
packed, err := proto.Marshal(msg) packed, err := proto.Marshal(msg)
if err != nil { if err != nil {
log.Error().Err(err).Msg("pack message") log.Error().Err(err).Msg("pack message")

View file

@ -79,7 +79,6 @@ type Message struct {
// Types that are assignable to ToClientMessage: // Types that are assignable to ToClientMessage:
// //
// *Message_Call // *Message_Call
// *Message_TgInfo
// *Message_Notification // *Message_Notification
// *Message_Popup // *Message_Popup
// *Message_Error // *Message_Error
@ -133,13 +132,6 @@ func (x *Message) GetCall() *Call {
return nil return nil
} }
func (x *Message) GetTgInfo() *TalkgroupInfo {
if x, ok := x.GetToClientMessage().(*Message_TgInfo); ok {
return x.TgInfo
}
return nil
}
func (x *Message) GetNotification() *Notification { func (x *Message) GetNotification() *Notification {
if x, ok := x.GetToClientMessage().(*Message_Notification); ok { if x, ok := x.GetToClientMessage().(*Message_Notification); ok {
return x.Notification return x.Notification
@ -176,30 +168,24 @@ type Message_Call struct {
Call *Call `protobuf:"bytes,1,opt,name=call,proto3,oneof"` Call *Call `protobuf:"bytes,1,opt,name=call,proto3,oneof"`
} }
type Message_TgInfo struct {
TgInfo *TalkgroupInfo `protobuf:"bytes,2,opt,name=tg_info,json=tgInfo,proto3,oneof"`
}
type Message_Notification struct { type Message_Notification struct {
Notification *Notification `protobuf:"bytes,3,opt,name=notification,proto3,oneof"` Notification *Notification `protobuf:"bytes,2,opt,name=notification,proto3,oneof"`
} }
type Message_Popup struct { type Message_Popup struct {
Popup *UserPopup `protobuf:"bytes,4,opt,name=popup,proto3,oneof"` Popup *UserPopup `protobuf:"bytes,3,opt,name=popup,proto3,oneof"`
} }
type Message_Error struct { type Message_Error struct {
Error *Error `protobuf:"bytes,5,opt,name=error,proto3,oneof"` Error *Error `protobuf:"bytes,4,opt,name=error,proto3,oneof"`
} }
type Message_Hello struct { type Message_Hello struct {
Hello *Hello `protobuf:"bytes,6,opt,name=hello,proto3,oneof"` Hello *Hello `protobuf:"bytes,5,opt,name=hello,proto3,oneof"`
} }
func (*Message_Call) isMessage_ToClientMessage() {} func (*Message_Call) isMessage_ToClientMessage() {}
func (*Message_TgInfo) isMessage_ToClientMessage() {}
func (*Message_Notification) isMessage_ToClientMessage() {} func (*Message_Notification) isMessage_ToClientMessage() {}
func (*Message_Popup) isMessage_ToClientMessage() {} func (*Message_Popup) isMessage_ToClientMessage() {}
@ -208,6 +194,81 @@ func (*Message_Error) isMessage_ToClientMessage() {}
func (*Message_Hello) isMessage_ToClientMessage() {} func (*Message_Hello) isMessage_ToClientMessage() {}
type Response struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
CommandId *int64 `protobuf:"varint,1,opt,name=command_id,json=commandId,proto3,oneof" json:"command_id,omitempty"`
// Types that are assignable to CommandResponse:
//
// *Response_TgInfo
CommandResponse isResponse_CommandResponse `protobuf_oneof:"command_response"`
}
func (x *Response) Reset() {
*x = Response{}
if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Response) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Response) ProtoMessage() {}
func (x *Response) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_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 Response.ProtoReflect.Descriptor instead.
func (*Response) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{1}
}
func (x *Response) GetCommandId() int64 {
if x != nil && x.CommandId != nil {
return *x.CommandId
}
return 0
}
func (m *Response) GetCommandResponse() isResponse_CommandResponse {
if m != nil {
return m.CommandResponse
}
return nil
}
func (x *Response) GetTgInfo() *TalkgroupInfo {
if x, ok := x.GetCommandResponse().(*Response_TgInfo); ok {
return x.TgInfo
}
return nil
}
type isResponse_CommandResponse interface {
isResponse_CommandResponse()
}
type Response_TgInfo struct {
TgInfo *TalkgroupInfo `protobuf:"bytes,2,opt,name=tg_info,json=tgInfo,proto3,oneof"`
}
func (*Response_TgInfo) isResponse_CommandResponse() {}
type Call struct { type Call struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -230,7 +291,7 @@ type Call struct {
func (x *Call) Reset() { func (x *Call) Reset() {
*x = Call{} *x = Call{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[1] mi := &file_stillbox_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -243,7 +304,7 @@ func (x *Call) String() string {
func (*Call) ProtoMessage() {} func (*Call) ProtoMessage() {}
func (x *Call) ProtoReflect() protoreflect.Message { func (x *Call) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[1] mi := &file_stillbox_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -256,7 +317,7 @@ func (x *Call) ProtoReflect() protoreflect.Message {
// Deprecated: Use Call.ProtoReflect.Descriptor instead. // Deprecated: Use Call.ProtoReflect.Descriptor instead.
func (*Call) Descriptor() ([]byte, []int) { func (*Call) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{1} return file_stillbox_proto_rawDescGZIP(), []int{2}
} }
func (x *Call) GetAudioName() string { func (x *Call) GetAudioName() string {
@ -354,7 +415,7 @@ type Hello struct {
func (x *Hello) Reset() { func (x *Hello) Reset() {
*x = Hello{} *x = Hello{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[2] mi := &file_stillbox_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -367,7 +428,7 @@ func (x *Hello) String() string {
func (*Hello) ProtoMessage() {} func (*Hello) ProtoMessage() {}
func (x *Hello) ProtoReflect() protoreflect.Message { func (x *Hello) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[2] mi := &file_stillbox_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -380,7 +441,7 @@ func (x *Hello) ProtoReflect() protoreflect.Message {
// Deprecated: Use Hello.ProtoReflect.Descriptor instead. // Deprecated: Use Hello.ProtoReflect.Descriptor instead.
func (*Hello) Descriptor() ([]byte, []int) { func (*Hello) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{2} return file_stillbox_proto_rawDescGZIP(), []int{3}
} }
func (x *Hello) GetVersion() *Version { func (x *Hello) GetVersion() *Version {
@ -401,7 +462,7 @@ type UserPopup struct {
func (x *UserPopup) Reset() { func (x *UserPopup) Reset() {
*x = UserPopup{} *x = UserPopup{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[3] mi := &file_stillbox_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -414,7 +475,7 @@ func (x *UserPopup) String() string {
func (*UserPopup) ProtoMessage() {} func (*UserPopup) ProtoMessage() {}
func (x *UserPopup) ProtoReflect() protoreflect.Message { func (x *UserPopup) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[3] mi := &file_stillbox_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -427,7 +488,7 @@ func (x *UserPopup) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserPopup.ProtoReflect.Descriptor instead. // Deprecated: Use UserPopup.ProtoReflect.Descriptor instead.
func (*UserPopup) Descriptor() ([]byte, []int) { func (*UserPopup) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{3} return file_stillbox_proto_rawDescGZIP(), []int{4}
} }
func (x *UserPopup) GetMsg() string { func (x *UserPopup) GetMsg() string {
@ -449,7 +510,7 @@ type Error struct {
func (x *Error) Reset() { func (x *Error) Reset() {
*x = Error{} *x = Error{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[4] mi := &file_stillbox_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -462,7 +523,7 @@ func (x *Error) String() string {
func (*Error) ProtoMessage() {} func (*Error) ProtoMessage() {}
func (x *Error) ProtoReflect() protoreflect.Message { func (x *Error) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[4] mi := &file_stillbox_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -475,7 +536,7 @@ func (x *Error) ProtoReflect() protoreflect.Message {
// Deprecated: Use Error.ProtoReflect.Descriptor instead. // Deprecated: Use Error.ProtoReflect.Descriptor instead.
func (*Error) Descriptor() ([]byte, []int) { func (*Error) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{4} return file_stillbox_proto_rawDescGZIP(), []int{5}
} }
func (x *Error) GetError() string { func (x *Error) GetError() string {
@ -505,7 +566,7 @@ type Notification struct {
func (x *Notification) Reset() { func (x *Notification) Reset() {
*x = Notification{} *x = Notification{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[5] mi := &file_stillbox_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -518,7 +579,7 @@ func (x *Notification) String() string {
func (*Notification) ProtoMessage() {} func (*Notification) ProtoMessage() {}
func (x *Notification) ProtoReflect() protoreflect.Message { func (x *Notification) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[5] mi := &file_stillbox_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -531,7 +592,7 @@ func (x *Notification) ProtoReflect() protoreflect.Message {
// Deprecated: Use Notification.ProtoReflect.Descriptor instead. // Deprecated: Use Notification.ProtoReflect.Descriptor instead.
func (*Notification) Descriptor() ([]byte, []int) { func (*Notification) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{5} return file_stillbox_proto_rawDescGZIP(), []int{6}
} }
func (x *Notification) GetDateTime() *timestamppb.Timestamp { func (x *Notification) GetDateTime() *timestamppb.Timestamp {
@ -560,6 +621,7 @@ type Command struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
CommandId *int64 `protobuf:"varint,1,opt,name=command_id,json=commandId,proto3,oneof" json:"command_id,omitempty"`
// Types that are assignable to Command: // Types that are assignable to Command:
// //
// *Command_LiveCommand // *Command_LiveCommand
@ -571,7 +633,7 @@ type Command struct {
func (x *Command) Reset() { func (x *Command) Reset() {
*x = Command{} *x = Command{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[6] mi := &file_stillbox_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -584,7 +646,7 @@ func (x *Command) String() string {
func (*Command) ProtoMessage() {} func (*Command) ProtoMessage() {}
func (x *Command) ProtoReflect() protoreflect.Message { func (x *Command) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[6] mi := &file_stillbox_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -597,7 +659,14 @@ func (x *Command) ProtoReflect() protoreflect.Message {
// Deprecated: Use Command.ProtoReflect.Descriptor instead. // Deprecated: Use Command.ProtoReflect.Descriptor instead.
func (*Command) Descriptor() ([]byte, []int) { func (*Command) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{6} return file_stillbox_proto_rawDescGZIP(), []int{7}
}
func (x *Command) GetCommandId() int64 {
if x != nil && x.CommandId != nil {
return *x.CommandId
}
return 0
} }
func (m *Command) GetCommand() isCommand_Command { func (m *Command) GetCommand() isCommand_Command {
@ -633,15 +702,15 @@ type isCommand_Command interface {
} }
type Command_LiveCommand struct { type Command_LiveCommand struct {
LiveCommand *Live `protobuf:"bytes,1,opt,name=live_command,json=liveCommand,proto3,oneof"` LiveCommand *Live `protobuf:"bytes,2,opt,name=live_command,json=liveCommand,proto3,oneof"`
} }
type Command_SearchCommand struct { type Command_SearchCommand struct {
SearchCommand *Search `protobuf:"bytes,2,opt,name=search_command,json=searchCommand,proto3,oneof"` SearchCommand *Search `protobuf:"bytes,3,opt,name=search_command,json=searchCommand,proto3,oneof"`
} }
type Command_TgCommand struct { type Command_TgCommand struct {
TgCommand *Talkgroup `protobuf:"bytes,3,opt,name=tg_command,json=tgCommand,proto3,oneof"` TgCommand *Talkgroup `protobuf:"bytes,4,opt,name=tg_command,json=tgCommand,proto3,oneof"`
} }
func (*Command_LiveCommand) isCommand_Command() {} func (*Command_LiveCommand) isCommand_Command() {}
@ -669,7 +738,7 @@ type TalkgroupInfo struct {
func (x *TalkgroupInfo) Reset() { func (x *TalkgroupInfo) Reset() {
*x = TalkgroupInfo{} *x = TalkgroupInfo{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[7] mi := &file_stillbox_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -682,7 +751,7 @@ func (x *TalkgroupInfo) String() string {
func (*TalkgroupInfo) ProtoMessage() {} func (*TalkgroupInfo) ProtoMessage() {}
func (x *TalkgroupInfo) ProtoReflect() protoreflect.Message { func (x *TalkgroupInfo) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[7] mi := &file_stillbox_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -695,7 +764,7 @@ func (x *TalkgroupInfo) ProtoReflect() protoreflect.Message {
// Deprecated: Use TalkgroupInfo.ProtoReflect.Descriptor instead. // Deprecated: Use TalkgroupInfo.ProtoReflect.Descriptor instead.
func (*TalkgroupInfo) Descriptor() ([]byte, []int) { func (*TalkgroupInfo) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{7} return file_stillbox_proto_rawDescGZIP(), []int{8}
} }
func (x *TalkgroupInfo) GetTg() *Talkgroup { func (x *TalkgroupInfo) GetTg() *Talkgroup {
@ -773,7 +842,7 @@ type Live struct {
func (x *Live) Reset() { func (x *Live) Reset() {
*x = Live{} *x = Live{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[8] mi := &file_stillbox_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -786,7 +855,7 @@ func (x *Live) String() string {
func (*Live) ProtoMessage() {} func (*Live) ProtoMessage() {}
func (x *Live) ProtoReflect() protoreflect.Message { func (x *Live) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[8] mi := &file_stillbox_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -799,7 +868,7 @@ func (x *Live) ProtoReflect() protoreflect.Message {
// Deprecated: Use Live.ProtoReflect.Descriptor instead. // Deprecated: Use Live.ProtoReflect.Descriptor instead.
func (*Live) Descriptor() ([]byte, []int) { func (*Live) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{8} return file_stillbox_proto_rawDescGZIP(), []int{9}
} }
func (x *Live) GetState() LiveState { func (x *Live) GetState() LiveState {
@ -828,7 +897,7 @@ type Talkgroup struct {
func (x *Talkgroup) Reset() { func (x *Talkgroup) Reset() {
*x = Talkgroup{} *x = Talkgroup{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[9] mi := &file_stillbox_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -841,7 +910,7 @@ func (x *Talkgroup) String() string {
func (*Talkgroup) ProtoMessage() {} func (*Talkgroup) ProtoMessage() {}
func (x *Talkgroup) ProtoReflect() protoreflect.Message { func (x *Talkgroup) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[9] mi := &file_stillbox_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -854,7 +923,7 @@ func (x *Talkgroup) ProtoReflect() protoreflect.Message {
// Deprecated: Use Talkgroup.ProtoReflect.Descriptor instead. // Deprecated: Use Talkgroup.ProtoReflect.Descriptor instead.
func (*Talkgroup) Descriptor() ([]byte, []int) { func (*Talkgroup) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{9} return file_stillbox_proto_rawDescGZIP(), []int{10}
} }
func (x *Talkgroup) GetSystem() int32 { func (x *Talkgroup) GetSystem() int32 {
@ -886,7 +955,7 @@ type Filter struct {
func (x *Filter) Reset() { func (x *Filter) Reset() {
*x = Filter{} *x = Filter{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[10] mi := &file_stillbox_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -899,7 +968,7 @@ func (x *Filter) String() string {
func (*Filter) ProtoMessage() {} func (*Filter) ProtoMessage() {}
func (x *Filter) ProtoReflect() protoreflect.Message { func (x *Filter) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[10] mi := &file_stillbox_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -912,7 +981,7 @@ func (x *Filter) ProtoReflect() protoreflect.Message {
// Deprecated: Use Filter.ProtoReflect.Descriptor instead. // Deprecated: Use Filter.ProtoReflect.Descriptor instead.
func (*Filter) Descriptor() ([]byte, []int) { func (*Filter) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{10} return file_stillbox_proto_rawDescGZIP(), []int{11}
} }
func (x *Filter) GetTalkgroups() []*Talkgroup { func (x *Filter) GetTalkgroups() []*Talkgroup {
@ -959,7 +1028,7 @@ type Search struct {
func (x *Search) Reset() { func (x *Search) Reset() {
*x = Search{} *x = Search{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[11] mi := &file_stillbox_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -972,7 +1041,7 @@ func (x *Search) String() string {
func (*Search) ProtoMessage() {} func (*Search) ProtoMessage() {}
func (x *Search) ProtoReflect() protoreflect.Message { func (x *Search) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[11] mi := &file_stillbox_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -985,7 +1054,7 @@ func (x *Search) ProtoReflect() protoreflect.Message {
// Deprecated: Use Search.ProtoReflect.Descriptor instead. // Deprecated: Use Search.ProtoReflect.Descriptor instead.
func (*Search) Descriptor() ([]byte, []int) { func (*Search) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{11} return file_stillbox_proto_rawDescGZIP(), []int{12}
} }
type Version struct { type Version struct {
@ -1002,7 +1071,7 @@ type Version struct {
func (x *Version) Reset() { func (x *Version) Reset() {
*x = Version{} *x = Version{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_stillbox_proto_msgTypes[12] mi := &file_stillbox_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1015,7 +1084,7 @@ func (x *Version) String() string {
func (*Version) ProtoMessage() {} func (*Version) ProtoMessage() {}
func (x *Version) ProtoReflect() protoreflect.Message { func (x *Version) ProtoReflect() protoreflect.Message {
mi := &file_stillbox_proto_msgTypes[12] mi := &file_stillbox_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1028,7 +1097,7 @@ func (x *Version) ProtoReflect() protoreflect.Message {
// Deprecated: Use Version.ProtoReflect.Descriptor instead. // Deprecated: Use Version.ProtoReflect.Descriptor instead.
func (*Version) Descriptor() ([]byte, []int) { func (*Version) Descriptor() ([]byte, []int) {
return file_stillbox_proto_rawDescGZIP(), []int{12} return file_stillbox_proto_rawDescGZIP(), []int{13}
} }
func (x *Version) GetServerName() string { func (x *Version) GetServerName() string {
@ -1067,145 +1136,153 @@ var file_stillbox_proto_rawDesc = []byte{
0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72,
0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb4, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x02, 0x0a, 0x07, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x43, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x43,
0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x07, 0x74, 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x3c, 0x0a, 0x0c, 0x6e,
0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x4e, 0x6f, 0x74,
0x70, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x74, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6e, 0x6f, 0x74,
0x3c, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x05, 0x70, 0x6f, 0x70,
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c,
0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x62, 0x6f, 0x78, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x70, 0x75, 0x70, 0x48, 0x00, 0x52,
0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x05, 0x70, 0x6f, 0x70, 0x75, 0x70, 0x12, 0x27, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
0x05, 0x70, 0x6f, 0x70, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78,
0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x70, 0x75, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12,
0x70, 0x48, 0x00, 0x52, 0x05, 0x70, 0x6f, 0x70, 0x75, 0x70, 0x12, 0x27, 0x0a, 0x05, 0x65, 0x72, 0x27, 0x0a, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x48,
0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x00, 0x52, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x42, 0x12, 0x0a, 0x10, 0x74, 0x6f, 0x43, 0x6c,
0x72, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x85, 0x01, 0x0a,
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x48, 0x65, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x6f, 0x6d,
0x6c, 0x6c, 0x6f, 0x48, 0x00, 0x52, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x42, 0x12, 0x0a, 0x10, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52,
0x74, 0x6f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a,
0x22, 0x81, 0x03, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x64, 0x07, 0x74, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
0x69, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72,
0x64, 0x69, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x74, 0x67, 0x49, 0x6e, 0x66,
0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x42, 0x12, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73,
0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x22, 0x81, 0x03, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x0a,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x09, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61,
0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x64, 0x61, 0x74,
0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69,
0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01,
0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x72, 0x28, 0x05, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x61,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74,
0x0b, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72,
0x70, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x70, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x07, 0x20,
0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x01, 0x28, 0x03, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20,
0x12, 0x1f, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x0a, 0x0b, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20,
0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73,
0x01, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28,
0x52, 0x05, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x05, 0x52, 0x07, 0x70, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f,
0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x05, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x12, 0x2b, 0x0a, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x73, 0x6f, 0x75,
0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x1d, 0x0a, 0x09, 0x55, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x18, 0x0c,
0x65, 0x72, 0x50, 0x6f, 0x70, 0x75, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x42, 0x0b, 0x0a, 0x09, 0x5f,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x4a, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x05, 0x48, 0x65, 0x6c, 0x6c,
0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x6f, 0x12, 0x2b, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x56, 0x65,
0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x1d,
0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x70, 0x75, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x78, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x4a, 0x0a,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x07,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x78, 0x0a, 0x0c, 0x4e, 0x6f, 0x74,
0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x09, 0x64, 0x61, 0x74,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x22, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0xba, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x0c, 0x6c, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69,
0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x4c, 0x69, 0x76, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x65, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75,
0x12, 0x39, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x55, 0x72, 0x6c, 0x22, 0xed, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12,
0x62, 0x6f, 0x78, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x22, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x0a, 0x74, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64,
0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d,
0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x74, 0x69, 0x6c,
0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x69, 0x76,
0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72,
0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x10, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x53, 0x65, 0x61, 0x72,
0x63, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d,
0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x0a, 0x74, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62,
0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x09,
0x74, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x5f, 0x69, 0x64, 0x22, 0xf2, 0x02, 0x0a, 0x0d, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75,
0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x02, 0x74, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c,
0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x02, 0x74, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x79,
0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0a, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20,
0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x88, 0x01, 0x01, 0x12,
0x20, 0x0a, 0x09, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01,
0x28, 0x09, 0x48, 0x02, 0x52, 0x08, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x54, 0x61, 0x67, 0x88, 0x01,
0x01, 0x12, 0x21, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06,
0x20, 0x01, 0x28, 0x05, 0x48, 0x03, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
0x79, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03,
0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61,
0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
0x75, 0x63, 0x74, 0x48, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88,
0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20,
0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42,
0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0c, 0x0a,
0x0a, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x0b, 0x0a, 0x09, 0x5f,
0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x04, 0x4c, 0x69, 0x76, 0x65,
0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53,
0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01,
0x12, 0x2d, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x10, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x46, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x48, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42,
0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69,
0x6c, 0x74, 0x65, 0x72, 0x22, 0x41, 0x0a, 0x09, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75,
0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28,
0x05, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x61, 0x6c,
0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x61,
0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x83, 0x02, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x12, 0x33, 0x0a, 0x0a, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f,
0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0a, 0x74, 0x61, 0x6c,
0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x3a, 0x0a, 0x0e, 0x74, 0x61, 0x6c, 0x6b, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x09, 0x74, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73,
0x64, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xf2, 0x02, 0x0a, 0x4e, 0x6f, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70,
0x0d, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52,
0x0a, 0x02, 0x74, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x10, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x67, 0x73, 0x41, 0x6c,
0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74,
0x02, 0x74, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x61, 0x67, 0x73, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x74,
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x67, 0x73, 0x41, 0x6e, 0x79, 0x12,
0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x2c, 0x0a, 0x12, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x67,
0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x6c,
0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x67, 0x73, 0x4e, 0x6f, 0x74, 0x22, 0x08, 0x0a,
0x67, 0x72, 0x6f, 0x75, 0x70, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x6c, 0x70, 0x68, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x76, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69,
0x61, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x08, 0x61, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d,
0x6c, 0x70, 0x68, 0x61, 0x54, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x48, 0x03, 0x52, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a,
0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75,
0x73, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x69, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18,
0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2a,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x04, 0x52, 0x08, 0x37, 0x0a, 0x09, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a,
0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x4c, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07,
0x65, 0x61, 0x72, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x4c, 0x53, 0x5f, 0x4c, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x53, 0x5f,
0x61, 0x72, 0x6e, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x08, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x02, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62,
0x0a, 0x06, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x6c, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x68, 0x61, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75,
0x65, 0x6e, 0x63, 0x79, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0x22, 0x7a, 0x0a, 0x04, 0x4c, 0x69, 0x76, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61,
0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c,
0x62, 0x6f, 0x78, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52,
0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x06, 0x66, 0x69, 0x6c,
0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x74, 0x69, 0x6c,
0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x06, 0x66,
0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61,
0x74, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x41, 0x0a,
0x09, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79,
0x73, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74,
0x65, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70,
0x22, 0x83, 0x02, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x0a, 0x74,
0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x52, 0x0a, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73,
0x12, 0x3a, 0x0a, 0x0e, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x6e,
0x6f, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x69, 0x6c, 0x6c,
0x62, 0x6f, 0x78, 0x2e, 0x54, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x74,
0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x4e, 0x6f, 0x74, 0x12, 0x2c, 0x0a, 0x12,
0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x61,
0x6c, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72,
0x6f, 0x75, 0x70, 0x54, 0x61, 0x67, 0x73, 0x41, 0x6c, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x61,
0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x61, 0x6e, 0x79,
0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75,
0x70, 0x54, 0x61, 0x67, 0x73, 0x41, 0x6e, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x61, 0x6c, 0x6b,
0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x18, 0x05,
0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x6c, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54,
0x61, 0x67, 0x73, 0x4e, 0x6f, 0x74, 0x22, 0x08, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
0x22, 0x76, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73,
0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08,
0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2a, 0x37, 0x0a, 0x09, 0x4c, 0x69, 0x76, 0x65,
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x50,
0x50, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x53, 0x5f, 0x4c, 0x49, 0x56, 0x45,
0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x53, 0x5f, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10,
0x02, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
} }
var ( var (
@ -1221,45 +1298,46 @@ func file_stillbox_proto_rawDescGZIP() []byte {
} }
var file_stillbox_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_stillbox_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_stillbox_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_stillbox_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_stillbox_proto_goTypes = []interface{}{ var file_stillbox_proto_goTypes = []interface{}{
(LiveState)(0), // 0: stillbox.LiveState (LiveState)(0), // 0: stillbox.LiveState
(*Message)(nil), // 1: stillbox.Message (*Message)(nil), // 1: stillbox.Message
(*Call)(nil), // 2: stillbox.Call (*Response)(nil), // 2: stillbox.Response
(*Hello)(nil), // 3: stillbox.Hello (*Call)(nil), // 3: stillbox.Call
(*UserPopup)(nil), // 4: stillbox.UserPopup (*Hello)(nil), // 4: stillbox.Hello
(*Error)(nil), // 5: stillbox.Error (*UserPopup)(nil), // 5: stillbox.UserPopup
(*Notification)(nil), // 6: stillbox.Notification (*Error)(nil), // 6: stillbox.Error
(*Command)(nil), // 7: stillbox.Command (*Notification)(nil), // 7: stillbox.Notification
(*TalkgroupInfo)(nil), // 8: stillbox.TalkgroupInfo (*Command)(nil), // 8: stillbox.Command
(*Live)(nil), // 9: stillbox.Live (*TalkgroupInfo)(nil), // 9: stillbox.TalkgroupInfo
(*Talkgroup)(nil), // 10: stillbox.Talkgroup (*Live)(nil), // 10: stillbox.Live
(*Filter)(nil), // 11: stillbox.Filter (*Talkgroup)(nil), // 11: stillbox.Talkgroup
(*Search)(nil), // 12: stillbox.Search (*Filter)(nil), // 12: stillbox.Filter
(*Version)(nil), // 13: stillbox.Version (*Search)(nil), // 13: stillbox.Search
(*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp (*Version)(nil), // 14: stillbox.Version
(*structpb.Struct)(nil), // 15: google.protobuf.Struct (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp
(*structpb.Struct)(nil), // 16: google.protobuf.Struct
} }
var file_stillbox_proto_depIdxs = []int32{ var file_stillbox_proto_depIdxs = []int32{
2, // 0: stillbox.Message.call:type_name -> stillbox.Call 3, // 0: stillbox.Message.call:type_name -> stillbox.Call
8, // 1: stillbox.Message.tg_info:type_name -> stillbox.TalkgroupInfo 7, // 1: stillbox.Message.notification:type_name -> stillbox.Notification
6, // 2: stillbox.Message.notification:type_name -> stillbox.Notification 5, // 2: stillbox.Message.popup:type_name -> stillbox.UserPopup
4, // 3: stillbox.Message.popup:type_name -> stillbox.UserPopup 6, // 3: stillbox.Message.error:type_name -> stillbox.Error
5, // 4: stillbox.Message.error:type_name -> stillbox.Error 4, // 4: stillbox.Message.hello:type_name -> stillbox.Hello
3, // 5: stillbox.Message.hello:type_name -> stillbox.Hello 9, // 5: stillbox.Response.tg_info:type_name -> stillbox.TalkgroupInfo
14, // 6: stillbox.Call.date_time:type_name -> google.protobuf.Timestamp 15, // 6: stillbox.Call.date_time:type_name -> google.protobuf.Timestamp
13, // 7: stillbox.Hello.version:type_name -> stillbox.Version 14, // 7: stillbox.Hello.version:type_name -> stillbox.Version
7, // 8: stillbox.Error.command:type_name -> stillbox.Command 8, // 8: stillbox.Error.command:type_name -> stillbox.Command
14, // 9: stillbox.Notification.date_time:type_name -> google.protobuf.Timestamp 15, // 9: stillbox.Notification.date_time:type_name -> google.protobuf.Timestamp
9, // 10: stillbox.Command.live_command:type_name -> stillbox.Live 10, // 10: stillbox.Command.live_command:type_name -> stillbox.Live
12, // 11: stillbox.Command.search_command:type_name -> stillbox.Search 13, // 11: stillbox.Command.search_command:type_name -> stillbox.Search
10, // 12: stillbox.Command.tg_command:type_name -> stillbox.Talkgroup 11, // 12: stillbox.Command.tg_command:type_name -> stillbox.Talkgroup
10, // 13: stillbox.TalkgroupInfo.tg:type_name -> stillbox.Talkgroup 11, // 13: stillbox.TalkgroupInfo.tg:type_name -> stillbox.Talkgroup
15, // 14: stillbox.TalkgroupInfo.metadata:type_name -> google.protobuf.Struct 16, // 14: stillbox.TalkgroupInfo.metadata:type_name -> google.protobuf.Struct
0, // 15: stillbox.Live.state:type_name -> stillbox.LiveState 0, // 15: stillbox.Live.state:type_name -> stillbox.LiveState
11, // 16: stillbox.Live.filter:type_name -> stillbox.Filter 12, // 16: stillbox.Live.filter:type_name -> stillbox.Filter
10, // 17: stillbox.Filter.talkgroups:type_name -> stillbox.Talkgroup 11, // 17: stillbox.Filter.talkgroups:type_name -> stillbox.Talkgroup
10, // 18: stillbox.Filter.talkgroups_not:type_name -> stillbox.Talkgroup 11, // 18: stillbox.Filter.talkgroups_not:type_name -> stillbox.Talkgroup
19, // [19:19] is the sub-list for method output_type 19, // [19:19] is the sub-list for method output_type
19, // [19:19] is the sub-list for method input_type 19, // [19:19] is the sub-list for method input_type
19, // [19:19] is the sub-list for extension type_name 19, // [19:19] is the sub-list for extension type_name
@ -1286,7 +1364,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Call); i { switch v := v.(*Response); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1298,7 +1376,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Hello); i { switch v := v.(*Call); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1310,7 +1388,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserPopup); i { switch v := v.(*Hello); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1322,7 +1400,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Error); i { switch v := v.(*UserPopup); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1334,7 +1412,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Notification); i { switch v := v.(*Error); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1346,7 +1424,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Command); i { switch v := v.(*Notification); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1358,7 +1436,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TalkgroupInfo); i { switch v := v.(*Command); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1370,7 +1448,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Live); i { switch v := v.(*TalkgroupInfo); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1382,7 +1460,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Talkgroup); i { switch v := v.(*Live); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1394,7 +1472,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Filter); i { switch v := v.(*Talkgroup); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1406,7 +1484,7 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Search); i { switch v := v.(*Filter); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1418,6 +1496,18 @@ func file_stillbox_proto_init() {
} }
} }
file_stillbox_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { file_stillbox_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Search); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_stillbox_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Version); i { switch v := v.(*Version); i {
case 0: case 0:
return &v.state return &v.state
@ -1432,27 +1522,29 @@ func file_stillbox_proto_init() {
} }
file_stillbox_proto_msgTypes[0].OneofWrappers = []interface{}{ file_stillbox_proto_msgTypes[0].OneofWrappers = []interface{}{
(*Message_Call)(nil), (*Message_Call)(nil),
(*Message_TgInfo)(nil),
(*Message_Notification)(nil), (*Message_Notification)(nil),
(*Message_Popup)(nil), (*Message_Popup)(nil),
(*Message_Error)(nil), (*Message_Error)(nil),
(*Message_Hello)(nil), (*Message_Hello)(nil),
} }
file_stillbox_proto_msgTypes[1].OneofWrappers = []interface{}{} file_stillbox_proto_msgTypes[1].OneofWrappers = []interface{}{
file_stillbox_proto_msgTypes[6].OneofWrappers = []interface{}{ (*Response_TgInfo)(nil),
}
file_stillbox_proto_msgTypes[2].OneofWrappers = []interface{}{}
file_stillbox_proto_msgTypes[7].OneofWrappers = []interface{}{
(*Command_LiveCommand)(nil), (*Command_LiveCommand)(nil),
(*Command_SearchCommand)(nil), (*Command_SearchCommand)(nil),
(*Command_TgCommand)(nil), (*Command_TgCommand)(nil),
} }
file_stillbox_proto_msgTypes[7].OneofWrappers = []interface{}{}
file_stillbox_proto_msgTypes[8].OneofWrappers = []interface{}{} file_stillbox_proto_msgTypes[8].OneofWrappers = []interface{}{}
file_stillbox_proto_msgTypes[9].OneofWrappers = []interface{}{}
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{ File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_stillbox_proto_rawDesc, RawDescriptor: file_stillbox_proto_rawDesc,
NumEnums: 1, NumEnums: 1,
NumMessages: 13, NumMessages: 14,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View file

@ -8,11 +8,17 @@ import "google/protobuf/struct.proto";
message Message { message Message {
oneof toClient_message { oneof toClient_message {
Call call = 1; Call call = 1;
Notification notification = 2;
UserPopup popup = 3;
Error error = 4;
Hello hello = 5;
}
}
message Response {
optional int64 command_id = 1;
oneof command_response {
TalkgroupInfo tg_info = 2; TalkgroupInfo tg_info = 2;
Notification notification = 3;
UserPopup popup = 4;
Error error = 5;
Hello hello = 6;
} }
} }
@ -51,10 +57,11 @@ message Notification {
} }
message Command { message Command {
optional int64 command_id = 1;
oneof command { oneof command {
Live live_command = 1; Live live_command = 2;
Search search_command = 2; Search search_command = 3;
Talkgroup tg_command = 3; Talkgroup tg_command = 4;
} }
} }