mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-15 04:35:17 +00:00
119 lines
2.5 KiB
Go
119 lines
2.5 KiB
Go
package rpc
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
|
"github.com/multiformats/go-multiaddr"
|
|
mn "github.com/multiformats/go-multiaddr/net"
|
|
"github.com/pkg/errors"
|
|
"go.uber.org/zap"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
"google.golang.org/grpc/reflection"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/keys"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
|
|
)
|
|
|
|
type RPCServer struct {
|
|
protobufs.UnimplementedNodeServiceServer
|
|
listenAddrGRPC string
|
|
listenAddrHTTP string
|
|
logger *zap.Logger
|
|
keyManager keys.KeyManager
|
|
pubSub p2p.PubSub
|
|
}
|
|
|
|
func (r *RPCServer) GetNetworkInfo(
|
|
ctx context.Context,
|
|
req *protobufs.GetNetworkInfoRequest,
|
|
) (*protobufs.NetworkInfoResponse, error) {
|
|
return r.pubSub.GetNetworkInfo(), nil
|
|
}
|
|
|
|
func NewRPCServer(
|
|
listenAddrGRPC string,
|
|
listenAddrHTTP string,
|
|
logger *zap.Logger,
|
|
keyManager keys.KeyManager,
|
|
pubSub p2p.PubSub,
|
|
) (*RPCServer, error) {
|
|
return &RPCServer{
|
|
listenAddrGRPC: listenAddrGRPC,
|
|
listenAddrHTTP: listenAddrHTTP,
|
|
logger: logger,
|
|
keyManager: keyManager,
|
|
pubSub: pubSub,
|
|
}, nil
|
|
}
|
|
|
|
func (r *RPCServer) Start() error {
|
|
s := grpc.NewServer(
|
|
grpc.MaxRecvMsgSize(600*1024*1024),
|
|
grpc.MaxSendMsgSize(600*1024*1024),
|
|
)
|
|
protobufs.RegisterNodeServiceServer(s, r)
|
|
reflection.Register(s)
|
|
|
|
mg, err := multiaddr.NewMultiaddr(r.listenAddrGRPC)
|
|
if err != nil {
|
|
return errors.Wrap(err, "start")
|
|
}
|
|
|
|
lis, err := mn.Listen(mg)
|
|
if err != nil {
|
|
return errors.Wrap(err, "start")
|
|
}
|
|
|
|
go func() {
|
|
if err := s.Serve(mn.NetListener(lis)); err != nil {
|
|
panic(err)
|
|
}
|
|
}()
|
|
|
|
if r.listenAddrHTTP != "" {
|
|
m, err := multiaddr.NewMultiaddr(r.listenAddrHTTP)
|
|
if err != nil {
|
|
return errors.Wrap(err, "start")
|
|
}
|
|
|
|
ma, err := mn.ToNetAddr(m)
|
|
if err != nil {
|
|
return errors.Wrap(err, "start")
|
|
}
|
|
|
|
mga, err := mn.ToNetAddr(mg)
|
|
if err != nil {
|
|
return errors.Wrap(err, "start")
|
|
}
|
|
|
|
go func() {
|
|
mux := runtime.NewServeMux()
|
|
opts := []grpc.DialOption{
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
|
grpc.WithDefaultCallOptions(
|
|
grpc.MaxCallRecvMsgSize(600*1024*1024),
|
|
grpc.MaxCallSendMsgSize(600*1024*1024),
|
|
),
|
|
}
|
|
|
|
if err := protobufs.RegisterNodeServiceHandlerFromEndpoint(
|
|
context.Background(),
|
|
mux,
|
|
mga.String(),
|
|
opts,
|
|
); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if err := http.ListenAndServe(ma.String(), mux); err != nil {
|
|
panic(err)
|
|
}
|
|
}()
|
|
}
|
|
|
|
return nil
|
|
}
|