tendermint/server/grpc_server.go

57 lines
1.1 KiB
Go
Raw Normal View History

2016-05-17 21:54:32 -07:00
package server
import (
"net"
"google.golang.org/grpc"
2017-01-12 12:47:55 -08:00
"github.com/tendermint/abci/types"
2017-04-21 15:25:13 -07:00
cmn "github.com/tendermint/tmlibs/common"
2016-05-17 21:54:32 -07:00
)
type GRPCServer struct {
2017-01-23 20:26:17 -08:00
cmn.BaseService
2016-05-17 21:54:32 -07:00
proto string
addr string
listener net.Listener
server *grpc.Server
2016-05-17 21:54:32 -07:00
2017-01-12 12:47:55 -08:00
app types.ABCIApplicationServer
2016-05-17 21:54:32 -07:00
}
2017-05-13 01:01:16 -07:00
// NewGRPCServer returns a new gRPC ABCI server
func NewGRPCServer(protoAddr string, app types.ABCIApplicationServer) cmn.Service {
2017-10-25 20:04:20 -07:00
proto, addr := cmn.ProtocolAndAddress(protoAddr)
2016-05-17 21:54:32 -07:00
s := &GRPCServer{
proto: proto,
addr: addr,
listener: nil,
app: app,
}
2017-01-23 20:26:17 -08:00
s.BaseService = *cmn.NewBaseService(nil, "ABCIServer", s)
return s
2016-05-17 21:54:32 -07:00
}
2017-05-13 01:01:16 -07:00
// OnStart starts the gRPC service
2016-05-17 21:54:32 -07:00
func (s *GRPCServer) OnStart() error {
2017-09-21 12:32:06 -07:00
if err := s.BaseService.OnStart(); err != nil {
return err
}
2016-05-17 21:54:32 -07:00
ln, err := net.Listen(s.proto, s.addr)
if err != nil {
return err
}
s.listener = ln
s.server = grpc.NewServer()
2017-01-12 12:47:55 -08:00
types.RegisterABCIApplicationServer(s.server, s.app)
go s.server.Serve(s.listener)
2016-05-17 21:54:32 -07:00
return nil
}
2017-05-13 01:01:16 -07:00
// OnStop stops the gRPC server
2016-05-17 21:54:32 -07:00
func (s *GRPCServer) OnStop() {
2016-10-28 12:06:40 -07:00
s.BaseService.OnStop()
s.server.Stop()
2016-05-17 21:54:32 -07:00
}