OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / tendermint / abci / server / grpc_server.go
1 package server
2
3 import (
4         "net"
5
6         "google.golang.org/grpc"
7
8         "github.com/tendermint/abci/types"
9         cmn "github.com/tendermint/tmlibs/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.listener = ln
46         s.server = grpc.NewServer()
47         types.RegisterABCIApplicationServer(s.server, s.app)
48         go s.server.Serve(s.listener)
49         return nil
50 }
51
52 // OnStop stops the gRPC server
53 func (s *GRPCServer) OnStop() {
54         s.BaseService.OnStop()
55         s.server.Stop()
56 }