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 }