package executor import ( "fmt" "net" "sync" pb "git.nevets.tech/Steven/certman/proto/v1" "github.com/coreos/go-systemd/v22/activation" "google.golang.org/grpc" ) type Server struct { listener net.Listener wg sync.WaitGroup } func (s *Server) Start() error { listeners, err := activation.Listeners() if err != nil { return fmt.Errorf("systemd activation listeners: %v", err) } if len(listeners) != 1 { return fmt.Errorf("systemd activation listeners: expected 1, got %d", len(listeners)) } s.listener = listeners[0] srv := grpc.NewServer() pb.RegisterHookServiceServer(srv, &hookServer{}) err = srv.Serve(s.listener) if err != nil { return fmt.Errorf("error creating grpc listener: %v", err) } fmt.Printf("Started gRPC server on %s\n", s.listener.Addr()) return nil } func (s *Server) Stop() { if s.listener != nil { _ = s.listener.Close() } }