package main import ( "fmt" "log" "os" "time" "github.com/grandcat/zeroconf" "golang.org/x/net/context" ) func main() { // Create or open a log file logFile, err := os.OpenFile("program.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Fatalf("Failed to open log file: %v", err) } defer logFile.Close() // Set log output to the file log.SetOutput(logFile) // Log a startup message log.Println("Starting mDNS query for 'hue-bridge'") // Create a new resolver resolver, err := zeroconf.NewResolver(nil) if err != nil { log.Fatalf("Failed to initialize resolver: %v", err) } // Set up a context with a timeout ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() // Channel to recive the results entries := make(chan *zeroconf.ServiceEntry) // Start the lookup for the Hue Bridge go func() { err = resolver.Browse(ctx, "_hue._tcp", "local.", entries) if err != nil { log.Fatalf("Failed to browse for Hue Bridge: %v", err) } }() // Process the results go func() { for entry := range entries { fmt.Printf("Found Device: %s\n", entry.HostName) fmt.Printf("IP Addresses: %v\n", entry.AddrIPv4) } fmt.Printf("Number of devices found: %d\n", len(entries)) }() // Wait for the context to expire <-ctx.Done() fmt.Println("mDNS query finished") }