gecko/vms/rpcchainvm/messenger/messenger_server.go

38 lines
899 B
Go

// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package messenger
import (
"context"
"errors"
"github.com/ava-labs/gecko/snow/engine/common"
"github.com/ava-labs/gecko/vms/rpcchainvm/messenger/messengerproto"
)
var (
errFullQueue = errors.New("full message queue")
)
// Server is a messenger that is managed over RPC.
type Server struct {
messenger chan<- common.Message
}
// NewServer returns a vm instance connected to a remote vm instance
func NewServer(messenger chan<- common.Message) *Server {
return &Server{messenger: messenger}
}
// Notify ...
func (s *Server) Notify(_ context.Context, req *messengerproto.NotifyRequest) (*messengerproto.NotifyResponse, error) {
msg := common.Message(req.Message)
select {
case s.messenger <- msg:
return &messengerproto.NotifyResponse{}, nil
default:
return nil, errFullQueue
}
}