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  }