mirror of https://github.com/poanetwork/gecko.git
38 lines
899 B
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
|
|
}
|
|
}
|