// Package main provides a utility to dump raw RIS Live stream messages to stdout package main import ( "context" "fmt" "log" "os" "os/signal" "syscall" "git.eeqj.de/sneak/routewatch/internal/logger" "git.eeqj.de/sneak/routewatch/internal/metrics" "git.eeqj.de/sneak/routewatch/internal/streamer" ) func main() { // Set up logger logger := logger.New() // Create metrics tracker metricsTracker := metrics.New() // Create streamer s := streamer.New(logger, metricsTracker) // Register raw message handler that prints to stdout s.RegisterRawHandler(func(line string) { _, _ = fmt.Fprintln(os.Stdout, line) }) // Start streaming before any defer: log.Fatal exits without running // deferred calls. err := s.Start(context.Background()) if err != nil { log.Fatal("Failed to start streamer:", err) } defer s.Stop() // Set up context with cancellation ctx, cancel := context.WithCancel(context.Background()) defer cancel() // Handle signals sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) go func() { <-sigChan log.Println("Received shutdown signal") cancel() }() // Wait for context cancellation <-ctx.Done() }