summaryrefslogtreecommitdiffstats
path: root/cmd/relay/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/relay/main.go')
-rw-r--r--cmd/relay/main.go56
1 files changed, 56 insertions, 0 deletions
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 @@
1package main
2
3import (
4 "flag"
5 "log"
6 "net"
7 "os"
8 "os/signal"
9 "syscall"
10
11 "google.golang.org/grpc"
12
13 pb "northwest.io/nostr-grpc/api/nostr/v1"
14 grpchandler "northwest.io/nostr-grpc/internal/handler/grpc"
15 "northwest.io/nostr-grpc/internal/storage"
16)
17
18func main() {
19 var (
20 grpcAddr = flag.String("grpc-addr", ":50051", "gRPC server address")
21 dbPath = flag.String("db", "relay.db", "SQLite database path")
22 )
23 flag.Parse()
24
25 store, err := storage.New(*dbPath)
26 if err != nil {
27 log.Fatalf("failed to create storage: %v", err)
28 }
29 defer store.Close()
30
31 handler := grpchandler.NewServer(store)
32
33 lis, err := net.Listen("tcp", *grpcAddr)
34 if err != nil {
35 log.Fatalf("failed to listen: %v", err)
36 }
37
38 grpcServer := grpc.NewServer()
39 pb.RegisterNostrRelayServer(grpcServer, handler)
40
41 log.Printf("gRPC server listening on %s", *grpcAddr)
42 log.Printf("Database: %s", *dbPath)
43
44 sigChan := make(chan os.Signal, 1)
45 signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
46
47 go func() {
48 <-sigChan
49 log.Println("Shutting down...")
50 grpcServer.GracefulStop()
51 }()
52
53 if err := grpcServer.Serve(lis); err != nil {
54 log.Fatalf("failed to serve: %v", err)
55 }
56}