treasurer/internal/server/grpc/grpc_server.go

70 lines
1.7 KiB
Go
Raw Normal View History

package grpc
2023-06-13 13:22:51 +00:00
import (
"context"
"fmt"
"net"
2023-06-19 17:29:15 +00:00
"time"
2023-06-13 13:22:51 +00:00
"gitea.pena/PenaSide/treasurer/internal/proto/treasurer"
2023-06-13 13:22:51 +00:00
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"
)
type GRPC struct {
grpc *grpc.Server
logger *zap.Logger
2023-06-13 13:22:51 +00:00
}
func NewGRPC(logger *zap.Logger) (*GRPC, error) {
2023-06-13 13:22:51 +00:00
grpcStreamInterceptor := grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
grpc_zap.StreamServerInterceptor(logger),
2023-06-13 13:22:51 +00:00
grpc_recovery.StreamServerInterceptor(),
))
grpcUnaryInterceptor := grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
grpc_zap.UnaryServerInterceptor(logger),
grpc_recovery.UnaryServerInterceptor(),
2023-06-13 13:22:51 +00:00
))
return &GRPC{
2023-06-19 17:29:15 +00:00
grpc: grpc.NewServer(grpcStreamInterceptor, grpcUnaryInterceptor, grpc.ConnectionTimeout(5*time.Second)),
logger: logger,
2023-06-13 13:22:51 +00:00
}, nil
}
2025-06-11 15:39:39 +00:00
func (s *GRPC) Run(addr string) {
connectionString := fmt.Sprintf(addr)
2023-06-13 13:22:51 +00:00
2025-06-11 15:39:39 +00:00
s.logger.Info("Starting GRPC Server", zap.String("host", connectionString))
2023-06-13 13:22:51 +00:00
2025-06-11 15:39:39 +00:00
if err := s.listen(connectionString); err != nil && err != grpc.ErrServerStopped {
s.logger.Error("GRPC Listen error", zap.Error(err))
2023-06-13 13:22:51 +00:00
}
}
2025-06-11 15:39:39 +00:00
func (s *GRPC) Stop(_ context.Context) error {
s.grpc.GracefulStop()
s.logger.Info("Shutting down GRPC server...")
2023-06-13 13:22:51 +00:00
return nil
}
2025-06-11 15:39:39 +00:00
func (s *GRPC) Register(server treasurer.TreasurerServiceServer) *GRPC {
treasurer.RegisterTreasurerServiceServer(s.grpc, server)
2023-06-13 13:22:51 +00:00
2025-06-11 15:39:39 +00:00
return s
2023-06-13 13:22:51 +00:00
}
2025-06-11 15:39:39 +00:00
func (s *GRPC) listen(address string) error {
2023-06-13 13:22:51 +00:00
listener, err := net.Listen("tcp", address)
if err != nil {
return err
}
2025-06-11 15:39:39 +00:00
return s.grpc.Serve(listener)
2023-06-13 13:22:51 +00:00
}