refactor GRPC connection management

pull/2/head
Adam Veldhousen 1 year ago
parent 852d0f4131
commit 118d4ffcc6
Signed by: adam
GPG Key ID: 6DB29003C6DD1E4B

@ -1,36 +1,48 @@
package kernel
import (
"context"
"errors"
"fmt"
"net"
"time"
"google.golang.org/grpc"
)
type ServerBuilder func(grpc.ServiceRegistrar)
type ServerBuilder func(grpc.ServiceRegistrar, string)
var (
grpcServerInstance *grpc.Server
listener net.Listener
)
func StartGRPCServer(port int, sb ServerBuilder, opts ...grpc.ServerOption) (err error) {
func StartGRPCServer(ctx context.Context, port int, sb ServerBuilder, opts ...grpc.ServerOption) (endpoint string, err error) {
if grpcServerInstance != nil {
return errors.New("There can only be one GRPC server running at a time")
err = errors.New("There can only be one GRPC server running at a time")
return
}
listener, err = net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port))
endpoint = fmt.Sprintf("0.0.0.0:%d", port)
listener, err = net.Listen("tcp", endpoint)
if err != nil {
return fmt.Errorf("could not start tcp listener: %w", err)
endpoint = ""
err = fmt.Errorf("could not start tcp listener: %w", err)
return
}
grpcServerInstance = grpc.NewServer(opts...)
sb(grpcServerInstance)
sb(grpcServerInstance, endpoint)
InfoLog.Printf("Listening on 0.0.0.0:%d", port)
return grpcServerInstance.Serve(listener)
if err = grpcServerInstance.Serve(listener); err != nil {
endpoint = ""
err = fmt.Errorf("could not serve GRPC server over listener: %w", err)
return
}
InfoLog.Printf("Listening for GRPC requests on %s", endpoint)
return
}
func StopGRPCServer() error {

@ -10,8 +10,8 @@ import (
"google.golang.org/grpc/status"
)
func NewRunnerServer(d *runner.Domain) func(grpcServer grpc.ServiceRegistrar) {
return func(grpcServer grpc.ServiceRegistrar) {
func NewRunnerServer(d *runner.Domain) func(grpcServer grpc.ServiceRegistrar, endpoint string) {
return func(grpcServer grpc.ServiceRegistrar, endpoint string) {
api.RegisterRunnerServer(grpcServer, &runnerHandler{domain: d})
}
}

@ -81,7 +81,13 @@ func (app *RunnerApp) Start(ctx context.Context) error {
})
return ioc.Invoke(func(d *runner.Domain) error {
return kernel.StartGRPCServer(app.Port, internal.NewRunnerServer(d))
runnerService := internal.NewRunnerServer(d)
if _, err := kernel.StartGRPCServer(ctx, app.Port, runnerService); err != nil {
return err
}
return nil
})
}

Loading…
Cancel
Save