github.com/evdatsion/aphelion-dpos-bft@v0.32.1/abci/server/grpc_server.go (about)

     1  package server
     2  
     3  import (
     4  	"net"
     5  
     6  	"google.golang.org/grpc"
     7  
     8  	"github.com/evdatsion/aphelion-dpos-bft/abci/types"
     9  	cmn "github.com/evdatsion/aphelion-dpos-bft/libs/common"
    10  )
    11  
    12  type GRPCServer struct {
    13  	cmn.BaseService
    14  
    15  	proto    string
    16  	addr     string
    17  	listener net.Listener
    18  	server   *grpc.Server
    19  
    20  	app types.ABCIApplicationServer
    21  }
    22  
    23  // NewGRPCServer returns a new gRPC ABCI server
    24  func NewGRPCServer(protoAddr string, app types.ABCIApplicationServer) cmn.Service {
    25  	proto, addr := cmn.ProtocolAndAddress(protoAddr)
    26  	s := &GRPCServer{
    27  		proto:    proto,
    28  		addr:     addr,
    29  		listener: nil,
    30  		app:      app,
    31  	}
    32  	s.BaseService = *cmn.NewBaseService(nil, "ABCIServer", s)
    33  	return s
    34  }
    35  
    36  // OnStart starts the gRPC service
    37  func (s *GRPCServer) OnStart() error {
    38  	if err := s.BaseService.OnStart(); err != nil {
    39  		return err
    40  	}
    41  	ln, err := net.Listen(s.proto, s.addr)
    42  	if err != nil {
    43  		return err
    44  	}
    45  	s.Logger.Info("Listening", "proto", s.proto, "addr", s.addr)
    46  	s.listener = ln
    47  	s.server = grpc.NewServer()
    48  	types.RegisterABCIApplicationServer(s.server, s.app)
    49  	go s.server.Serve(s.listener)
    50  	return nil
    51  }
    52  
    53  // OnStop stops the gRPC server
    54  func (s *GRPCServer) OnStop() {
    55  	s.BaseService.OnStop()
    56  	s.server.Stop()
    57  }