From e3b336ab45a6acf8a02a8c0f1b6d22fb3a320826 Mon Sep 17 00:00:00 2001 From: bndw Date: Fri, 13 Feb 2026 17:50:09 -0800 Subject: feat: add relay server and test client Server (cmd/relay): - gRPC server on :50051 (configurable) - SQLite database (default: relay.db) - Graceful shutdown on SIGTERM/SIGINT Test client (cmd/testclient): - Generates key - Publishes event - Queries events back Build: - make build (relay) - make build-client (test client) - make build-all (both) --- cmd/relay/main.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 cmd/relay/main.go (limited to 'cmd/relay/main.go') diff --git a/cmd/relay/main.go b/cmd/relay/main.go new file mode 100644 index 0000000..3db466d --- /dev/null +++ b/cmd/relay/main.go @@ -0,0 +1,56 @@ +package main + +import ( + "flag" + "log" + "net" + "os" + "os/signal" + "syscall" + + "google.golang.org/grpc" + + pb "northwest.io/nostr-grpc/api/nostr/v1" + grpchandler "northwest.io/nostr-grpc/internal/handler/grpc" + "northwest.io/nostr-grpc/internal/storage" +) + +func main() { + var ( + grpcAddr = flag.String("grpc-addr", ":50051", "gRPC server address") + dbPath = flag.String("db", "relay.db", "SQLite database path") + ) + flag.Parse() + + store, err := storage.New(*dbPath) + if err != nil { + log.Fatalf("failed to create storage: %v", err) + } + defer store.Close() + + handler := grpchandler.NewServer(store) + + lis, err := net.Listen("tcp", *grpcAddr) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + + grpcServer := grpc.NewServer() + pb.RegisterNostrRelayServer(grpcServer, handler) + + log.Printf("gRPC server listening on %s", *grpcAddr) + log.Printf("Database: %s", *dbPath) + + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) + + go func() { + <-sigChan + log.Println("Shutting down...") + grpcServer.GracefulStop() + }() + + if err := grpcServer.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } +} -- cgit v1.2.3