github.com/MetalBlockchain/metalgo@v1.11.9/vms/rpcchainvm/messenger/messenger_server.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package messenger 5 6 import ( 7 "context" 8 "errors" 9 10 "github.com/MetalBlockchain/metalgo/snow/engine/common" 11 12 messengerpb "github.com/MetalBlockchain/metalgo/proto/pb/messenger" 13 ) 14 15 var ( 16 errFullQueue = errors.New("full message queue") 17 18 _ messengerpb.MessengerServer = (*Server)(nil) 19 ) 20 21 // Server is a messenger that is managed over RPC. 22 type Server struct { 23 messengerpb.UnsafeMessengerServer 24 messenger chan<- common.Message 25 } 26 27 // NewServer returns a messenger connected to a remote channel 28 func NewServer(messenger chan<- common.Message) *Server { 29 return &Server{messenger: messenger} 30 } 31 32 func (s *Server) Notify(_ context.Context, req *messengerpb.NotifyRequest) (*messengerpb.NotifyResponse, error) { 33 msg := common.Message(req.Message) 34 select { 35 case s.messenger <- msg: 36 return &messengerpb.NotifyResponse{}, nil 37 default: 38 return nil, errFullQueue 39 } 40 }