|
|
- package core_grpc
-
- import (
- "fmt"
- "net"
- "strings"
- "time"
-
- "golang.org/x/net/netutil"
- "google.golang.org/grpc"
-
- cmn "github.com/tendermint/tendermint/libs/common"
- )
-
- // Config is an gRPC server configuration.
- type Config struct {
- MaxOpenConnections int
- }
-
- // StartGRPCServer starts a new gRPC BroadcastAPIServer, listening on
- // protoAddr, in a goroutine. Returns a listener and an error, if it fails to
- // parse an address.
- func StartGRPCServer(protoAddr string, config Config) (net.Listener, error) {
- parts := strings.SplitN(protoAddr, "://", 2)
- if len(parts) != 2 {
- return nil, fmt.Errorf("Invalid listen address for grpc server (did you forget a tcp:// prefix?) : %s", protoAddr)
- }
- proto, addr := parts[0], parts[1]
- ln, err := net.Listen(proto, addr)
- if err != nil {
- return nil, err
- }
- if config.MaxOpenConnections > 0 {
- ln = netutil.LimitListener(ln, config.MaxOpenConnections)
- }
-
- grpcServer := grpc.NewServer()
- RegisterBroadcastAPIServer(grpcServer, &broadcastAPI{})
- go grpcServer.Serve(ln) // nolint: errcheck
-
- return ln, nil
- }
-
- // StartGRPCClient dials the gRPC server using protoAddr and returns a new
- // BroadcastAPIClient.
- func StartGRPCClient(protoAddr string) BroadcastAPIClient {
- conn, err := grpc.Dial(protoAddr, grpc.WithInsecure(), grpc.WithDialer(dialerFunc))
- if err != nil {
- panic(err)
- }
- return NewBroadcastAPIClient(conn)
- }
-
- func dialerFunc(addr string, timeout time.Duration) (net.Conn, error) {
- return cmn.Connect(addr)
- }
|