package main import ( "context" "log" "net" "os" "os/signal" "sync" "google.golang.org/grpc" "whiteboxsystems.nl/openkvpoc/openkv" ) var rpcAddr = "0.0.0.0:7777" var uiAddr = "0.0.0.0:7075" var binFolder = "./bin" func main() { stop := make(chan os.Signal, 1) signal.Notify(stop, os.Interrupt) wg := &sync.WaitGroup{} if os.Getenv("BIN_FOLDER") != "" { binFolder = os.Getenv("BIN_FOLDER") } openapisrv := NewServer() openapisrv.LoadData("./data/data.db") opts := []grpc.ServerOption{ // grpc.UnaryInterceptor(openapisrv.EnsureValidModule), } grpcServer := grpc.NewServer(opts...) go func() { lis, err := net.Listen("tcp", rpcAddr) if err != nil { log.Fatalf("failed to listen: %v", err) } openkv.RegisterOpenKVServer(grpcServer, openapisrv) log.Printf("RPC Listening on %v", rpcAddr) wg.Add(1) grpcServer.Serve(lis) }() srv := NewUIServer(uiAddr) srv.data = openapisrv.data go func() { wg.Add(1) srv.ListenAndServe() }() <-stop go func() { grpcServer.GracefulStop() wg.Done() log.Println("Shutdown RPC server") }() go func() { log.Println("Shutdown UI server...") srv.Shutdown(context.Background()) wg.Done() log.Println("UI Server shutdown...") }() wg.Wait() }