codeword/internal/server/grpc/rpc_server.go

75 lines
1.8 KiB
Go
Raw Normal View History

2024-04-25 12:09:28 +00:00
package grpc
import (
"codeword/internal/controller/rpc_controllers"
codeword_rpc "codeword/internal/proto/codeword"
"context"
"fmt"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
grpc_zap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap"
grpc_recovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery"
"go.uber.org/zap"
"google.golang.org/grpc"
"net"
"time"
)
type GRPC struct {
grpc *grpc.Server
logger *zap.Logger
}
func NewGRPC(logger *zap.Logger) (*GRPC, error) {
grpcStreamInterceptor := grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
grpc_zap.StreamServerInterceptor(logger),
grpc_recovery.StreamServerInterceptor(),
))
grpcUnaryInterceptor := grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
grpc_zap.UnaryServerInterceptor(logger),
grpc_recovery.UnaryServerInterceptor(),
))
return &GRPC{
grpc: grpc.NewServer(grpcStreamInterceptor, grpcUnaryInterceptor, grpc.ConnectionTimeout(5*time.Second)),
logger: logger,
}, nil
}
type DepsGrpcRun struct {
Host string
Port string
}
func (g *GRPC) Run(config DepsGrpcRun) {
connectionString := fmt.Sprintf("%s:%s", config.Host, config.Port)
g.logger.Info("Starting GRPC Server", zap.String("host", connectionString))
if err := g.listen(connectionString); err != nil && err != grpc.ErrServerStopped {
g.logger.Error("GRPC Listen error", zap.Error(err))
}
}
func (g *GRPC) Stop(_ context.Context) error {
g.grpc.GracefulStop()
g.logger.Info("Shutting down GRPC server...")
return nil
}
func (g *GRPC) Register(reg *rpc_controllers.RpcRegister) *GRPC {
codeword_rpc.RegisterPromoCodeServiceServer(g.grpc, reg.Service)
// another
return g
}
func (g *GRPC) listen(address string) error {
listener, err := net.Listen("tcp", address)
if err != nil {
return err
}
return g.grpc.Serve(listener)
}