You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

70 lines
1.5 KiB

/*
Package server is used to start a new ABCI server.
It defines the struct for gRPC server settings, and functions for:
* Starting a new gRPC server
* Stopping a gRPC server
*/
package server
import (
"net"
"strings"
"google.golang.org/grpc"
"github.com/tendermint/abci/types"
cmn "github.com/tendermint/tmlibs/common"
)
// var maxNumberConnections = 2
//GRPCServer is used to set the protocol and address for gRPC.
type GRPCServer struct {
cmn.BaseService
proto string
addr string
listener net.Listener
server *grpc.Server
app types.ABCIApplicationServer
}
//NewGRPCServer allows setting up a new gRPC ABCI server.
func NewGRPCServer(protoAddr string, app types.ABCIApplicationServer) (cmn.Service, error) {
parts := strings.SplitN(protoAddr, "://", 2)
proto, addr := parts[0], parts[1]
s := &GRPCServer{
proto: proto,
addr: addr,
listener: nil,
app: app,
}
s.BaseService = *cmn.NewBaseService(nil, "ABCIServer", s)
_, err := s.Start() // Just start it
return s, err
}
//Onstart registers a new gRPC service and tells that service to listen on the port that is set in NewGRPCServer.
func (s *GRPCServer) OnStart() error {
s.BaseService.OnStart()
ln, err := net.Listen(s.proto, s.addr)
if err != nil {
return err
}
s.listener = ln
s.server = grpc.NewServer()
types.RegisterABCIApplicationServer(s.server, s.app)
go s.server.Serve(s.listener)
return nil
}
//OnStop is called when a gRPC server is stopped.
func (s *GRPCServer) OnStop() {
s.BaseService.OnStop()
s.server.Stop()
}