123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package servers
- import (
- "fmt"
- "gogs.tyduyong.com/duyong/dy-admin/internal/iam/config"
- "gogs.tyduyong.com/duyong/dy-pkg/app/options"
- "gogs.tyduyong.com/duyong/dy-pkg/logs"
- "google.golang.org/grpc"
- "google.golang.org/grpc/credentials"
- "net"
- )
- type grpcAPIServer struct {
- *grpc.Server
- Addr string
- MaxMsgSize int
- ServerCert options.GeneratableKeyCert
- }
- func newRpcServer(cfg *config.Config) *grpcAPIServer {
- s := &grpcAPIServer{
- Addr: fmt.Sprintf("%s:%d", cfg.GRPCOptions.BindAddress, cfg.GRPCOptions.BindPort),
- MaxMsgSize: cfg.GRPCOptions.MaxMsgSize,
- ServerCert: cfg.SecureServingOptions.ServerCert,
- }
- opts := []grpc.ServerOption{grpc.MaxRecvMsgSize(s.MaxMsgSize)}
- if s.ServerCert.CertKey.CertFile != "" || s.ServerCert.CertKey.KeyFile != "" {
- creds, err := credentials.NewServerTLSFromFile(s.ServerCert.CertKey.CertFile, s.ServerCert.CertKey.KeyFile)
- if err != nil {
- logs.Fatalf("Failed to generate credentials %s", err.Error())
- }
- opts = append(opts, grpc.Creds(creds))
- }
- grpcServer := grpc.NewServer(opts...)
- s.Server = grpcServer
- return s
- }
- func (s *grpcAPIServer) Run() {
- listen, err := net.Listen("tcp", s.Addr)
- if err != nil {
- logs.Fatalf("failed to listen: %s", err.Error())
- }
- go func() {
- if err := s.Serve(listen); err != nil {
- logs.Fatalf("failed to start grpc server: %s", err.Error())
- }
- }()
- logs.Infof("start grpc server at %s", s.Addr)
- }
- func (s *grpcAPIServer) Close() {
- s.GracefulStop()
- logs.Infof("GRPC server on %s stopped", s.Addr)
- }
|