OSDN Git Service

Merge pull request #201 from Bytom/v0.1
[bytom/vapor.git] / vendor / github.com / grandcat / zeroconf / examples / resolv / client.go
diff --git a/vendor/github.com/grandcat/zeroconf/examples/resolv/client.go b/vendor/github.com/grandcat/zeroconf/examples/resolv/client.go
new file mode 100644 (file)
index 0000000..83186bc
--- /dev/null
@@ -0,0 +1,45 @@
+package main
+
+import (
+       "context"
+       "flag"
+       "log"
+       "time"
+
+       "github.com/grandcat/zeroconf"
+)
+
+var (
+       service  = flag.String("service", "_workstation._tcp", "Set the service category to look for devices.")
+       domain   = flag.String("domain", "local", "Set the search domain. For local networks, default is fine.")
+       waitTime = flag.Int("wait", 10, "Duration in [s] to run discovery.")
+)
+
+func main() {
+       flag.Parse()
+
+       // Discover all services on the network (e.g. _workstation._tcp)
+       resolver, err := zeroconf.NewResolver(nil)
+       if err != nil {
+               log.Fatalln("Failed to initialize resolver:", err.Error())
+       }
+
+       entries := make(chan *zeroconf.ServiceEntry)
+       go func(results <-chan *zeroconf.ServiceEntry) {
+               for entry := range results {
+                       log.Println(entry)
+               }
+               log.Println("No more entries.")
+       }(entries)
+
+       ctx, cancel := context.WithTimeout(context.Background(), time.Second*time.Duration(*waitTime))
+       defer cancel()
+       err = resolver.Browse(ctx, *service, *domain, entries)
+       if err != nil {
+               log.Fatalln("Failed to browse:", err.Error())
+       }
+
+       <-ctx.Done()
+       // Wait some additional time to see debug messages on go routine shutdown.
+       time.Sleep(1 * time.Second)
+}