2024-04-25 12:09:28 +00:00
|
|
|
package grpc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
2024-11-22 11:22:08 +00:00
|
|
|
"gitea.pena/PenaSide/codeword/internal/controller/rpc_controllers"
|
|
|
|
codeword_rpc "gitea.pena/PenaSide/codeword/internal/proto/codeword"
|
2024-04-25 12:09:28 +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"
|
|
|
|
"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
|
|
|
|
}
|
|
|
|
|
2025-01-02 10:44:52 +00:00
|
|
|
func (g *GRPC) Run(addr string) {
|
|
|
|
connectionString := fmt.Sprintf(addr)
|
2024-04-25 12:09:28 +00:00
|
|
|
|
|
|
|
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)
|
|
|
|
}
|