// Searches for new syncgroups being advertised, sends found syncgroups to sgChan func ScanForSG(ctx *context.T, quit chan bool, u *uistate.UIState) { mdns, err := mdns.New("") if err != nil { ctx.Fatalf("Plugin failed: %v", err) } ds := ldiscovery.NewWithPlugins([]ldiscovery.Plugin{mdns}) fmt.Printf("Start scanning...\n") ch, err := ds.Scan(ctx, fmt.Sprintf("v.InterfaceName = \"%s\"", util.CroupierInterface)) if err != nil { ctx.Fatalf("Scan failed: %v", err) } instances := make(map[string]string) loop: for { select { case update := <-ch: GetSG(instances, update, u) view.LoadDiscoveryView(u) case <-signals.ShutdownOnSignals(ctx): break loop case <-quit: break loop } } }
// Advertises a set of game log and game settings syncgroups func Advertise(logAddress, settingsAddress, gameStartData string, quit chan bool, ctx *context.T) { ctx, stop := context.WithCancel(ctx) mdns, err := mdns.New("") if err != nil { ctx.Fatalf("mDNS failed: %v", err) } discoveryService := ldiscovery.NewWithPlugins([]ldiscovery.Plugin{mdns}) gameService := discovery.Service{ InstanceName: "A sample game service", InterfaceName: util.CroupierInterface, Attrs: map[string]string{"settings_sgname": settingsAddress, "game_start_data": gameStartData}, Addrs: []string{logAddress}, } if _, err := discoveryService.Advertise(ctx, &gameService, nil); err != nil { ctx.Fatalf("Advertise failed: %v", err) } select { case <-signals.ShutdownOnSignals(ctx): stop() case <-quit: stop() } }